Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
cz.vutbr.web.csskit.antlr4.CSSLexer Maven / Gradle / Ivy
// Generated from cz/vutbr/web/csskit/antlr4/CSSLexer.g4 by ANTLR 4.5.3
package cz.vutbr.web.csskit.antlr4;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class CSSLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.5.3", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
STYLESHEET=1, INLINESTYLE=2, ATBLOCK=3, CURLYBLOCK=4, PARENBLOCK=5, BRACKETBLOCK=6,
RULE=7, SELECTOR=8, ELEMENT=9, PSEUDOCLASS=10, PSEUDOELEM=11, ADJACENT=12,
PRECEDING=13, CHILD=14, DESCENDANT=15, ATTRIBUTE=16, SET=17, DECLARATION=18,
VALUE=19, MEDIA_QUERY=20, INVALID_STRING=21, INVALID_SELECTOR=22, INVALID_SELPART=23,
INVALID_DECLARATION=24, INVALID_STATEMENT=25, INVALID_ATSTATEMENT=26,
INVALID_IMPORT=27, INVALID_DIRECTIVE=28, IMPORTANT=29, IDENT=30, CHARSET=31,
IMPORT=32, KEYFRAMES=33, MEDIA=34, PAGE=35, MARGIN_AREA=36, VIEWPORT=37,
FONTFACE=38, ATKEYWORD=39, CLASSKEYWORD=40, STRING=41, UNCLOSED_STRING=42,
HASH=43, INDEX=44, NUMBER=45, PERCENTAGE=46, DIMENSION=47, URI=48, UNCLOSED_URI=49,
UNIRANGE=50, CDO=51, CDC=52, SEMICOLON=53, COLON=54, COMMA=55, QUESTION=56,
PERCENT=57, EQUALS=58, SLASH=59, GREATER=60, LESS=61, LCURLY=62, RCURLY=63,
APOS=64, QUOT=65, LPAREN=66, RPAREN=67, LBRACKET=68, RBRACKET=69, EXCLAMATION=70,
TILDE=71, MINUS=72, PLUS=73, ASTERISK=74, POUND=75, AMPERSAND=76, HAT=77,
S=78, COMMENT=79, SL_COMMENT=80, EXPRESSION=81, FUNCTION=82, INCLUDES=83,
DASHMATCH=84, STARTSWITH=85, ENDSWITH=86, CONTAINS=87, CTRL=88, INVALID_TOKEN=89,
STRING_MACR=90, UNCLOSED_STRING_MACR=91, STRING_CHAR=92;
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] ruleNames = {
"IMPORTANT", "IDENT", "CHARSET", "IMPORT", "KEYFRAMES", "MEDIA", "PAGE",
"MARGIN_AREA", "VIEWPORT", "FONTFACE", "ATKEYWORD", "CLASSKEYWORD", "STRING",
"UNCLOSED_STRING", "HASH", "INDEX", "NUMBER", "PERCENTAGE", "DIMENSION",
"URI", "UNCLOSED_URI", "UNIRANGE", "CDO", "CDC", "SEMICOLON", "COLON",
"COMMA", "QUESTION", "PERCENT", "EQUALS", "SLASH", "GREATER", "LESS",
"LCURLY", "RCURLY", "APOS", "QUOT", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET",
"EXCLAMATION", "TILDE", "MINUS", "PLUS", "ASTERISK", "POUND", "AMPERSAND",
"HAT", "S", "COMMENT", "SL_COMMENT", "EXPRESSION", "FUNCTION", "INCLUDES",
"DASHMATCH", "STARTSWITH", "ENDSWITH", "CONTAINS", "CTRL", "INVALID_TOKEN",
"IDENT_MACR", "NAME_MACR", "NAME_START", "NON_ASCII", "ESCAPE_CHAR", "NAME_CHAR",
"INTEGER_MACR", "NUMBER_MACR", "STRING_MACR", "UNCLOSED_STRING_MACR",
"STRING_CHAR", "URI_MACR", "URI_CHAR", "NL_CHAR", "W_MACR", "W_CHAR",
"CTRL_CHAR"
};
private static final String[] _LITERAL_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, "'important'", null, null, "'@import'",
"'@keyframes'", "'@media'", "'@page'", null, "'@viewport'", "'@font-face'",
null, null, null, null, null, null, null, null, null, null, null, null,
"''", "';'", "':'", "','", "'?'", "'%'", "'='", "'/'", "'>'",
"'<'", "'{'", "'}'", "'''", "'\"'", "'('", "')'", "'['", "']'", "'!'",
"'~'", "'-'", "'+'", "'*'", "'#'", "'&'", "'^'", null, null, null, "'expression('",
null, "'~='", "'|='", "'^='", "'$='", "'*='"
};
private static final String[] _SYMBOLIC_NAMES = {
null, "STYLESHEET", "INLINESTYLE", "ATBLOCK", "CURLYBLOCK", "PARENBLOCK",
"BRACKETBLOCK", "RULE", "SELECTOR", "ELEMENT", "PSEUDOCLASS", "PSEUDOELEM",
"ADJACENT", "PRECEDING", "CHILD", "DESCENDANT", "ATTRIBUTE", "SET", "DECLARATION",
"VALUE", "MEDIA_QUERY", "INVALID_STRING", "INVALID_SELECTOR", "INVALID_SELPART",
"INVALID_DECLARATION", "INVALID_STATEMENT", "INVALID_ATSTATEMENT", "INVALID_IMPORT",
"INVALID_DIRECTIVE", "IMPORTANT", "IDENT", "CHARSET", "IMPORT", "KEYFRAMES",
"MEDIA", "PAGE", "MARGIN_AREA", "VIEWPORT", "FONTFACE", "ATKEYWORD", "CLASSKEYWORD",
"STRING", "UNCLOSED_STRING", "HASH", "INDEX", "NUMBER", "PERCENTAGE",
"DIMENSION", "URI", "UNCLOSED_URI", "UNIRANGE", "CDO", "CDC", "SEMICOLON",
"COLON", "COMMA", "QUESTION", "PERCENT", "EQUALS", "SLASH", "GREATER",
"LESS", "LCURLY", "RCURLY", "APOS", "QUOT", "LPAREN", "RPAREN", "LBRACKET",
"RBRACKET", "EXCLAMATION", "TILDE", "MINUS", "PLUS", "ASTERISK", "POUND",
"AMPERSAND", "HAT", "S", "COMMENT", "SL_COMMENT", "EXPRESSION", "FUNCTION",
"INCLUDES", "DASHMATCH", "STARTSWITH", "ENDSWITH", "CONTAINS", "CTRL",
"INVALID_TOKEN", "STRING_MACR", "UNCLOSED_STRING_MACR", "STRING_CHAR"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
// CSSLexer.g4 members start
private org.slf4j.Logger log;
// number of already processed tokens (for checking the beginning of the style sheet)
protected int tokencnt = 0;
// 'charset changed' flag for preventing multiple @charset rules
protected boolean charsetChanged = false;
// current lexer state
protected cz.vutbr.web.csskit.antlr4.CSSLexerState ls;
// last UNCLOSED_* token
protected cz.vutbr.web.csskit.antlr4.CSSToken lastUnclosed;
/**
* token facctory for generating custom tokens (CSSToken)
*/
protected cz.vutbr.web.csskit.antlr4.CSSTokenFactory tf;
protected cz.vutbr.web.csskit.antlr4.CSSTokenRecovery tr;
/**
* This function must be called to initialize lexer's state.
* Because we can't change directly generated constructors.
*/
public void init() {
this.log = org.slf4j.LoggerFactory.getLogger(getClass());
this.ls = new cz.vutbr.web.csskit.antlr4.CSSLexerState();
//initialize CSSTokenFactory
this.tf = new cz.vutbr.web.csskit.antlr4.CSSTokenFactory(_tokenFactorySourcePair, this, ls, getClass());
//initialize CSSTokenRecovery
this.tr = new cz.vutbr.web.csskit.antlr4.CSSTokenRecovery(this, _input, ls, log);
}
@Override
public void reset() {
throw new UnsupportedOperationException();
}
/**
* Overrides inputStream to avoid setting input
* stream after construction
*/
@Override
public void setInputStream(IntStream input) {
throw new UnsupportedOperationException();
}
/**
* Overrides next token to match includes and to
* recover from EOF
*/
@Override
public Token nextToken(){
Token token = tr.nextToken();
//count non-empty tokens for eventual checking of the style sheet start
if (token.getType() == S) {
tokencnt++;
}
//save last UNCLOSED_URI for later checking the EOF
if (token.getType() == UNCLOSED_URI) {
lastUnclosed = (CSSToken) token;
lastUnclosed.setValid(false);
}
//in case of EOF, convert the unclosed token to closed one
else if (token.getType() == Token.EOF) {
if (lastUnclosed != null) {
lastUnclosed.setValid(true);
log.debug("Validating UNCLOSED_URI by EOF");
}
}
//reset unclosed uri
else if (!tr.isAtEof())
lastUnclosed = null;
// Skip first token after switching on another input.
if(((CommonToken)token).getStartIndex() < 0)
token = nextToken();
return token;
}
/**
* Adds contextual information about nesting into token.
*/
@Override
public Token emit() {
Token t = tf.make();
emit(t);
return t;
}
/**
* Does special token recovery for some cases
*/
@Override
public void recover(RecognitionException re) {
log.debug("recover" + re.toString());
if (!tr.recover())
super.recover(re);
}
// CSSLexer.g4 members end
public CSSLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "CSSLexer.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
@Override
public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
switch (ruleIndex) {
case 2:
CHARSET_action((RuleContext)_localctx, actionIndex);
break;
case 12:
STRING_action((RuleContext)_localctx, actionIndex);
break;
case 24:
SEMICOLON_action((RuleContext)_localctx, actionIndex);
break;
case 33:
LCURLY_action((RuleContext)_localctx, actionIndex);
break;
case 34:
RCURLY_action((RuleContext)_localctx, actionIndex);
break;
case 35:
APOS_action((RuleContext)_localctx, actionIndex);
break;
case 36:
QUOT_action((RuleContext)_localctx, actionIndex);
break;
case 37:
LPAREN_action((RuleContext)_localctx, actionIndex);
break;
case 38:
RPAREN_action((RuleContext)_localctx, actionIndex);
break;
case 39:
LBRACKET_action((RuleContext)_localctx, actionIndex);
break;
case 40:
RBRACKET_action((RuleContext)_localctx, actionIndex);
break;
case 53:
FUNCTION_action((RuleContext)_localctx, actionIndex);
break;
case 69:
STRING_MACR_action((RuleContext)_localctx, actionIndex);
break;
case 70:
UNCLOSED_STRING_MACR_action((RuleContext)_localctx, actionIndex);
break;
}
}
private void CHARSET_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 0:
tr.expecting(CHARSET);
break;
case 1:
// we have to trim manually
String enc = cz.vutbr.web.csskit.antlr4.CSSToken.extractCHARSET(getText());
if (tokencnt <= 1 && !charsetChanged) //we are at the beginning of the style sheet
{
try {
log.warn("Changing charset to {}", enc);
charsetChanged = true;
((cz.vutbr.web.csskit.antlr4.CSSInputStream) _input).setEncoding(enc);
}
catch(java.nio.charset.IllegalCharsetNameException icne) {
log.warn("Could not change to unsupported charset!", icne);
throw new RuntimeException(new cz.vutbr.web.css.CSSException("Unsupported charset: " + enc));
}
catch (java.io.IOException e) {
log.warn("Could not change to unsupported charset!", e);
}
}
else{
log.warn("Ignoring @charset rule not at the beginning of the style sheet");
}
tr.end();
break;
}
}
private void STRING_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 2:
tr.expecting(STRING);
break;
case 3:
tr.end();
break;
}
}
private void SEMICOLON_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 4:
ls.sqNest = 0;
break;
}
}
private void LCURLY_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 5:
ls.curlyNest++;
break;
}
}
private void RCURLY_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 6:
if(ls.curlyNest>0) ls.curlyNest--; ls.sqNest = 0;
break;
}
}
private void APOS_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 7:
ls.aposOpen=!ls.aposOpen;
break;
}
}
private void QUOT_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 8:
ls.quotOpen=!ls.quotOpen;
break;
}
}
private void LPAREN_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 9:
ls.parenNest++;
break;
}
}
private void RPAREN_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 10:
if(ls.parenNest>0) ls.parenNest--;
break;
}
}
private void LBRACKET_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 11:
ls.sqNest++;
break;
}
}
private void RBRACKET_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 12:
if(ls.sqNest>0) ls.sqNest--;
break;
}
}
private void FUNCTION_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 13:
ls.parenNest++;
break;
}
}
private void STRING_MACR_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 14:
ls.aposOpen=false;
break;
case 15:
ls.quotOpen=false;
break;
}
}
private void UNCLOSED_STRING_MACR_action(RuleContext _localctx, int actionIndex) {
switch (actionIndex) {
case 16:
ls.aposOpen=false;
break;
case 17:
ls.quotOpen=false;
break;
}
}
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2^\u034b\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3"+
"\2\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u00b7"+
"\n\4\f\4\16\4\u00ba\13\4\3\4\5\4\u00bd\n\4\3\4\7\4\u00c0\n\4\f\4\16\4"+
"\u00c3\13\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3"+
"\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b"+
"\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
"\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
"\3\t\3\t\3\t\5\t\u01ba\n\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13"+
"\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\5\f\u01d3\n"+
"\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3"+
"\21\5\21\u01e4\n\21\3\21\3\21\7\21\u01e8\n\21\f\21\16\21\u01eb\13\21\3"+
"\21\3\21\5\21\u01ef\n\21\3\21\7\21\u01f2\n\21\f\21\16\21\u01f5\13\21\3"+
"\21\3\21\5\21\u01f9\n\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25"+
"\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u020b\n\25\3\25\3\25\3\25\3\26"+
"\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u0219\n\26\3\26\3\26\3\27"+
"\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u0226\n\27\3\27\3\27\3\27"+
"\3\27\3\27\3\27\3\27\5\27\u022f\n\27\5\27\u0231\n\27\3\30\3\30\3\30\3"+
"\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3"+
"\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3"+
"%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3,\3,\3-\3-\3"+
".\3.\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\63\6\63\u0278\n\63\r\63\16"+
"\63\u0279\3\64\3\64\3\64\3\64\7\64\u0280\n\64\f\64\16\64\u0283\13\64\3"+
"\64\3\64\3\64\5\64\u0288\n\64\3\64\3\64\3\65\3\65\3\65\3\65\7\65\u0290"+
"\n\65\f\65\16\65\u0293\13\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3"+
"\66\3\66\3\66\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\38\38\38\3"+
"9\39\39\3:\3:\3:\3;\3;\3;\3<\3<\3<\3=\6=\u02b9\n=\r=\16=\u02ba\3>\3>\3"+
"?\3?\7?\u02c1\n?\f?\16?\u02c4\13?\3@\6@\u02c7\n@\r@\16@\u02c8\3A\3A\3"+
"A\5A\u02ce\nA\3B\3B\3C\3C\6C\u02d4\nC\rC\16C\u02d5\3C\5C\u02d9\nC\3C\5"+
"C\u02dc\nC\3D\3D\3D\5D\u02e1\nD\3E\6E\u02e4\nE\rE\16E\u02e5\3F\6F\u02e9"+
"\nF\rF\16F\u02ea\3F\7F\u02ee\nF\fF\16F\u02f1\13F\3F\3F\6F\u02f5\nF\rF"+
"\16F\u02f6\5F\u02f9\nF\3G\3G\3G\3G\3G\7G\u0300\nG\fG\16G\u0303\13G\3G"+
"\3G\3G\3G\3G\3G\3G\7G\u030c\nG\fG\16G\u030f\13G\3G\3G\5G\u0313\nG\3H\3"+
"H\3H\3H\3H\7H\u031a\nH\fH\16H\u031d\13H\3H\3H\3H\3H\3H\7H\u0324\nH\fH"+
"\16H\u0327\13H\5H\u0329\nH\3I\3I\3I\3I\5I\u032f\nI\3J\7J\u0332\nJ\fJ\16"+
"J\u0335\13J\3K\3K\3K\5K\u033a\nK\3L\3L\3L\3L\5L\u0340\nL\3M\7M\u0343\n"+
"M\fM\16M\u0346\13M\3N\3N\3O\3O\4\u0281\u0291\2P\3\37\5 \7!\t\"\13#\r$"+
"\17%\21&\23\'\25(\27)\31*\33+\35,\37-!.#/%\60\'\61)\62+\63-\64/\65\61"+
"\66\63\67\658\6799:;;==A>C?E@GAIBKCMDOEQFSGUHWIYJ[K]L_MaNcOePgQiRkS"+
"mToUqVsWuXwYyZ{[}\2\177\2\u0081\2\u0083\2\u0085\2\u0087\2\u0089\2\u008b"+
"\2\u008d\\\u008f]\u0091^\u0093\2\u0095\2\u0097\2\u0099\2\u009b\2\u009d"+
"\2\3\2\16\4\2PPpp\6\2\62;AACHch\5\2\62;CHch\4\2\f\f\17\17\5\2C\\aac|\4"+
"\2\u0082\ud801\ue002\uffff\b\2\"\61\2\2\u0233\u0234\7#\2\2\u0234"+
"\u0235\7/\2\2\u0235\u0236\7/\2\2\u0236\60\3\2\2\2\u0237\u0238\7/\2\2\u0238"+
"\u0239\7/\2\2\u0239\u023a\7@\2\2\u023a\62\3\2\2\2\u023b\u023c\7=\2\2\u023c"+
"\u023d\b\32\6\2\u023d\64\3\2\2\2\u023e\u023f\7<\2\2\u023f\66\3\2\2\2\u0240"+
"\u0241\7.\2\2\u02418\3\2\2\2\u0242\u0243\7A\2\2\u0243:\3\2\2\2\u0244\u0245"+
"\7\'\2\2\u0245<\3\2\2\2\u0246\u0247\7?\2\2\u0247>\3\2\2\2\u0248\u0249"+
"\7\61\2\2\u0249@\3\2\2\2\u024a\u024b\7@\2\2\u024bB\3\2\2\2\u024c\u024d"+
"\7>\2\2\u024dD\3\2\2\2\u024e\u024f\7}\2\2\u024f\u0250\b#\7\2\u0250F\3"+
"\2\2\2\u0251\u0252\7\177\2\2\u0252\u0253\b$\b\2\u0253H\3\2\2\2\u0254\u0255"+
"\7)\2\2\u0255\u0256\b%\t\2\u0256J\3\2\2\2\u0257\u0258\7$\2\2\u0258\u0259"+
"\b&\n\2\u0259L\3\2\2\2\u025a\u025b\7*\2\2\u025b\u025c\b\'\13\2\u025cN"+
"\3\2\2\2\u025d\u025e\7+\2\2\u025e\u025f\b(\f\2\u025fP\3\2\2\2\u0260\u0261"+
"\7]\2\2\u0261\u0262\b)\r\2\u0262R\3\2\2\2\u0263\u0264\7_\2\2\u0264\u0265"+
"\b*\16\2\u0265T\3\2\2\2\u0266\u0267\7#\2\2\u0267V\3\2\2\2\u0268\u0269"+
"\7\u0080\2\2\u0269X\3\2\2\2\u026a\u026b\7/\2\2\u026bZ\3\2\2\2\u026c\u026d"+
"\7-\2\2\u026d\\\3\2\2\2\u026e\u026f\7,\2\2\u026f^\3\2\2\2\u0270\u0271"+
"\7%\2\2\u0271`\3\2\2\2\u0272\u0273\7(\2\2\u0273b\3\2\2\2\u0274\u0275\7"+
"`\2\2\u0275d\3\2\2\2\u0276\u0278\5\u009bN\2\u0277\u0276\3\2\2\2\u0278"+
"\u0279\3\2\2\2\u0279\u0277\3\2\2\2\u0279\u027a\3\2\2\2\u027af\3\2\2\2"+
"\u027b\u027c\7\61\2\2\u027c\u027d\7,\2\2\u027d\u0281\3\2\2\2\u027e\u0280"+
"\13\2\2\2\u027f\u027e\3\2\2\2\u0280\u0283\3\2\2\2\u0281\u0282\3\2\2\2"+
"\u0281\u027f\3\2\2\2\u0282\u0287\3\2\2\2\u0283\u0281\3\2\2\2\u0284\u0285"+
"\7,\2\2\u0285\u0288\7\61\2\2\u0286\u0288\7\2\2\3\u0287\u0284\3\2\2\2\u0287"+
"\u0286\3\2\2\2\u0288\u0289\3\2\2\2\u0289\u028a\b\64\17\2\u028ah\3\2\2"+
"\2\u028b\u028c\7\61\2\2\u028c\u028d\7\61\2\2\u028d\u0291\3\2\2\2\u028e"+
"\u0290\13\2\2\2\u028f\u028e\3\2\2\2\u0290\u0293\3\2\2\2\u0291\u0292\3"+
"\2\2\2\u0291\u028f\3\2\2\2\u0292\u0294\3\2\2\2\u0293\u0291\3\2\2\2\u0294"+
"\u0295\t\5\2\2\u0295\u0296\3\2\2\2\u0296\u0297\b\65\17\2\u0297j\3\2\2"+
"\2\u0298\u0299\7g\2\2\u0299\u029a\7z\2\2\u029a\u029b\7r\2\2\u029b\u029c"+
"\7t\2\2\u029c\u029d\7g\2\2\u029d\u029e\7u\2\2\u029e\u029f\7u\2\2\u029f"+
"\u02a0\7k\2\2\u02a0\u02a1\7q\2\2\u02a1\u02a2\7p\2\2\u02a2\u02a3\7*\2\2"+
"\u02a3l\3\2\2\2\u02a4\u02a5\5}?\2\u02a5\u02a6\7*\2\2\u02a6\u02a7\b\67"+
"\20\2\u02a7n\3\2\2\2\u02a8\u02a9\7\u0080\2\2\u02a9\u02aa\7?\2\2\u02aa"+
"p\3\2\2\2\u02ab\u02ac\7~\2\2\u02ac\u02ad\7?\2\2\u02adr\3\2\2\2\u02ae\u02af"+
"\7`\2\2\u02af\u02b0\7?\2\2\u02b0t\3\2\2\2\u02b1\u02b2\7&\2\2\u02b2\u02b3"+
"\7?\2\2\u02b3v\3\2\2\2\u02b4\u02b5\7,\2\2\u02b5\u02b6\7?\2\2\u02b6x\3"+
"\2\2\2\u02b7\u02b9\5\u009dO\2\u02b8\u02b7\3\2\2\2\u02b9\u02ba\3\2\2\2"+
"\u02ba\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bbz\3\2\2\2\u02bc\u02bd\13"+
"\2\2\2\u02bd|\3\2\2\2\u02be\u02c2\5\u0081A\2\u02bf\u02c1\5\u0087D\2\u02c0"+
"\u02bf\3\2\2\2\u02c1\u02c4\3\2\2\2\u02c2\u02c0\3\2\2\2\u02c2\u02c3\3\2"+
"\2\2\u02c3~\3\2\2\2\u02c4\u02c2\3\2\2\2\u02c5\u02c7\5\u0087D\2\u02c6\u02c5"+
"\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02c6\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c9"+
"\u0080\3\2\2\2\u02ca\u02ce\t\6\2\2\u02cb\u02ce\5\u0083B\2\u02cc\u02ce"+
"\5\u0085C\2\u02cd\u02ca\3\2\2\2\u02cd\u02cb\3\2\2\2\u02cd\u02cc\3\2\2"+
"\2\u02ce\u0082\3\2\2\2\u02cf\u02d0\t\7\2\2\u02d0\u0084\3\2\2\2\u02d1\u02db"+
"\7^\2\2\u02d2\u02d4\t\4\2\2\u02d3\u02d2\3\2\2\2\u02d4\u02d5\3\2\2\2\u02d5"+
"\u02d3\3\2\2\2\u02d5\u02d6\3\2\2\2\u02d6\u02d8\3\2\2\2\u02d7\u02d9\5\u009b"+
"N\2\u02d8\u02d7\3\2\2\2\u02d8\u02d9\3\2\2\2\u02d9\u02dc\3\2\2\2\u02da"+
"\u02dc\t\b\2\2\u02db\u02d3\3\2\2\2\u02db\u02da\3\2\2\2\u02dc\u0086\3\2"+
"\2\2\u02dd\u02e1\t\t\2\2\u02de\u02e1\5\u0083B\2\u02df\u02e1\5\u0085C\2"+
"\u02e0\u02dd\3\2\2\2\u02e0\u02de\3\2\2\2\u02e0\u02df\3\2\2\2\u02e1\u0088"+
"\3\2\2\2\u02e2\u02e4\4\62;\2\u02e3\u02e2\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5"+
"\u02e3\3\2\2\2\u02e5\u02e6\3\2\2\2\u02e6\u008a\3\2\2\2\u02e7\u02e9\4\62"+
";\2\u02e8\u02e7\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02e8\3\2\2\2\u02ea"+
"\u02eb\3\2\2\2\u02eb\u02f9\3\2\2\2\u02ec\u02ee\4\62;\2\u02ed\u02ec\3\2"+
"\2\2\u02ee\u02f1\3\2\2\2\u02ef\u02ed\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0"+
"\u02f2\3\2\2\2\u02f1\u02ef\3\2\2\2\u02f2\u02f4\7\60\2\2\u02f3\u02f5\4"+
"\62;\2\u02f4\u02f3\3\2\2\2\u02f5\u02f6\3\2\2\2\u02f6\u02f4\3\2\2\2\u02f6"+
"\u02f7\3\2\2\2\u02f7\u02f9\3\2\2\2\u02f8\u02e8\3\2\2\2\u02f8\u02ef\3\2"+
"\2\2\u02f9\u008c\3\2\2\2\u02fa\u0301\5K&\2\u02fb\u0300\5\u0091I\2\u02fc"+
"\u02fd\5I%\2\u02fd\u02fe\bG\21\2\u02fe\u0300\3\2\2\2\u02ff\u02fb\3\2\2"+
"\2\u02ff\u02fc\3\2\2\2\u0300\u0303\3\2\2\2\u0301\u02ff\3\2\2\2\u0301\u0302"+
"\3\2\2\2\u0302\u0304\3\2\2\2\u0303\u0301\3\2\2\2\u0304\u0305\5K&\2\u0305"+
"\u0313\3\2\2\2\u0306\u030d\5I%\2\u0307\u030c\5\u0091I\2\u0308\u0309\5"+
"K&\2\u0309\u030a\bG\22\2\u030a\u030c\3\2\2\2\u030b\u0307\3\2\2\2\u030b"+
"\u0308\3\2\2\2\u030c\u030f\3\2\2\2\u030d\u030b\3\2\2\2\u030d\u030e\3\2"+
"\2\2\u030e\u0310\3\2\2\2\u030f\u030d\3\2\2\2\u0310\u0311\5I%\2\u0311\u0313"+
"\3\2\2\2\u0312\u02fa\3\2\2\2\u0312\u0306\3\2\2\2\u0313\u008e\3\2\2\2\u0314"+
"\u031b\5K&\2\u0315\u031a\5\u0091I\2\u0316\u0317\5I%\2\u0317\u0318\bH\23"+
"\2\u0318\u031a\3\2\2\2\u0319\u0315\3\2\2\2\u0319\u0316\3\2\2\2\u031a\u031d"+
"\3\2\2\2\u031b\u0319\3\2\2\2\u031b\u031c\3\2\2\2\u031c\u0329\3\2\2\2\u031d"+
"\u031b\3\2\2\2\u031e\u0325\5I%\2\u031f\u0324\5\u0091I\2\u0320\u0321\5"+
"K&\2\u0321\u0322\bH\24\2\u0322\u0324\3\2\2\2\u0323\u031f\3\2\2\2\u0323"+
"\u0320\3\2\2\2\u0324\u0327\3\2\2\2\u0325\u0323\3\2\2\2\u0325\u0326\3\2"+
"\2\2\u0326\u0329\3\2\2\2\u0327\u0325\3\2\2\2\u0328\u0314\3\2\2\2\u0328"+
"\u031e\3\2\2\2\u0329\u0090\3\2\2\2\u032a\u032f\5\u0095K\2\u032b\u032f"+
"\t\n\2\2\u032c\u032d\7^\2\2\u032d\u032f\5\u0097L\2\u032e\u032a\3\2\2\2"+
"\u032e\u032b\3\2\2\2\u032e\u032c\3\2\2\2\u032f\u0092\3\2\2\2\u0330\u0332"+
"\5\u0095K\2\u0331\u0330\3\2\2\2\u0332\u0335\3\2\2\2\u0333\u0331\3\2\2"+
"\2\u0333\u0334\3\2\2\2\u0334\u0094\3\2\2\2\u0335\u0333\3\2\2\2\u0336\u033a"+
"\t\13\2\2\u0337\u033a\5\u0083B\2\u0338\u033a\5\u0085C\2\u0339\u0336\3"+
"\2\2\2\u0339\u0337\3\2\2\2\u0339\u0338\3\2\2\2\u033a\u0096\3\2\2\2\u033b"+
"\u0340\7\f\2\2\u033c\u033d\7\17\2\2\u033d\u0340\7\f\2\2\u033e\u0340\4"+
"\16\17\2\u033f\u033b\3\2\2\2\u033f\u033c\3\2\2\2\u033f\u033e\3\2\2\2\u0340"+
"\u0098\3\2\2\2\u0341\u0343\5\u009bN\2\u0342\u0341\3\2\2\2\u0343\u0346"+
"\3\2\2\2\u0344\u0342\3\2\2\2\u0344\u0345\3\2\2\2\u0345\u009a\3\2\2\2\u0346"+
"\u0344\3\2\2\2\u0347\u0348\t\f\2\2\u0348\u009c\3\2\2\2\u0349\u034a\t\r"+
"\2\2\u034a\u009e\3\2\2\2\62\2\u00b8\u00bc\u00c1\u01b9\u01d2\u01e3\u01e9"+
"\u01ee\u01f3\u01f8\u020a\u0218\u0225\u022e\u0230\u0279\u0281\u0287\u0291"+
"\u02ba\u02c2\u02c8\u02cd\u02d5\u02d8\u02db\u02e0\u02e5\u02ea\u02ef\u02f6"+
"\u02f8\u02ff\u0301\u030b\u030d\u0312\u0319\u031b\u0323\u0325\u0328\u032e"+
"\u0333\u0339\u033f\u0344\25\3\4\2\3\4\3\3\16\4\3\16\5\3\32\6\3#\7\3$\b"+
"\3%\t\3&\n\3\'\13\3(\f\3)\r\3*\16\2\3\2\3\67\17\3G\20\3G\21\3H\22\3H\23";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}