Highlight TODOs and '#warn' comments

Included Javadoc lexer and parser
This commit is contained in:
Akash Yadav
2021-10-21 19:43:09 +05:30
parent bdf959dabf
commit 7d380e5303
29 changed files with 3820 additions and 469 deletions
Binary file not shown.
@@ -169,7 +169,8 @@ ELLIPSIS: '...';
// Whitespace and comments
WS: [ \t\r\n\u000C]+ -> channel(HIDDEN);
COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
BLOCK_COMMENT: '/**' .*? '*/' -> channel(HIDDEN);
JAVADOC_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
// Identifiers
File diff suppressed because one or more lines are too long
@@ -33,7 +33,8 @@ public class JavaLexer extends Lexer {
BITOR=91, CARET=92, MOD=93, ADD_ASSIGN=94, SUB_ASSIGN=95, MUL_ASSIGN=96,
DIV_ASSIGN=97, AND_ASSIGN=98, OR_ASSIGN=99, XOR_ASSIGN=100, MOD_ASSIGN=101,
LSHIFT_ASSIGN=102, RSHIFT_ASSIGN=103, URSHIFT_ASSIGN=104, ARROW=105, COLONCOLON=106,
AT=107, ELLIPSIS=108, WS=109, COMMENT=110, LINE_COMMENT=111, IDENTIFIER=112;
AT=107, ELLIPSIS=108, WS=109, BLOCK_COMMENT=110, JAVADOC_COMMENT=111,
LINE_COMMENT=112, IDENTIFIER=113;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -59,9 +60,9 @@ public class JavaLexer extends Lexer {
"DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
"MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
"COLONCOLON", "AT", "ELLIPSIS", "WS", "COMMENT", "LINE_COMMENT", "IDENTIFIER",
"ExponentPart", "EscapeSequence", "HexDigits", "HexDigit", "Digits",
"LetterOrDigit", "Letter"
"COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "JAVADOC_COMMENT",
"LINE_COMMENT", "IDENTIFIER", "ExponentPart", "EscapeSequence", "HexDigits",
"HexDigit", "Digits", "LetterOrDigit", "Letter"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -102,7 +103,8 @@ public class JavaLexer extends Lexer {
"DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
"MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
"COLONCOLON", "AT", "ELLIPSIS", "WS", "COMMENT", "LINE_COMMENT", "IDENTIFIER"
"COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "JAVADOC_COMMENT",
"LINE_COMMENT", "IDENTIFIER"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -164,7 +166,7 @@ public class JavaLexer extends Lexer {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2r\u03b9\b\1\4\2\t"+
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2s\u03ca\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"+
@@ -177,64 +179,65 @@ public class JavaLexer extends Lexer {
"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\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\t"+
"k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+
"w\tw\4x\tx\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3"+
"\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3"+
"\6\3\6\3\6\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\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f"+
"\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16"+
"\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\21\3\21"+
"\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23"+
"\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25"+
"\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+
"\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32"+
"\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33"+
"\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+
"\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\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%\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+\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\60\3\60\3\61\3\61\3\61\3\61\3"+
"\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
"\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\5\65\u024c\n\65\3\65\6\65"+
"\u024f\n\65\r\65\16\65\u0250\3\65\5\65\u0254\n\65\5\65\u0256\n\65\3\65"+
"\5\65\u0259\n\65\3\66\3\66\3\66\3\66\7\66\u025f\n\66\f\66\16\66\u0262"+
"\13\66\3\66\5\66\u0265\n\66\3\66\5\66\u0268\n\66\3\67\3\67\7\67\u026c"+
"\n\67\f\67\16\67\u026f\13\67\3\67\3\67\7\67\u0273\n\67\f\67\16\67\u0276"+
"\13\67\3\67\5\67\u0279\n\67\3\67\5\67\u027c\n\67\38\38\38\38\78\u0282"+
"\n8\f8\168\u0285\138\38\58\u0288\n8\38\58\u028b\n8\39\39\39\59\u0290\n"+
"9\39\39\59\u0294\n9\39\59\u0297\n9\39\59\u029a\n9\39\39\39\59\u029f\n"+
"9\39\59\u02a2\n9\59\u02a4\n9\3:\3:\3:\3:\5:\u02aa\n:\3:\5:\u02ad\n:\3"+
":\3:\5:\u02b1\n:\3:\3:\5:\u02b5\n:\3:\3:\5:\u02b9\n:\3;\3;\3;\3;\3;\3"+
";\3;\3;\3;\5;\u02c4\n;\3<\3<\3<\5<\u02c9\n<\3<\3<\3=\3=\3=\7=\u02d0\n"+
"=\f=\16=\u02d3\13=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3@\3@\3A\3A\3B\3B\3C\3C"+
"\3D\3D\3E\3E\3F\3F\3G\3G\3H\3H\3I\3I\3J\3J\3K\3K\3L\3L\3M\3M\3N\3N\3O"+
"\3O\3O\3P\3P\3P\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3T\3T\3T\3U\3U\3U\3V\3V\3V"+
"\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3\\\3\\\3]\3]\3^\3^\3_\3_\3_\3`\3`\3`\3"+
"a\3a\3a\3b\3b\3b\3c\3c\3c\3d\3d\3d\3e\3e\3e\3f\3f\3f\3g\3g\3g\3g\3h\3"+
"h\3h\3h\3i\3i\3i\3i\3i\3j\3j\3j\3k\3k\3k\3l\3l\3m\3m\3m\3m\3n\6n\u0356"+
"\nn\rn\16n\u0357\3n\3n\3o\3o\3o\3o\7o\u0360\no\fo\16o\u0363\13o\3o\3o"+
"\3o\3o\3o\3p\3p\3p\3p\7p\u036e\np\fp\16p\u0371\13p\3p\3p\3q\3q\7q\u0377"+
"\nq\fq\16q\u037a\13q\3r\3r\5r\u037e\nr\3r\3r\3s\3s\3s\3s\5s\u0386\ns\3"+
"s\5s\u0389\ns\3s\3s\3s\6s\u038e\ns\rs\16s\u038f\3s\3s\3s\3s\3s\5s\u0397"+
"\ns\3t\3t\3t\7t\u039c\nt\ft\16t\u039f\13t\3t\5t\u03a2\nt\3u\3u\3v\3v\7"+
"v\u03a8\nv\fv\16v\u03ab\13v\3v\5v\u03ae\nv\3w\3w\5w\u03b2\nw\3x\3x\3x"+
"\3x\5x\u03b8\nx\3\u0361\2y\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25"+
"\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32"+
"\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a"+
"\62c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087"+
"E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b"+
"O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00af"+
"Y\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3"+
"c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7"+
"m\u00d9n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3\2\u00e5\2\u00e7\2\u00e9\2\u00eb"+
"\2\u00ed\2\u00ef\2\3\2\34\3\2\63;\4\2NNnn\4\2ZZzz\5\2\62;CHch\6\2\62;"+
"w\tw\4x\tx\4y\ty\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3"+
"\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6"+
"\3\6\3\6\3\6\3\6\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\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3"+
"\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3"+
"\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3"+
"\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3"+
"\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3"+
"\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30\3\30\3"+
"\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3"+
"\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3"+
"\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3"+
"\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\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%"+
"\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+\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\60\3\60\3\61\3\61\3"+
"\61\3\61\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+
"\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\5\65\u024e\n\65"+
"\3\65\6\65\u0251\n\65\r\65\16\65\u0252\3\65\5\65\u0256\n\65\5\65\u0258"+
"\n\65\3\65\5\65\u025b\n\65\3\66\3\66\3\66\3\66\7\66\u0261\n\66\f\66\16"+
"\66\u0264\13\66\3\66\5\66\u0267\n\66\3\66\5\66\u026a\n\66\3\67\3\67\7"+
"\67\u026e\n\67\f\67\16\67\u0271\13\67\3\67\3\67\7\67\u0275\n\67\f\67\16"+
"\67\u0278\13\67\3\67\5\67\u027b\n\67\3\67\5\67\u027e\n\67\38\38\38\38"+
"\78\u0284\n8\f8\168\u0287\138\38\58\u028a\n8\38\58\u028d\n8\39\39\39\5"+
"9\u0292\n9\39\39\59\u0296\n9\39\59\u0299\n9\39\59\u029c\n9\39\39\39\5"+
"9\u02a1\n9\39\59\u02a4\n9\59\u02a6\n9\3:\3:\3:\3:\5:\u02ac\n:\3:\5:\u02af"+
"\n:\3:\3:\5:\u02b3\n:\3:\3:\5:\u02b7\n:\3:\3:\5:\u02bb\n:\3;\3;\3;\3;"+
"\3;\3;\3;\3;\3;\5;\u02c6\n;\3<\3<\3<\5<\u02cb\n<\3<\3<\3=\3=\3=\7=\u02d2"+
"\n=\f=\16=\u02d5\13=\3=\3=\3>\3>\3>\3>\3>\3?\3?\3@\3@\3A\3A\3B\3B\3C\3"+
"C\3D\3D\3E\3E\3F\3F\3G\3G\3H\3H\3I\3I\3J\3J\3K\3K\3L\3L\3M\3M\3N\3N\3"+
"O\3O\3O\3P\3P\3P\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3T\3T\3T\3U\3U\3U\3V\3V\3"+
"V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3\\\3\\\3]\3]\3^\3^\3_\3_\3_\3`\3`\3`"+
"\3a\3a\3a\3b\3b\3b\3c\3c\3c\3d\3d\3d\3e\3e\3e\3f\3f\3f\3g\3g\3g\3g\3h"+
"\3h\3h\3h\3i\3i\3i\3i\3i\3j\3j\3j\3k\3k\3k\3l\3l\3m\3m\3m\3m\3n\6n\u0358"+
"\nn\rn\16n\u0359\3n\3n\3o\3o\3o\3o\3o\7o\u0363\no\fo\16o\u0366\13o\3o"+
"\3o\3o\3o\3o\3p\3p\3p\3p\7p\u0371\np\fp\16p\u0374\13p\3p\3p\3p\3p\3p\3"+
"q\3q\3q\3q\7q\u037f\nq\fq\16q\u0382\13q\3q\3q\3r\3r\7r\u0388\nr\fr\16"+
"r\u038b\13r\3s\3s\5s\u038f\ns\3s\3s\3t\3t\3t\3t\5t\u0397\nt\3t\5t\u039a"+
"\nt\3t\3t\3t\6t\u039f\nt\rt\16t\u03a0\3t\3t\3t\3t\3t\5t\u03a8\nt\3u\3"+
"u\3u\7u\u03ad\nu\fu\16u\u03b0\13u\3u\5u\u03b3\nu\3v\3v\3w\3w\7w\u03b9"+
"\nw\fw\16w\u03bc\13w\3w\5w\u03bf\nw\3x\3x\5x\u03c3\nx\3y\3y\3y\3y\5y\u03c9"+
"\ny\4\u0364\u0372\2z\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27"+
"\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33"+
"\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63"+
"e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089"+
"F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+
"P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+
"Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5"+
"d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9"+
"n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5\2\u00e7\2\u00e9\2\u00eb\2\u00ed"+
"\2\u00ef\2\u00f1\2\3\2\34\3\2\63;\4\2NNnn\4\2ZZzz\5\2\62;CHch\6\2\62;"+
"CHaach\3\2\629\4\2\629aa\4\2DDdd\3\2\62\63\4\2\62\63aa\6\2FFHHffhh\4\2"+
"RRrr\4\2--//\6\2\f\f\17\17))^^\6\2\f\f\17\17$$^^\5\2\13\f\16\17\"\"\4"+
"\2\f\f\17\17\4\2GGgg\n\2$$))^^ddhhppttvv\3\2\62\65\3\2\62;\4\2\62;aa\6"+
"\2&&C\\aac|\4\2\2\u0081\ud802\udc01\3\2\ud802\udc01\3\2\udc02\ue001\2"+
"\u03e2\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2"+
"\u03f4\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2"+
"\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3"+
"\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2"+
"\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2"+
@@ -255,248 +258,253 @@ public class JavaLexer extends Lexer {
"\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb"+
"\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3\3\2\2"+
"\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00dd"+
"\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\3\u00f1\3\2\2\2\5\u00fa\3\2\2"+
"\2\7\u0101\3\2\2\2\t\u0109\3\2\2\2\13\u010f\3\2\2\2\r\u0114\3\2\2\2\17"+
"\u0119\3\2\2\2\21\u011f\3\2\2\2\23\u0124\3\2\2\2\25\u012a\3\2\2\2\27\u0130"+
"\3\2\2\2\31\u0139\3\2\2\2\33\u0141\3\2\2\2\35\u0144\3\2\2\2\37\u014b\3"+
"\2\2\2!\u0150\3\2\2\2#\u0155\3\2\2\2%\u015d\3\2\2\2\'\u0163\3\2\2\2)\u016b"+
"\3\2\2\2+\u0171\3\2\2\2-\u0175\3\2\2\2/\u0178\3\2\2\2\61\u017d\3\2\2\2"+
"\63\u0188\3\2\2\2\65\u018f\3\2\2\2\67\u019a\3\2\2\29\u019e\3\2\2\2;\u01a8"+
"\3\2\2\2=\u01ad\3\2\2\2?\u01b4\3\2\2\2A\u01b8\3\2\2\2C\u01c0\3\2\2\2E"+
"\u01c8\3\2\2\2G\u01d2\3\2\2\2I\u01d9\3\2\2\2K\u01e0\3\2\2\2M\u01e6\3\2"+
"\2\2O\u01ed\3\2\2\2Q\u01f6\3\2\2\2S\u01fc\3\2\2\2U\u0203\3\2\2\2W\u0210"+
"\3\2\2\2Y\u0215\3\2\2\2[\u021b\3\2\2\2]\u0222\3\2\2\2_\u022c\3\2\2\2a"+
"\u0230\3\2\2\2c\u0234\3\2\2\2e\u0239\3\2\2\2g\u0242\3\2\2\2i\u0255\3\2"+
"\2\2k\u025a\3\2\2\2m\u0269\3\2\2\2o\u027d\3\2\2\2q\u02a3\3\2\2\2s\u02a5"+
"\3\2\2\2u\u02c3\3\2\2\2w\u02c5\3\2\2\2y\u02cc\3\2\2\2{\u02d6\3\2\2\2}"+
"\u02db\3\2\2\2\177\u02dd\3\2\2\2\u0081\u02df\3\2\2\2\u0083\u02e1\3\2\2"+
"\2\u0085\u02e3\3\2\2\2\u0087\u02e5\3\2\2\2\u0089\u02e7\3\2\2\2\u008b\u02e9"+
"\3\2\2\2\u008d\u02eb\3\2\2\2\u008f\u02ed\3\2\2\2\u0091\u02ef\3\2\2\2\u0093"+
"\u02f1\3\2\2\2\u0095\u02f3\3\2\2\2\u0097\u02f5\3\2\2\2\u0099\u02f7\3\2"+
"\2\2\u009b\u02f9\3\2\2\2\u009d\u02fb\3\2\2\2\u009f\u02fe\3\2\2\2\u00a1"+
"\u0301\3\2\2\2\u00a3\u0304\3\2\2\2\u00a5\u0307\3\2\2\2\u00a7\u030a\3\2"+
"\2\2\u00a9\u030d\3\2\2\2\u00ab\u0310\3\2\2\2\u00ad\u0313\3\2\2\2\u00af"+
"\u0315\3\2\2\2\u00b1\u0317\3\2\2\2\u00b3\u0319\3\2\2\2\u00b5\u031b\3\2"+
"\2\2\u00b7\u031d\3\2\2\2\u00b9\u031f\3\2\2\2\u00bb\u0321\3\2\2\2\u00bd"+
"\u0323\3\2\2\2\u00bf\u0326\3\2\2\2\u00c1\u0329\3\2\2\2\u00c3\u032c\3\2"+
"\2\2\u00c5\u032f\3\2\2\2\u00c7\u0332\3\2\2\2\u00c9\u0335\3\2\2\2\u00cb"+
"\u0338\3\2\2\2\u00cd\u033b\3\2\2\2\u00cf\u033f\3\2\2\2\u00d1\u0343\3\2"+
"\2\2\u00d3\u0348\3\2\2\2\u00d5\u034b\3\2\2\2\u00d7\u034e\3\2\2\2\u00d9"+
"\u0350\3\2\2\2\u00db\u0355\3\2\2\2\u00dd\u035b\3\2\2\2\u00df\u0369\3\2"+
"\2\2\u00e1\u0374\3\2\2\2\u00e3\u037b\3\2\2\2\u00e5\u0396\3\2\2\2\u00e7"+
"\u0398\3\2\2\2\u00e9\u03a3\3\2\2\2\u00eb\u03a5\3\2\2\2\u00ed\u03b1\3\2"+
"\2\2\u00ef\u03b7\3\2\2\2\u00f1\u00f2\7c\2\2\u00f2\u00f3\7d\2\2\u00f3\u00f4"+
"\7u\2\2\u00f4\u00f5\7v\2\2\u00f5\u00f6\7t\2\2\u00f6\u00f7\7c\2\2\u00f7"+
"\u00f8\7e\2\2\u00f8\u00f9\7v\2\2\u00f9\4\3\2\2\2\u00fa\u00fb\7c\2\2\u00fb"+
"\u00fc\7u\2\2\u00fc\u00fd\7u\2\2\u00fd\u00fe\7g\2\2\u00fe\u00ff\7t\2\2"+
"\u00ff\u0100\7v\2\2\u0100\6\3\2\2\2\u0101\u0102\7d\2\2\u0102\u0103\7q"+
"\2\2\u0103\u0104\7q\2\2\u0104\u0105\7n\2\2\u0105\u0106\7g\2\2\u0106\u0107"+
"\7c\2\2\u0107\u0108\7p\2\2\u0108\b\3\2\2\2\u0109\u010a\7d\2\2\u010a\u010b"+
"\7t\2\2\u010b\u010c\7g\2\2\u010c\u010d\7c\2\2\u010d\u010e\7m\2\2\u010e"+
"\n\3\2\2\2\u010f\u0110\7d\2\2\u0110\u0111\7{\2\2\u0111\u0112\7v\2\2\u0112"+
"\u0113\7g\2\2\u0113\f\3\2\2\2\u0114\u0115\7e\2\2\u0115\u0116\7c\2\2\u0116"+
"\u0117\7u\2\2\u0117\u0118\7g\2\2\u0118\16\3\2\2\2\u0119\u011a\7e\2\2\u011a"+
"\u011b\7c\2\2\u011b\u011c\7v\2\2\u011c\u011d\7e\2\2\u011d\u011e\7j\2\2"+
"\u011e\20\3\2\2\2\u011f\u0120\7e\2\2\u0120\u0121\7j\2\2\u0121\u0122\7"+
"c\2\2\u0122\u0123\7t\2\2\u0123\22\3\2\2\2\u0124\u0125\7e\2\2\u0125\u0126"+
"\7n\2\2\u0126\u0127\7c\2\2\u0127\u0128\7u\2\2\u0128\u0129\7u\2\2\u0129"+
"\24\3\2\2\2\u012a\u012b\7e\2\2\u012b\u012c\7q\2\2\u012c\u012d\7p\2\2\u012d"+
"\u012e\7u\2\2\u012e\u012f\7v\2\2\u012f\26\3\2\2\2\u0130\u0131\7e\2\2\u0131"+
"\u0132\7q\2\2\u0132\u0133\7p\2\2\u0133\u0134\7v\2\2\u0134\u0135\7k\2\2"+
"\u0135\u0136\7p\2\2\u0136\u0137\7w\2\2\u0137\u0138\7g\2\2\u0138\30\3\2"+
"\2\2\u0139\u013a\7f\2\2\u013a\u013b\7g\2\2\u013b\u013c\7h\2\2\u013c\u013d"+
"\7c\2\2\u013d\u013e\7w\2\2\u013e\u013f\7n\2\2\u013f\u0140\7v\2\2\u0140"+
"\32\3\2\2\2\u0141\u0142\7f\2\2\u0142\u0143\7q\2\2\u0143\34\3\2\2\2\u0144"+
"\u0145\7f\2\2\u0145\u0146\7q\2\2\u0146\u0147\7w\2\2\u0147\u0148\7d\2\2"+
"\u0148\u0149\7n\2\2\u0149\u014a\7g\2\2\u014a\36\3\2\2\2\u014b\u014c\7"+
"g\2\2\u014c\u014d\7n\2\2\u014d\u014e\7u\2\2\u014e\u014f\7g\2\2\u014f "+
"\3\2\2\2\u0150\u0151\7g\2\2\u0151\u0152\7p\2\2\u0152\u0153\7w\2\2\u0153"+
"\u0154\7o\2\2\u0154\"\3\2\2\2\u0155\u0156\7g\2\2\u0156\u0157\7z\2\2\u0157"+
"\u0158\7v\2\2\u0158\u0159\7g\2\2\u0159\u015a\7p\2\2\u015a\u015b\7f\2\2"+
"\u015b\u015c\7u\2\2\u015c$\3\2\2\2\u015d\u015e\7h\2\2\u015e\u015f\7k\2"+
"\2\u015f\u0160\7p\2\2\u0160\u0161\7c\2\2\u0161\u0162\7n\2\2\u0162&\3\2"+
"\2\2\u0163\u0164\7h\2\2\u0164\u0165\7k\2\2\u0165\u0166\7p\2\2\u0166\u0167"+
"\7c\2\2\u0167\u0168\7n\2\2\u0168\u0169\7n\2\2\u0169\u016a\7{\2\2\u016a"+
"(\3\2\2\2\u016b\u016c\7h\2\2\u016c\u016d\7n\2\2\u016d\u016e\7q\2\2\u016e"+
"\u016f\7c\2\2\u016f\u0170\7v\2\2\u0170*\3\2\2\2\u0171\u0172\7h\2\2\u0172"+
"\u0173\7q\2\2\u0173\u0174\7t\2\2\u0174,\3\2\2\2\u0175\u0176\7k\2\2\u0176"+
"\u0177\7h\2\2\u0177.\3\2\2\2\u0178\u0179\7i\2\2\u0179\u017a\7q\2\2\u017a"+
"\u017b\7v\2\2\u017b\u017c\7q\2\2\u017c\60\3\2\2\2\u017d\u017e\7k\2\2\u017e"+
"\u017f\7o\2\2\u017f\u0180\7r\2\2\u0180\u0181\7n\2\2\u0181\u0182\7g\2\2"+
"\u0182\u0183\7o\2\2\u0183\u0184\7g\2\2\u0184\u0185\7p\2\2\u0185\u0186"+
"\7v\2\2\u0186\u0187\7u\2\2\u0187\62\3\2\2\2\u0188\u0189\7k\2\2\u0189\u018a"+
"\7o\2\2\u018a\u018b\7r\2\2\u018b\u018c\7q\2\2\u018c\u018d\7t\2\2\u018d"+
"\u018e\7v\2\2\u018e\64\3\2\2\2\u018f\u0190\7k\2\2\u0190\u0191\7p\2\2\u0191"+
"\u0192\7u\2\2\u0192\u0193\7v\2\2\u0193\u0194\7c\2\2\u0194\u0195\7p\2\2"+
"\u0195\u0196\7e\2\2\u0196\u0197\7g\2\2\u0197\u0198\7q\2\2\u0198\u0199"+
"\7h\2\2\u0199\66\3\2\2\2\u019a\u019b\7k\2\2\u019b\u019c\7p\2\2\u019c\u019d"+
"\7v\2\2\u019d8\3\2\2\2\u019e\u019f\7k\2\2\u019f\u01a0\7p\2\2\u01a0\u01a1"+
"\7v\2\2\u01a1\u01a2\7g\2\2\u01a2\u01a3\7t\2\2\u01a3\u01a4\7h\2\2\u01a4"+
"\u01a5\7c\2\2\u01a5\u01a6\7e\2\2\u01a6\u01a7\7g\2\2\u01a7:\3\2\2\2\u01a8"+
"\u01a9\7n\2\2\u01a9\u01aa\7q\2\2\u01aa\u01ab\7p\2\2\u01ab\u01ac\7i\2\2"+
"\u01ac<\3\2\2\2\u01ad\u01ae\7p\2\2\u01ae\u01af\7c\2\2\u01af\u01b0\7v\2"+
"\2\u01b0\u01b1\7k\2\2\u01b1\u01b2\7x\2\2\u01b2\u01b3\7g\2\2\u01b3>\3\2"+
"\2\2\u01b4\u01b5\7p\2\2\u01b5\u01b6\7g\2\2\u01b6\u01b7\7y\2\2\u01b7@\3"+
"\2\2\2\u01b8\u01b9\7r\2\2\u01b9\u01ba\7c\2\2\u01ba\u01bb\7e\2\2\u01bb"+
"\u01bc\7m\2\2\u01bc\u01bd\7c\2\2\u01bd\u01be\7i\2\2\u01be\u01bf\7g\2\2"+
"\u01bfB\3\2\2\2\u01c0\u01c1\7r\2\2\u01c1\u01c2\7t\2\2\u01c2\u01c3\7k\2"+
"\2\u01c3\u01c4\7x\2\2\u01c4\u01c5\7c\2\2\u01c5\u01c6\7v\2\2\u01c6\u01c7"+
"\7g\2\2\u01c7D\3\2\2\2\u01c8\u01c9\7r\2\2\u01c9\u01ca\7t\2\2\u01ca\u01cb"+
"\7q\2\2\u01cb\u01cc\7v\2\2\u01cc\u01cd\7g\2\2\u01cd\u01ce\7e\2\2\u01ce"+
"\u01cf\7v\2\2\u01cf\u01d0\7g\2\2\u01d0\u01d1\7f\2\2\u01d1F\3\2\2\2\u01d2"+
"\u01d3\7r\2\2\u01d3\u01d4\7w\2\2\u01d4\u01d5\7d\2\2\u01d5\u01d6\7n\2\2"+
"\u01d6\u01d7\7k\2\2\u01d7\u01d8\7e\2\2\u01d8H\3\2\2\2\u01d9\u01da\7t\2"+
"\2\u01da\u01db\7g\2\2\u01db\u01dc\7v\2\2\u01dc\u01dd\7w\2\2\u01dd\u01de"+
"\7t\2\2\u01de\u01df\7p\2\2\u01dfJ\3\2\2\2\u01e0\u01e1\7u\2\2\u01e1\u01e2"+
"\7j\2\2\u01e2\u01e3\7q\2\2\u01e3\u01e4\7t\2\2\u01e4\u01e5\7v\2\2\u01e5"+
"L\3\2\2\2\u01e6\u01e7\7u\2\2\u01e7\u01e8\7v\2\2\u01e8\u01e9\7c\2\2\u01e9"+
"\u01ea\7v\2\2\u01ea\u01eb\7k\2\2\u01eb\u01ec\7e\2\2\u01ecN\3\2\2\2\u01ed"+
"\u01ee\7u\2\2\u01ee\u01ef\7v\2\2\u01ef\u01f0\7t\2\2\u01f0\u01f1\7k\2\2"+
"\u01f1\u01f2\7e\2\2\u01f2\u01f3\7v\2\2\u01f3\u01f4\7h\2\2\u01f4\u01f5"+
"\7r\2\2\u01f5P\3\2\2\2\u01f6\u01f7\7u\2\2\u01f7\u01f8\7w\2\2\u01f8\u01f9"+
"\7r\2\2\u01f9\u01fa\7g\2\2\u01fa\u01fb\7t\2\2\u01fbR\3\2\2\2\u01fc\u01fd"+
"\7u\2\2\u01fd\u01fe\7y\2\2\u01fe\u01ff\7k\2\2\u01ff\u0200\7v\2\2\u0200"+
"\u0201\7e\2\2\u0201\u0202\7j\2\2\u0202T\3\2\2\2\u0203\u0204\7u\2\2\u0204"+
"\u0205\7{\2\2\u0205\u0206\7p\2\2\u0206\u0207\7e\2\2\u0207\u0208\7j\2\2"+
"\u0208\u0209\7t\2\2\u0209\u020a\7q\2\2\u020a\u020b\7p\2\2\u020b\u020c"+
"\7k\2\2\u020c\u020d\7|\2\2\u020d\u020e\7g\2\2\u020e\u020f\7f\2\2\u020f"+
"V\3\2\2\2\u0210\u0211\7v\2\2\u0211\u0212\7j\2\2\u0212\u0213\7k\2\2\u0213"+
"\u0214\7u\2\2\u0214X\3\2\2\2\u0215\u0216\7v\2\2\u0216\u0217\7j\2\2\u0217"+
"\u0218\7t\2\2\u0218\u0219\7q\2\2\u0219\u021a\7y\2\2\u021aZ\3\2\2\2\u021b"+
"\u021c\7v\2\2\u021c\u021d\7j\2\2\u021d\u021e\7t\2\2\u021e\u021f\7q\2\2"+
"\u021f\u0220\7y\2\2\u0220\u0221\7u\2\2\u0221\\\3\2\2\2\u0222\u0223\7v"+
"\2\2\u0223\u0224\7t\2\2\u0224\u0225\7c\2\2\u0225\u0226\7p\2\2\u0226\u0227"+
"\7u\2\2\u0227\u0228\7k\2\2\u0228\u0229\7g\2\2\u0229\u022a\7p\2\2\u022a"+
"\u022b\7v\2\2\u022b^\3\2\2\2\u022c\u022d\7v\2\2\u022d\u022e\7t\2\2\u022e"+
"\u022f\7{\2\2\u022f`\3\2\2\2\u0230\u0231\7x\2\2\u0231\u0232\7c\2\2\u0232"+
"\u0233\7t\2\2\u0233b\3\2\2\2\u0234\u0235\7x\2\2\u0235\u0236\7q\2\2\u0236"+
"\u0237\7k\2\2\u0237\u0238\7f\2\2\u0238d\3\2\2\2\u0239\u023a\7x\2\2\u023a"+
"\u023b\7q\2\2\u023b\u023c\7n\2\2\u023c\u023d\7c\2\2\u023d\u023e\7v\2\2"+
"\u023e\u023f\7k\2\2\u023f\u0240\7n\2\2\u0240\u0241\7g\2\2\u0241f\3\2\2"+
"\2\u0242\u0243\7y\2\2\u0243\u0244\7j\2\2\u0244\u0245\7k\2\2\u0245\u0246"+
"\7n\2\2\u0246\u0247\7g\2\2\u0247h\3\2\2\2\u0248\u0256\7\62\2\2\u0249\u0253"+
"\t\2\2\2\u024a\u024c\5\u00ebv\2\u024b\u024a\3\2\2\2\u024b\u024c\3\2\2"+
"\2\u024c\u0254\3\2\2\2\u024d\u024f\7a\2\2\u024e\u024d\3\2\2\2\u024f\u0250"+
"\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u0251\3\2\2\2\u0251\u0252\3\2\2\2\u0252"+
"\u0254\5\u00ebv\2\u0253\u024b\3\2\2\2\u0253\u024e\3\2\2\2\u0254\u0256"+
"\3\2\2\2\u0255\u0248\3\2\2\2\u0255\u0249\3\2\2\2\u0256\u0258\3\2\2\2\u0257"+
"\u0259\t\3\2\2\u0258\u0257\3\2\2\2\u0258\u0259\3\2\2\2\u0259j\3\2\2\2"+
"\u025a\u025b\7\62\2\2\u025b\u025c\t\4\2\2\u025c\u0264\t\5\2\2\u025d\u025f"+
"\t\6\2\2\u025e\u025d\3\2\2\2\u025f\u0262\3\2\2\2\u0260\u025e\3\2\2\2\u0260"+
"\u0261\3\2\2\2\u0261\u0263\3\2\2\2\u0262\u0260\3\2\2\2\u0263\u0265\t\5"+
"\2\2\u0264\u0260\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0267\3\2\2\2\u0266"+
"\u0268\t\3\2\2\u0267\u0266\3\2\2\2\u0267\u0268\3\2\2\2\u0268l\3\2\2\2"+
"\u0269\u026d\7\62\2\2\u026a\u026c\7a\2\2\u026b\u026a\3\2\2\2\u026c\u026f"+
"\3\2\2\2\u026d\u026b\3\2\2\2\u026d\u026e\3\2\2\2\u026e\u0270\3\2\2\2\u026f"+
"\u026d\3\2\2\2\u0270\u0278\t\7\2\2\u0271\u0273\t\b\2\2\u0272\u0271\3\2"+
"\2\2\u0273\u0276\3\2\2\2\u0274\u0272\3\2\2\2\u0274\u0275\3\2\2\2\u0275"+
"\u0277\3\2\2\2\u0276\u0274\3\2\2\2\u0277\u0279\t\7\2\2\u0278\u0274\3\2"+
"\2\2\u0278\u0279\3\2\2\2\u0279\u027b\3\2\2\2\u027a\u027c\t\3\2\2\u027b"+
"\u027a\3\2\2\2\u027b\u027c\3\2\2\2\u027cn\3\2\2\2\u027d\u027e\7\62\2\2"+
"\u027e\u027f\t\t\2\2\u027f\u0287\t\n\2\2\u0280\u0282\t\13\2\2\u0281\u0280"+
"\3\2\2\2\u0282\u0285\3\2\2\2\u0283\u0281\3\2\2\2\u0283\u0284\3\2\2\2\u0284"+
"\u0286\3\2\2\2\u0285\u0283\3\2\2\2\u0286\u0288\t\n\2\2\u0287\u0283\3\2"+
"\2\2\u0287\u0288\3\2\2\2\u0288\u028a\3\2\2\2\u0289\u028b\t\3\2\2\u028a"+
"\u0289\3\2\2\2\u028a\u028b\3\2\2\2\u028bp\3\2\2\2\u028c\u028d\5\u00eb"+
"v\2\u028d\u028f\7\60\2\2\u028e\u0290\5\u00ebv\2\u028f\u028e\3\2\2\2\u028f"+
"\u0290\3\2\2\2\u0290\u0294\3\2\2\2\u0291\u0292\7\60\2\2\u0292\u0294\5"+
"\u00ebv\2\u0293\u028c\3\2\2\2\u0293\u0291\3\2\2\2\u0294\u0296\3\2\2\2"+
"\u0295\u0297\5\u00e3r\2\u0296\u0295\3\2\2\2\u0296\u0297\3\2\2\2\u0297"+
"\u0299\3\2\2\2\u0298\u029a\t\f\2\2\u0299\u0298\3\2\2\2\u0299\u029a\3\2"+
"\2\2\u029a\u02a4\3\2\2\2\u029b\u02a1\5\u00ebv\2\u029c\u029e\5\u00e3r\2"+
"\u029d\u029f\t\f\2\2\u029e\u029d\3\2\2\2\u029e\u029f\3\2\2\2\u029f\u02a2"+
"\3\2\2\2\u02a0\u02a2\t\f\2\2\u02a1\u029c\3\2\2\2\u02a1\u02a0\3\2\2\2\u02a2"+
"\u02a4\3\2\2\2\u02a3\u0293\3\2\2\2\u02a3\u029b\3\2\2\2\u02a4r\3\2\2\2"+
"\u02a5\u02a6\7\62\2\2\u02a6\u02b0\t\4\2\2\u02a7\u02a9\5\u00e7t\2\u02a8"+
"\u02aa\7\60\2\2\u02a9\u02a8\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02b1\3"+
"\2\2\2\u02ab\u02ad\5\u00e7t\2\u02ac\u02ab\3\2\2\2\u02ac\u02ad\3\2\2\2"+
"\u02ad\u02ae\3\2\2\2\u02ae\u02af\7\60\2\2\u02af\u02b1\5\u00e7t\2\u02b0"+
"\u02a7\3\2\2\2\u02b0\u02ac\3\2\2\2\u02b1\u02b2\3\2\2\2\u02b2\u02b4\t\r"+
"\2\2\u02b3\u02b5\t\16\2\2\u02b4\u02b3\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5"+
"\u02b6\3\2\2\2\u02b6\u02b8\5\u00ebv\2\u02b7\u02b9\t\f\2\2\u02b8\u02b7"+
"\3\2\2\2\u02b8\u02b9\3\2\2\2\u02b9t\3\2\2\2\u02ba\u02bb\7v\2\2\u02bb\u02bc"+
"\7t\2\2\u02bc\u02bd\7w\2\2\u02bd\u02c4\7g\2\2\u02be\u02bf\7h\2\2\u02bf"+
"\u02c0\7c\2\2\u02c0\u02c1\7n\2\2\u02c1\u02c2\7u\2\2\u02c2\u02c4\7g\2\2"+
"\u02c3\u02ba\3\2\2\2\u02c3\u02be\3\2\2\2\u02c4v\3\2\2\2\u02c5\u02c8\7"+
")\2\2\u02c6\u02c9\n\17\2\2\u02c7\u02c9\5\u00e5s\2\u02c8\u02c6\3\2\2\2"+
"\u02c8\u02c7\3\2\2\2\u02c9\u02ca\3\2\2\2\u02ca\u02cb\7)\2\2\u02cbx\3\2"+
"\2\2\u02cc\u02d1\7$\2\2\u02cd\u02d0\n\20\2\2\u02ce\u02d0\5\u00e5s\2\u02cf"+
"\u02cd\3\2\2\2\u02cf\u02ce\3\2\2\2\u02d0\u02d3\3\2\2\2\u02d1\u02cf\3\2"+
"\2\2\u02d1\u02d2\3\2\2\2\u02d2\u02d4\3\2\2\2\u02d3\u02d1\3\2\2\2\u02d4"+
"\u02d5\7$\2\2\u02d5z\3\2\2\2\u02d6\u02d7\7p\2\2\u02d7\u02d8\7w\2\2\u02d8"+
"\u02d9\7n\2\2\u02d9\u02da\7n\2\2\u02da|\3\2\2\2\u02db\u02dc\7*\2\2\u02dc"+
"~\3\2\2\2\u02dd\u02de\7+\2\2\u02de\u0080\3\2\2\2\u02df\u02e0\7}\2\2\u02e0"+
"\u0082\3\2\2\2\u02e1\u02e2\7\177\2\2\u02e2\u0084\3\2\2\2\u02e3\u02e4\7"+
"]\2\2\u02e4\u0086\3\2\2\2\u02e5\u02e6\7_\2\2\u02e6\u0088\3\2\2\2\u02e7"+
"\u02e8\7=\2\2\u02e8\u008a\3\2\2\2\u02e9\u02ea\7.\2\2\u02ea\u008c\3\2\2"+
"\2\u02eb\u02ec\7\60\2\2\u02ec\u008e\3\2\2\2\u02ed\u02ee\7?\2\2\u02ee\u0090"+
"\3\2\2\2\u02ef\u02f0\7@\2\2\u02f0\u0092\3\2\2\2\u02f1\u02f2\7>\2\2\u02f2"+
"\u0094\3\2\2\2\u02f3\u02f4\7#\2\2\u02f4\u0096\3\2\2\2\u02f5\u02f6\7\u0080"+
"\2\2\u02f6\u0098\3\2\2\2\u02f7\u02f8\7A\2\2\u02f8\u009a\3\2\2\2\u02f9"+
"\u02fa\7<\2\2\u02fa\u009c\3\2\2\2\u02fb\u02fc\7?\2\2\u02fc\u02fd\7?\2"+
"\2\u02fd\u009e\3\2\2\2\u02fe\u02ff\7>\2\2\u02ff\u0300\7?\2\2\u0300\u00a0"+
"\3\2\2\2\u0301\u0302\7@\2\2\u0302\u0303\7?\2\2\u0303\u00a2\3\2\2\2\u0304"+
"\u0305\7#\2\2\u0305\u0306\7?\2\2\u0306\u00a4\3\2\2\2\u0307\u0308\7(\2"+
"\2\u0308\u0309\7(\2\2\u0309\u00a6\3\2\2\2\u030a\u030b\7~\2\2\u030b\u030c"+
"\7~\2\2\u030c\u00a8\3\2\2\2\u030d\u030e\7-\2\2\u030e\u030f\7-\2\2\u030f"+
"\u00aa\3\2\2\2\u0310\u0311\7/\2\2\u0311\u0312\7/\2\2\u0312\u00ac\3\2\2"+
"\2\u0313\u0314\7-\2\2\u0314\u00ae\3\2\2\2\u0315\u0316\7/\2\2\u0316\u00b0"+
"\3\2\2\2\u0317\u0318\7,\2\2\u0318\u00b2\3\2\2\2\u0319\u031a\7\61\2\2\u031a"+
"\u00b4\3\2\2\2\u031b\u031c\7(\2\2\u031c\u00b6\3\2\2\2\u031d\u031e\7~\2"+
"\2\u031e\u00b8\3\2\2\2\u031f\u0320\7`\2\2\u0320\u00ba\3\2\2\2\u0321\u0322"+
"\7\'\2\2\u0322\u00bc\3\2\2\2\u0323\u0324\7-\2\2\u0324\u0325\7?\2\2\u0325"+
"\u00be\3\2\2\2\u0326\u0327\7/\2\2\u0327\u0328\7?\2\2\u0328\u00c0\3\2\2"+
"\2\u0329\u032a\7,\2\2\u032a\u032b\7?\2\2\u032b\u00c2\3\2\2\2\u032c\u032d"+
"\7\61\2\2\u032d\u032e\7?\2\2\u032e\u00c4\3\2\2\2\u032f\u0330\7(\2\2\u0330"+
"\u0331\7?\2\2\u0331\u00c6\3\2\2\2\u0332\u0333\7~\2\2\u0333\u0334\7?\2"+
"\2\u0334\u00c8\3\2\2\2\u0335\u0336\7`\2\2\u0336\u0337\7?\2\2\u0337\u00ca"+
"\3\2\2\2\u0338\u0339\7\'\2\2\u0339\u033a\7?\2\2\u033a\u00cc\3\2\2\2\u033b"+
"\u033c\7>\2\2\u033c\u033d\7>\2\2\u033d\u033e\7?\2\2\u033e\u00ce\3\2\2"+
"\2\u033f\u0340\7@\2\2\u0340\u0341\7@\2\2\u0341\u0342\7?\2\2\u0342\u00d0"+
"\3\2\2\2\u0343\u0344\7@\2\2\u0344\u0345\7@\2\2\u0345\u0346\7@\2\2\u0346"+
"\u0347\7?\2\2\u0347\u00d2\3\2\2\2\u0348\u0349\7/\2\2\u0349\u034a\7@\2"+
"\2\u034a\u00d4\3\2\2\2\u034b\u034c\7<\2\2\u034c\u034d\7<\2\2\u034d\u00d6"+
"\3\2\2\2\u034e\u034f\7B\2\2\u034f\u00d8\3\2\2\2\u0350\u0351\7\60\2\2\u0351"+
"\u0352\7\60\2\2\u0352\u0353\7\60\2\2\u0353\u00da\3\2\2\2\u0354\u0356\t"+
"\21\2\2\u0355\u0354\3\2\2\2\u0356\u0357\3\2\2\2\u0357\u0355\3\2\2\2\u0357"+
"\u0358\3\2\2\2\u0358\u0359\3\2\2\2\u0359\u035a\bn\2\2\u035a\u00dc\3\2"+
"\2\2\u035b\u035c\7\61\2\2\u035c\u035d\7,\2\2\u035d\u0361\3\2\2\2\u035e"+
"\u0360\13\2\2\2\u035f\u035e\3\2\2\2\u0360\u0363\3\2\2\2\u0361\u0362\3"+
"\2\2\2\u0361\u035f\3\2\2\2\u0362\u0364\3\2\2\2\u0363\u0361\3\2\2\2\u0364"+
"\u0365\7,\2\2\u0365\u0366\7\61\2\2\u0366\u0367\3\2\2\2\u0367\u0368\bo"+
"\2\2\u0368\u00de\3\2\2\2\u0369\u036a\7\61\2\2\u036a\u036b\7\61\2\2\u036b"+
"\u036f\3\2\2\2\u036c\u036e\n\22\2\2\u036d\u036c\3\2\2\2\u036e\u0371\3"+
"\2\2\2\u036f\u036d\3\2\2\2\u036f\u0370\3\2\2\2\u0370\u0372\3\2\2\2\u0371"+
"\u036f\3\2\2\2\u0372\u0373\bp\2\2\u0373\u00e0\3\2\2\2\u0374\u0378\5\u00ef"+
"x\2\u0375\u0377\5\u00edw\2\u0376\u0375\3\2\2\2\u0377\u037a\3\2\2\2\u0378"+
"\u0376\3\2\2\2\u0378\u0379\3\2\2\2\u0379\u00e2\3\2\2\2\u037a\u0378\3\2"+
"\2\2\u037b\u037d\t\23\2\2\u037c\u037e\t\16\2\2\u037d\u037c\3\2\2\2\u037d"+
"\u037e\3\2\2\2\u037e\u037f\3\2\2\2\u037f\u0380\5\u00ebv\2\u0380\u00e4"+
"\3\2\2\2\u0381\u0382\7^\2\2\u0382\u0397\t\24\2\2\u0383\u0388\7^\2\2\u0384"+
"\u0386\t\25\2\2\u0385\u0384\3\2\2\2\u0385\u0386\3\2\2\2\u0386\u0387\3"+
"\2\2\2\u0387\u0389\t\7\2\2\u0388\u0385\3\2\2\2\u0388\u0389\3\2\2\2\u0389"+
"\u038a\3\2\2\2\u038a\u0397\t\7\2\2\u038b\u038d\7^\2\2\u038c\u038e\7w\2"+
"\2\u038d\u038c\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u038d\3\2\2\2\u038f\u0390"+
"\3\2\2\2\u0390\u0391\3\2\2\2\u0391\u0392\5\u00e9u\2\u0392\u0393\5\u00e9"+
"u\2\u0393\u0394\5\u00e9u\2\u0394\u0395\5\u00e9u\2\u0395\u0397\3\2\2\2"+
"\u0396\u0381\3\2\2\2\u0396\u0383\3\2\2\2\u0396\u038b\3\2\2\2\u0397\u00e6"+
"\3\2\2\2\u0398\u03a1\5\u00e9u\2\u0399\u039c\5\u00e9u\2\u039a\u039c\7a"+
"\2\2\u039b\u0399\3\2\2\2\u039b\u039a\3\2\2\2\u039c\u039f\3\2\2\2\u039d"+
"\u039b\3\2\2\2\u039d\u039e\3\2\2\2\u039e\u03a0\3\2\2\2\u039f\u039d\3\2"+
"\2\2\u03a0\u03a2\5\u00e9u\2\u03a1\u039d\3\2\2\2\u03a1\u03a2\3\2\2\2\u03a2"+
"\u00e8\3\2\2\2\u03a3\u03a4\t\5\2\2\u03a4\u00ea\3\2\2\2\u03a5\u03ad\t\26"+
"\2\2\u03a6\u03a8\t\27\2\2\u03a7\u03a6\3\2\2\2\u03a8\u03ab\3\2\2\2\u03a9"+
"\u03a7\3\2\2\2\u03a9\u03aa\3\2\2\2\u03aa\u03ac\3\2\2\2\u03ab\u03a9\3\2"+
"\2\2\u03ac\u03ae\t\26\2\2\u03ad\u03a9\3\2\2\2\u03ad\u03ae\3\2\2\2\u03ae"+
"\u00ec\3\2\2\2\u03af\u03b2\5\u00efx\2\u03b0\u03b2\t\26\2\2\u03b1\u03af"+
"\3\2\2\2\u03b1\u03b0\3\2\2\2\u03b2\u00ee\3\2\2\2\u03b3\u03b8\t\30\2\2"+
"\u03b4\u03b8\n\31\2\2\u03b5\u03b6\t\32\2\2\u03b6\u03b8\t\33\2\2\u03b7"+
"\u03b3\3\2\2\2\u03b7\u03b4\3\2\2\2\u03b7\u03b5\3\2\2\2\u03b8\u00f0\3\2"+
"\2\2\62\2\u024b\u0250\u0253\u0255\u0258\u0260\u0264\u0267\u026d\u0274"+
"\u0278\u027b\u0283\u0287\u028a\u028f\u0293\u0296\u0299\u029e\u02a1\u02a3"+
"\u02a9\u02ac\u02b0\u02b4\u02b8\u02c3\u02c8\u02cf\u02d1\u0357\u0361\u036f"+
"\u0378\u037d\u0385\u0388\u038f\u0396\u039b\u039d\u03a1\u03a9\u03ad\u03b1"+
"\u03b7\3\2\3\2";
"\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\3\u00f3\3\2\2"+
"\2\5\u00fc\3\2\2\2\7\u0103\3\2\2\2\t\u010b\3\2\2\2\13\u0111\3\2\2\2\r"+
"\u0116\3\2\2\2\17\u011b\3\2\2\2\21\u0121\3\2\2\2\23\u0126\3\2\2\2\25\u012c"+
"\3\2\2\2\27\u0132\3\2\2\2\31\u013b\3\2\2\2\33\u0143\3\2\2\2\35\u0146\3"+
"\2\2\2\37\u014d\3\2\2\2!\u0152\3\2\2\2#\u0157\3\2\2\2%\u015f\3\2\2\2\'"+
"\u0165\3\2\2\2)\u016d\3\2\2\2+\u0173\3\2\2\2-\u0177\3\2\2\2/\u017a\3\2"+
"\2\2\61\u017f\3\2\2\2\63\u018a\3\2\2\2\65\u0191\3\2\2\2\67\u019c\3\2\2"+
"\29\u01a0\3\2\2\2;\u01aa\3\2\2\2=\u01af\3\2\2\2?\u01b6\3\2\2\2A\u01ba"+
"\3\2\2\2C\u01c2\3\2\2\2E\u01ca\3\2\2\2G\u01d4\3\2\2\2I\u01db\3\2\2\2K"+
"\u01e2\3\2\2\2M\u01e8\3\2\2\2O\u01ef\3\2\2\2Q\u01f8\3\2\2\2S\u01fe\3\2"+
"\2\2U\u0205\3\2\2\2W\u0212\3\2\2\2Y\u0217\3\2\2\2[\u021d\3\2\2\2]\u0224"+
"\3\2\2\2_\u022e\3\2\2\2a\u0232\3\2\2\2c\u0236\3\2\2\2e\u023b\3\2\2\2g"+
"\u0244\3\2\2\2i\u0257\3\2\2\2k\u025c\3\2\2\2m\u026b\3\2\2\2o\u027f\3\2"+
"\2\2q\u02a5\3\2\2\2s\u02a7\3\2\2\2u\u02c5\3\2\2\2w\u02c7\3\2\2\2y\u02ce"+
"\3\2\2\2{\u02d8\3\2\2\2}\u02dd\3\2\2\2\177\u02df\3\2\2\2\u0081\u02e1\3"+
"\2\2\2\u0083\u02e3\3\2\2\2\u0085\u02e5\3\2\2\2\u0087\u02e7\3\2\2\2\u0089"+
"\u02e9\3\2\2\2\u008b\u02eb\3\2\2\2\u008d\u02ed\3\2\2\2\u008f\u02ef\3\2"+
"\2\2\u0091\u02f1\3\2\2\2\u0093\u02f3\3\2\2\2\u0095\u02f5\3\2\2\2\u0097"+
"\u02f7\3\2\2\2\u0099\u02f9\3\2\2\2\u009b\u02fb\3\2\2\2\u009d\u02fd\3\2"+
"\2\2\u009f\u0300\3\2\2\2\u00a1\u0303\3\2\2\2\u00a3\u0306\3\2\2\2\u00a5"+
"\u0309\3\2\2\2\u00a7\u030c\3\2\2\2\u00a9\u030f\3\2\2\2\u00ab\u0312\3\2"+
"\2\2\u00ad\u0315\3\2\2\2\u00af\u0317\3\2\2\2\u00b1\u0319\3\2\2\2\u00b3"+
"\u031b\3\2\2\2\u00b5\u031d\3\2\2\2\u00b7\u031f\3\2\2\2\u00b9\u0321\3\2"+
"\2\2\u00bb\u0323\3\2\2\2\u00bd\u0325\3\2\2\2\u00bf\u0328\3\2\2\2\u00c1"+
"\u032b\3\2\2\2\u00c3\u032e\3\2\2\2\u00c5\u0331\3\2\2\2\u00c7\u0334\3\2"+
"\2\2\u00c9\u0337\3\2\2\2\u00cb\u033a\3\2\2\2\u00cd\u033d\3\2\2\2\u00cf"+
"\u0341\3\2\2\2\u00d1\u0345\3\2\2\2\u00d3\u034a\3\2\2\2\u00d5\u034d\3\2"+
"\2\2\u00d7\u0350\3\2\2\2\u00d9\u0352\3\2\2\2\u00db\u0357\3\2\2\2\u00dd"+
"\u035d\3\2\2\2\u00df\u036c\3\2\2\2\u00e1\u037a\3\2\2\2\u00e3\u0385\3\2"+
"\2\2\u00e5\u038c\3\2\2\2\u00e7\u03a7\3\2\2\2\u00e9\u03a9\3\2\2\2\u00eb"+
"\u03b4\3\2\2\2\u00ed\u03b6\3\2\2\2\u00ef\u03c2\3\2\2\2\u00f1\u03c8\3\2"+
"\2\2\u00f3\u00f4\7c\2\2\u00f4\u00f5\7d\2\2\u00f5\u00f6\7u\2\2\u00f6\u00f7"+
"\7v\2\2\u00f7\u00f8\7t\2\2\u00f8\u00f9\7c\2\2\u00f9\u00fa\7e\2\2\u00fa"+
"\u00fb\7v\2\2\u00fb\4\3\2\2\2\u00fc\u00fd\7c\2\2\u00fd\u00fe\7u\2\2\u00fe"+
"\u00ff\7u\2\2\u00ff\u0100\7g\2\2\u0100\u0101\7t\2\2\u0101\u0102\7v\2\2"+
"\u0102\6\3\2\2\2\u0103\u0104\7d\2\2\u0104\u0105\7q\2\2\u0105\u0106\7q"+
"\2\2\u0106\u0107\7n\2\2\u0107\u0108\7g\2\2\u0108\u0109\7c\2\2\u0109\u010a"+
"\7p\2\2\u010a\b\3\2\2\2\u010b\u010c\7d\2\2\u010c\u010d\7t\2\2\u010d\u010e"+
"\7g\2\2\u010e\u010f\7c\2\2\u010f\u0110\7m\2\2\u0110\n\3\2\2\2\u0111\u0112"+
"\7d\2\2\u0112\u0113\7{\2\2\u0113\u0114\7v\2\2\u0114\u0115\7g\2\2\u0115"+
"\f\3\2\2\2\u0116\u0117\7e\2\2\u0117\u0118\7c\2\2\u0118\u0119\7u\2\2\u0119"+
"\u011a\7g\2\2\u011a\16\3\2\2\2\u011b\u011c\7e\2\2\u011c\u011d\7c\2\2\u011d"+
"\u011e\7v\2\2\u011e\u011f\7e\2\2\u011f\u0120\7j\2\2\u0120\20\3\2\2\2\u0121"+
"\u0122\7e\2\2\u0122\u0123\7j\2\2\u0123\u0124\7c\2\2\u0124\u0125\7t\2\2"+
"\u0125\22\3\2\2\2\u0126\u0127\7e\2\2\u0127\u0128\7n\2\2\u0128\u0129\7"+
"c\2\2\u0129\u012a\7u\2\2\u012a\u012b\7u\2\2\u012b\24\3\2\2\2\u012c\u012d"+
"\7e\2\2\u012d\u012e\7q\2\2\u012e\u012f\7p\2\2\u012f\u0130\7u\2\2\u0130"+
"\u0131\7v\2\2\u0131\26\3\2\2\2\u0132\u0133\7e\2\2\u0133\u0134\7q\2\2\u0134"+
"\u0135\7p\2\2\u0135\u0136\7v\2\2\u0136\u0137\7k\2\2\u0137\u0138\7p\2\2"+
"\u0138\u0139\7w\2\2\u0139\u013a\7g\2\2\u013a\30\3\2\2\2\u013b\u013c\7"+
"f\2\2\u013c\u013d\7g\2\2\u013d\u013e\7h\2\2\u013e\u013f\7c\2\2\u013f\u0140"+
"\7w\2\2\u0140\u0141\7n\2\2\u0141\u0142\7v\2\2\u0142\32\3\2\2\2\u0143\u0144"+
"\7f\2\2\u0144\u0145\7q\2\2\u0145\34\3\2\2\2\u0146\u0147\7f\2\2\u0147\u0148"+
"\7q\2\2\u0148\u0149\7w\2\2\u0149\u014a\7d\2\2\u014a\u014b\7n\2\2\u014b"+
"\u014c\7g\2\2\u014c\36\3\2\2\2\u014d\u014e\7g\2\2\u014e\u014f\7n\2\2\u014f"+
"\u0150\7u\2\2\u0150\u0151\7g\2\2\u0151 \3\2\2\2\u0152\u0153\7g\2\2\u0153"+
"\u0154\7p\2\2\u0154\u0155\7w\2\2\u0155\u0156\7o\2\2\u0156\"\3\2\2\2\u0157"+
"\u0158\7g\2\2\u0158\u0159\7z\2\2\u0159\u015a\7v\2\2\u015a\u015b\7g\2\2"+
"\u015b\u015c\7p\2\2\u015c\u015d\7f\2\2\u015d\u015e\7u\2\2\u015e$\3\2\2"+
"\2\u015f\u0160\7h\2\2\u0160\u0161\7k\2\2\u0161\u0162\7p\2\2\u0162\u0163"+
"\7c\2\2\u0163\u0164\7n\2\2\u0164&\3\2\2\2\u0165\u0166\7h\2\2\u0166\u0167"+
"\7k\2\2\u0167\u0168\7p\2\2\u0168\u0169\7c\2\2\u0169\u016a\7n\2\2\u016a"+
"\u016b\7n\2\2\u016b\u016c\7{\2\2\u016c(\3\2\2\2\u016d\u016e\7h\2\2\u016e"+
"\u016f\7n\2\2\u016f\u0170\7q\2\2\u0170\u0171\7c\2\2\u0171\u0172\7v\2\2"+
"\u0172*\3\2\2\2\u0173\u0174\7h\2\2\u0174\u0175\7q\2\2\u0175\u0176\7t\2"+
"\2\u0176,\3\2\2\2\u0177\u0178\7k\2\2\u0178\u0179\7h\2\2\u0179.\3\2\2\2"+
"\u017a\u017b\7i\2\2\u017b\u017c\7q\2\2\u017c\u017d\7v\2\2\u017d\u017e"+
"\7q\2\2\u017e\60\3\2\2\2\u017f\u0180\7k\2\2\u0180\u0181\7o\2\2\u0181\u0182"+
"\7r\2\2\u0182\u0183\7n\2\2\u0183\u0184\7g\2\2\u0184\u0185\7o\2\2\u0185"+
"\u0186\7g\2\2\u0186\u0187\7p\2\2\u0187\u0188\7v\2\2\u0188\u0189\7u\2\2"+
"\u0189\62\3\2\2\2\u018a\u018b\7k\2\2\u018b\u018c\7o\2\2\u018c\u018d\7"+
"r\2\2\u018d\u018e\7q\2\2\u018e\u018f\7t\2\2\u018f\u0190\7v\2\2\u0190\64"+
"\3\2\2\2\u0191\u0192\7k\2\2\u0192\u0193\7p\2\2\u0193\u0194\7u\2\2\u0194"+
"\u0195\7v\2\2\u0195\u0196\7c\2\2\u0196\u0197\7p\2\2\u0197\u0198\7e\2\2"+
"\u0198\u0199\7g\2\2\u0199\u019a\7q\2\2\u019a\u019b\7h\2\2\u019b\66\3\2"+
"\2\2\u019c\u019d\7k\2\2\u019d\u019e\7p\2\2\u019e\u019f\7v\2\2\u019f8\3"+
"\2\2\2\u01a0\u01a1\7k\2\2\u01a1\u01a2\7p\2\2\u01a2\u01a3\7v\2\2\u01a3"+
"\u01a4\7g\2\2\u01a4\u01a5\7t\2\2\u01a5\u01a6\7h\2\2\u01a6\u01a7\7c\2\2"+
"\u01a7\u01a8\7e\2\2\u01a8\u01a9\7g\2\2\u01a9:\3\2\2\2\u01aa\u01ab\7n\2"+
"\2\u01ab\u01ac\7q\2\2\u01ac\u01ad\7p\2\2\u01ad\u01ae\7i\2\2\u01ae<\3\2"+
"\2\2\u01af\u01b0\7p\2\2\u01b0\u01b1\7c\2\2\u01b1\u01b2\7v\2\2\u01b2\u01b3"+
"\7k\2\2\u01b3\u01b4\7x\2\2\u01b4\u01b5\7g\2\2\u01b5>\3\2\2\2\u01b6\u01b7"+
"\7p\2\2\u01b7\u01b8\7g\2\2\u01b8\u01b9\7y\2\2\u01b9@\3\2\2\2\u01ba\u01bb"+
"\7r\2\2\u01bb\u01bc\7c\2\2\u01bc\u01bd\7e\2\2\u01bd\u01be\7m\2\2\u01be"+
"\u01bf\7c\2\2\u01bf\u01c0\7i\2\2\u01c0\u01c1\7g\2\2\u01c1B\3\2\2\2\u01c2"+
"\u01c3\7r\2\2\u01c3\u01c4\7t\2\2\u01c4\u01c5\7k\2\2\u01c5\u01c6\7x\2\2"+
"\u01c6\u01c7\7c\2\2\u01c7\u01c8\7v\2\2\u01c8\u01c9\7g\2\2\u01c9D\3\2\2"+
"\2\u01ca\u01cb\7r\2\2\u01cb\u01cc\7t\2\2\u01cc\u01cd\7q\2\2\u01cd\u01ce"+
"\7v\2\2\u01ce\u01cf\7g\2\2\u01cf\u01d0\7e\2\2\u01d0\u01d1\7v\2\2\u01d1"+
"\u01d2\7g\2\2\u01d2\u01d3\7f\2\2\u01d3F\3\2\2\2\u01d4\u01d5\7r\2\2\u01d5"+
"\u01d6\7w\2\2\u01d6\u01d7\7d\2\2\u01d7\u01d8\7n\2\2\u01d8\u01d9\7k\2\2"+
"\u01d9\u01da\7e\2\2\u01daH\3\2\2\2\u01db\u01dc\7t\2\2\u01dc\u01dd\7g\2"+
"\2\u01dd\u01de\7v\2\2\u01de\u01df\7w\2\2\u01df\u01e0\7t\2\2\u01e0\u01e1"+
"\7p\2\2\u01e1J\3\2\2\2\u01e2\u01e3\7u\2\2\u01e3\u01e4\7j\2\2\u01e4\u01e5"+
"\7q\2\2\u01e5\u01e6\7t\2\2\u01e6\u01e7\7v\2\2\u01e7L\3\2\2\2\u01e8\u01e9"+
"\7u\2\2\u01e9\u01ea\7v\2\2\u01ea\u01eb\7c\2\2\u01eb\u01ec\7v\2\2\u01ec"+
"\u01ed\7k\2\2\u01ed\u01ee\7e\2\2\u01eeN\3\2\2\2\u01ef\u01f0\7u\2\2\u01f0"+
"\u01f1\7v\2\2\u01f1\u01f2\7t\2\2\u01f2\u01f3\7k\2\2\u01f3\u01f4\7e\2\2"+
"\u01f4\u01f5\7v\2\2\u01f5\u01f6\7h\2\2\u01f6\u01f7\7r\2\2\u01f7P\3\2\2"+
"\2\u01f8\u01f9\7u\2\2\u01f9\u01fa\7w\2\2\u01fa\u01fb\7r\2\2\u01fb\u01fc"+
"\7g\2\2\u01fc\u01fd\7t\2\2\u01fdR\3\2\2\2\u01fe\u01ff\7u\2\2\u01ff\u0200"+
"\7y\2\2\u0200\u0201\7k\2\2\u0201\u0202\7v\2\2\u0202\u0203\7e\2\2\u0203"+
"\u0204\7j\2\2\u0204T\3\2\2\2\u0205\u0206\7u\2\2\u0206\u0207\7{\2\2\u0207"+
"\u0208\7p\2\2\u0208\u0209\7e\2\2\u0209\u020a\7j\2\2\u020a\u020b\7t\2\2"+
"\u020b\u020c\7q\2\2\u020c\u020d\7p\2\2\u020d\u020e\7k\2\2\u020e\u020f"+
"\7|\2\2\u020f\u0210\7g\2\2\u0210\u0211\7f\2\2\u0211V\3\2\2\2\u0212\u0213"+
"\7v\2\2\u0213\u0214\7j\2\2\u0214\u0215\7k\2\2\u0215\u0216\7u\2\2\u0216"+
"X\3\2\2\2\u0217\u0218\7v\2\2\u0218\u0219\7j\2\2\u0219\u021a\7t\2\2\u021a"+
"\u021b\7q\2\2\u021b\u021c\7y\2\2\u021cZ\3\2\2\2\u021d\u021e\7v\2\2\u021e"+
"\u021f\7j\2\2\u021f\u0220\7t\2\2\u0220\u0221\7q\2\2\u0221\u0222\7y\2\2"+
"\u0222\u0223\7u\2\2\u0223\\\3\2\2\2\u0224\u0225\7v\2\2\u0225\u0226\7t"+
"\2\2\u0226\u0227\7c\2\2\u0227\u0228\7p\2\2\u0228\u0229\7u\2\2\u0229\u022a"+
"\7k\2\2\u022a\u022b\7g\2\2\u022b\u022c\7p\2\2\u022c\u022d\7v\2\2\u022d"+
"^\3\2\2\2\u022e\u022f\7v\2\2\u022f\u0230\7t\2\2\u0230\u0231\7{\2\2\u0231"+
"`\3\2\2\2\u0232\u0233\7x\2\2\u0233\u0234\7c\2\2\u0234\u0235\7t\2\2\u0235"+
"b\3\2\2\2\u0236\u0237\7x\2\2\u0237\u0238\7q\2\2\u0238\u0239\7k\2\2\u0239"+
"\u023a\7f\2\2\u023ad\3\2\2\2\u023b\u023c\7x\2\2\u023c\u023d\7q\2\2\u023d"+
"\u023e\7n\2\2\u023e\u023f\7c\2\2\u023f\u0240\7v\2\2\u0240\u0241\7k\2\2"+
"\u0241\u0242\7n\2\2\u0242\u0243\7g\2\2\u0243f\3\2\2\2\u0244\u0245\7y\2"+
"\2\u0245\u0246\7j\2\2\u0246\u0247\7k\2\2\u0247\u0248\7n\2\2\u0248\u0249"+
"\7g\2\2\u0249h\3\2\2\2\u024a\u0258\7\62\2\2\u024b\u0255\t\2\2\2\u024c"+
"\u024e\5\u00edw\2\u024d\u024c\3\2\2\2\u024d\u024e\3\2\2\2\u024e\u0256"+
"\3\2\2\2\u024f\u0251\7a\2\2\u0250\u024f\3\2\2\2\u0251\u0252\3\2\2\2\u0252"+
"\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0254\3\2\2\2\u0254\u0256\5\u00ed"+
"w\2\u0255\u024d\3\2\2\2\u0255\u0250\3\2\2\2\u0256\u0258\3\2\2\2\u0257"+
"\u024a\3\2\2\2\u0257\u024b\3\2\2\2\u0258\u025a\3\2\2\2\u0259\u025b\t\3"+
"\2\2\u025a\u0259\3\2\2\2\u025a\u025b\3\2\2\2\u025bj\3\2\2\2\u025c\u025d"+
"\7\62\2\2\u025d\u025e\t\4\2\2\u025e\u0266\t\5\2\2\u025f\u0261\t\6\2\2"+
"\u0260\u025f\3\2\2\2\u0261\u0264\3\2\2\2\u0262\u0260\3\2\2\2\u0262\u0263"+
"\3\2\2\2\u0263\u0265\3\2\2\2\u0264\u0262\3\2\2\2\u0265\u0267\t\5\2\2\u0266"+
"\u0262\3\2\2\2\u0266\u0267\3\2\2\2\u0267\u0269\3\2\2\2\u0268\u026a\t\3"+
"\2\2\u0269\u0268\3\2\2\2\u0269\u026a\3\2\2\2\u026al\3\2\2\2\u026b\u026f"+
"\7\62\2\2\u026c\u026e\7a\2\2\u026d\u026c\3\2\2\2\u026e\u0271\3\2\2\2\u026f"+
"\u026d\3\2\2\2\u026f\u0270\3\2\2\2\u0270\u0272\3\2\2\2\u0271\u026f\3\2"+
"\2\2\u0272\u027a\t\7\2\2\u0273\u0275\t\b\2\2\u0274\u0273\3\2\2\2\u0275"+
"\u0278\3\2\2\2\u0276\u0274\3\2\2\2\u0276\u0277\3\2\2\2\u0277\u0279\3\2"+
"\2\2\u0278\u0276\3\2\2\2\u0279\u027b\t\7\2\2\u027a\u0276\3\2\2\2\u027a"+
"\u027b\3\2\2\2\u027b\u027d\3\2\2\2\u027c\u027e\t\3\2\2\u027d\u027c\3\2"+
"\2\2\u027d\u027e\3\2\2\2\u027en\3\2\2\2\u027f\u0280\7\62\2\2\u0280\u0281"+
"\t\t\2\2\u0281\u0289\t\n\2\2\u0282\u0284\t\13\2\2\u0283\u0282\3\2\2\2"+
"\u0284\u0287\3\2\2\2\u0285\u0283\3\2\2\2\u0285\u0286\3\2\2\2\u0286\u0288"+
"\3\2\2\2\u0287\u0285\3\2\2\2\u0288\u028a\t\n\2\2\u0289\u0285\3\2\2\2\u0289"+
"\u028a\3\2\2\2\u028a\u028c\3\2\2\2\u028b\u028d\t\3\2\2\u028c\u028b\3\2"+
"\2\2\u028c\u028d\3\2\2\2\u028dp\3\2\2\2\u028e\u028f\5\u00edw\2\u028f\u0291"+
"\7\60\2\2\u0290\u0292\5\u00edw\2\u0291\u0290\3\2\2\2\u0291\u0292\3\2\2"+
"\2\u0292\u0296\3\2\2\2\u0293\u0294\7\60\2\2\u0294\u0296\5\u00edw\2\u0295"+
"\u028e\3\2\2\2\u0295\u0293\3\2\2\2\u0296\u0298\3\2\2\2\u0297\u0299\5\u00e5"+
"s\2\u0298\u0297\3\2\2\2\u0298\u0299\3\2\2\2\u0299\u029b\3\2\2\2\u029a"+
"\u029c\t\f\2\2\u029b\u029a\3\2\2\2\u029b\u029c\3\2\2\2\u029c\u02a6\3\2"+
"\2\2\u029d\u02a3\5\u00edw\2\u029e\u02a0\5\u00e5s\2\u029f\u02a1\t\f\2\2"+
"\u02a0\u029f\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a1\u02a4\3\2\2\2\u02a2\u02a4"+
"\t\f\2\2\u02a3\u029e\3\2\2\2\u02a3\u02a2\3\2\2\2\u02a4\u02a6\3\2\2\2\u02a5"+
"\u0295\3\2\2\2\u02a5\u029d\3\2\2\2\u02a6r\3\2\2\2\u02a7\u02a8\7\62\2\2"+
"\u02a8\u02b2\t\4\2\2\u02a9\u02ab\5\u00e9u\2\u02aa\u02ac\7\60\2\2\u02ab"+
"\u02aa\3\2\2\2\u02ab\u02ac\3\2\2\2\u02ac\u02b3\3\2\2\2\u02ad\u02af\5\u00e9"+
"u\2\u02ae\u02ad\3\2\2\2\u02ae\u02af\3\2\2\2\u02af\u02b0\3\2\2\2\u02b0"+
"\u02b1\7\60\2\2\u02b1\u02b3\5\u00e9u\2\u02b2\u02a9\3\2\2\2\u02b2\u02ae"+
"\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b6\t\r\2\2\u02b5\u02b7\t\16\2\2"+
"\u02b6\u02b5\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8\u02ba"+
"\5\u00edw\2\u02b9\u02bb\t\f\2\2\u02ba\u02b9\3\2\2\2\u02ba\u02bb\3\2\2"+
"\2\u02bbt\3\2\2\2\u02bc\u02bd\7v\2\2\u02bd\u02be\7t\2\2\u02be\u02bf\7"+
"w\2\2\u02bf\u02c6\7g\2\2\u02c0\u02c1\7h\2\2\u02c1\u02c2\7c\2\2\u02c2\u02c3"+
"\7n\2\2\u02c3\u02c4\7u\2\2\u02c4\u02c6\7g\2\2\u02c5\u02bc\3\2\2\2\u02c5"+
"\u02c0\3\2\2\2\u02c6v\3\2\2\2\u02c7\u02ca\7)\2\2\u02c8\u02cb\n\17\2\2"+
"\u02c9\u02cb\5\u00e7t\2\u02ca\u02c8\3\2\2\2\u02ca\u02c9\3\2\2\2\u02cb"+
"\u02cc\3\2\2\2\u02cc\u02cd\7)\2\2\u02cdx\3\2\2\2\u02ce\u02d3\7$\2\2\u02cf"+
"\u02d2\n\20\2\2\u02d0\u02d2\5\u00e7t\2\u02d1\u02cf\3\2\2\2\u02d1\u02d0"+
"\3\2\2\2\u02d2\u02d5\3\2\2\2\u02d3\u02d1\3\2\2\2\u02d3\u02d4\3\2\2\2\u02d4"+
"\u02d6\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d6\u02d7\7$\2\2\u02d7z\3\2\2\2\u02d8"+
"\u02d9\7p\2\2\u02d9\u02da\7w\2\2\u02da\u02db\7n\2\2\u02db\u02dc\7n\2\2"+
"\u02dc|\3\2\2\2\u02dd\u02de\7*\2\2\u02de~\3\2\2\2\u02df\u02e0\7+\2\2\u02e0"+
"\u0080\3\2\2\2\u02e1\u02e2\7}\2\2\u02e2\u0082\3\2\2\2\u02e3\u02e4\7\177"+
"\2\2\u02e4\u0084\3\2\2\2\u02e5\u02e6\7]\2\2\u02e6\u0086\3\2\2\2\u02e7"+
"\u02e8\7_\2\2\u02e8\u0088\3\2\2\2\u02e9\u02ea\7=\2\2\u02ea\u008a\3\2\2"+
"\2\u02eb\u02ec\7.\2\2\u02ec\u008c\3\2\2\2\u02ed\u02ee\7\60\2\2\u02ee\u008e"+
"\3\2\2\2\u02ef\u02f0\7?\2\2\u02f0\u0090\3\2\2\2\u02f1\u02f2\7@\2\2\u02f2"+
"\u0092\3\2\2\2\u02f3\u02f4\7>\2\2\u02f4\u0094\3\2\2\2\u02f5\u02f6\7#\2"+
"\2\u02f6\u0096\3\2\2\2\u02f7\u02f8\7\u0080\2\2\u02f8\u0098\3\2\2\2\u02f9"+
"\u02fa\7A\2\2\u02fa\u009a\3\2\2\2\u02fb\u02fc\7<\2\2\u02fc\u009c\3\2\2"+
"\2\u02fd\u02fe\7?\2\2\u02fe\u02ff\7?\2\2\u02ff\u009e\3\2\2\2\u0300\u0301"+
"\7>\2\2\u0301\u0302\7?\2\2\u0302\u00a0\3\2\2\2\u0303\u0304\7@\2\2\u0304"+
"\u0305\7?\2\2\u0305\u00a2\3\2\2\2\u0306\u0307\7#\2\2\u0307\u0308\7?\2"+
"\2\u0308\u00a4\3\2\2\2\u0309\u030a\7(\2\2\u030a\u030b\7(\2\2\u030b\u00a6"+
"\3\2\2\2\u030c\u030d\7~\2\2\u030d\u030e\7~\2\2\u030e\u00a8\3\2\2\2\u030f"+
"\u0310\7-\2\2\u0310\u0311\7-\2\2\u0311\u00aa\3\2\2\2\u0312\u0313\7/\2"+
"\2\u0313\u0314\7/\2\2\u0314\u00ac\3\2\2\2\u0315\u0316\7-\2\2\u0316\u00ae"+
"\3\2\2\2\u0317\u0318\7/\2\2\u0318\u00b0\3\2\2\2\u0319\u031a\7,\2\2\u031a"+
"\u00b2\3\2\2\2\u031b\u031c\7\61\2\2\u031c\u00b4\3\2\2\2\u031d\u031e\7"+
"(\2\2\u031e\u00b6\3\2\2\2\u031f\u0320\7~\2\2\u0320\u00b8\3\2\2\2\u0321"+
"\u0322\7`\2\2\u0322\u00ba\3\2\2\2\u0323\u0324\7\'\2\2\u0324\u00bc\3\2"+
"\2\2\u0325\u0326\7-\2\2\u0326\u0327\7?\2\2\u0327\u00be\3\2\2\2\u0328\u0329"+
"\7/\2\2\u0329\u032a\7?\2\2\u032a\u00c0\3\2\2\2\u032b\u032c\7,\2\2\u032c"+
"\u032d\7?\2\2\u032d\u00c2\3\2\2\2\u032e\u032f\7\61\2\2\u032f\u0330\7?"+
"\2\2\u0330\u00c4\3\2\2\2\u0331\u0332\7(\2\2\u0332\u0333\7?\2\2\u0333\u00c6"+
"\3\2\2\2\u0334\u0335\7~\2\2\u0335\u0336\7?\2\2\u0336\u00c8\3\2\2\2\u0337"+
"\u0338\7`\2\2\u0338\u0339\7?\2\2\u0339\u00ca\3\2\2\2\u033a\u033b\7\'\2"+
"\2\u033b\u033c\7?\2\2\u033c\u00cc\3\2\2\2\u033d\u033e\7>\2\2\u033e\u033f"+
"\7>\2\2\u033f\u0340\7?\2\2\u0340\u00ce\3\2\2\2\u0341\u0342\7@\2\2\u0342"+
"\u0343\7@\2\2\u0343\u0344\7?\2\2\u0344\u00d0\3\2\2\2\u0345\u0346\7@\2"+
"\2\u0346\u0347\7@\2\2\u0347\u0348\7@\2\2\u0348\u0349\7?\2\2\u0349\u00d2"+
"\3\2\2\2\u034a\u034b\7/\2\2\u034b\u034c\7@\2\2\u034c\u00d4\3\2\2\2\u034d"+
"\u034e\7<\2\2\u034e\u034f\7<\2\2\u034f\u00d6\3\2\2\2\u0350\u0351\7B\2"+
"\2\u0351\u00d8\3\2\2\2\u0352\u0353\7\60\2\2\u0353\u0354\7\60\2\2\u0354"+
"\u0355\7\60\2\2\u0355\u00da\3\2\2\2\u0356\u0358\t\21\2\2\u0357\u0356\3"+
"\2\2\2\u0358\u0359\3\2\2\2\u0359\u0357\3\2\2\2\u0359\u035a\3\2\2\2\u035a"+
"\u035b\3\2\2\2\u035b\u035c\bn\2\2\u035c\u00dc\3\2\2\2\u035d\u035e\7\61"+
"\2\2\u035e\u035f\7,\2\2\u035f\u0360\7,\2\2\u0360\u0364\3\2\2\2\u0361\u0363"+
"\13\2\2\2\u0362\u0361\3\2\2\2\u0363\u0366\3\2\2\2\u0364\u0365\3\2\2\2"+
"\u0364\u0362\3\2\2\2\u0365\u0367\3\2\2\2\u0366\u0364\3\2\2\2\u0367\u0368"+
"\7,\2\2\u0368\u0369\7\61\2\2\u0369\u036a\3\2\2\2\u036a\u036b\bo\2\2\u036b"+
"\u00de\3\2\2\2\u036c\u036d\7\61\2\2\u036d\u036e\7,\2\2\u036e\u0372\3\2"+
"\2\2\u036f\u0371\13\2\2\2\u0370\u036f\3\2\2\2\u0371\u0374\3\2\2\2\u0372"+
"\u0373\3\2\2\2\u0372\u0370\3\2\2\2\u0373\u0375\3\2\2\2\u0374\u0372\3\2"+
"\2\2\u0375\u0376\7,\2\2\u0376\u0377\7\61\2\2\u0377\u0378\3\2\2\2\u0378"+
"\u0379\bp\2\2\u0379\u00e0\3\2\2\2\u037a\u037b\7\61\2\2\u037b\u037c\7\61"+
"\2\2\u037c\u0380\3\2\2\2\u037d\u037f\n\22\2\2\u037e\u037d\3\2\2\2\u037f"+
"\u0382\3\2\2\2\u0380\u037e\3\2\2\2\u0380\u0381\3\2\2\2\u0381\u0383\3\2"+
"\2\2\u0382\u0380\3\2\2\2\u0383\u0384\bq\2\2\u0384\u00e2\3\2\2\2\u0385"+
"\u0389\5\u00f1y\2\u0386\u0388\5\u00efx\2\u0387\u0386\3\2\2\2\u0388\u038b"+
"\3\2\2\2\u0389\u0387\3\2\2\2\u0389\u038a\3\2\2\2\u038a\u00e4\3\2\2\2\u038b"+
"\u0389\3\2\2\2\u038c\u038e\t\23\2\2\u038d\u038f\t\16\2\2\u038e\u038d\3"+
"\2\2\2\u038e\u038f\3\2\2\2\u038f\u0390\3\2\2\2\u0390\u0391\5\u00edw\2"+
"\u0391\u00e6\3\2\2\2\u0392\u0393\7^\2\2\u0393\u03a8\t\24\2\2\u0394\u0399"+
"\7^\2\2\u0395\u0397\t\25\2\2\u0396\u0395\3\2\2\2\u0396\u0397\3\2\2\2\u0397"+
"\u0398\3\2\2\2\u0398\u039a\t\7\2\2\u0399\u0396\3\2\2\2\u0399\u039a\3\2"+
"\2\2\u039a\u039b\3\2\2\2\u039b\u03a8\t\7\2\2\u039c\u039e\7^\2\2\u039d"+
"\u039f\7w\2\2\u039e\u039d\3\2\2\2\u039f\u03a0\3\2\2\2\u03a0\u039e\3\2"+
"\2\2\u03a0\u03a1\3\2\2\2\u03a1\u03a2\3\2\2\2\u03a2\u03a3\5\u00ebv\2\u03a3"+
"\u03a4\5\u00ebv\2\u03a4\u03a5\5\u00ebv\2\u03a5\u03a6\5\u00ebv\2\u03a6"+
"\u03a8\3\2\2\2\u03a7\u0392\3\2\2\2\u03a7\u0394\3\2\2\2\u03a7\u039c\3\2"+
"\2\2\u03a8\u00e8\3\2\2\2\u03a9\u03b2\5\u00ebv\2\u03aa\u03ad\5\u00ebv\2"+
"\u03ab\u03ad\7a\2\2\u03ac\u03aa\3\2\2\2\u03ac\u03ab\3\2\2\2\u03ad\u03b0"+
"\3\2\2\2\u03ae\u03ac\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03b1\3\2\2\2\u03b0"+
"\u03ae\3\2\2\2\u03b1\u03b3\5\u00ebv\2\u03b2\u03ae\3\2\2\2\u03b2\u03b3"+
"\3\2\2\2\u03b3\u00ea\3\2\2\2\u03b4\u03b5\t\5\2\2\u03b5\u00ec\3\2\2\2\u03b6"+
"\u03be\t\26\2\2\u03b7\u03b9\t\27\2\2\u03b8\u03b7\3\2\2\2\u03b9\u03bc\3"+
"\2\2\2\u03ba\u03b8\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03bd\3\2\2\2\u03bc"+
"\u03ba\3\2\2\2\u03bd\u03bf\t\26\2\2\u03be\u03ba\3\2\2\2\u03be\u03bf\3"+
"\2\2\2\u03bf\u00ee\3\2\2\2\u03c0\u03c3\5\u00f1y\2\u03c1\u03c3\t\26\2\2"+
"\u03c2\u03c0\3\2\2\2\u03c2\u03c1\3\2\2\2\u03c3\u00f0\3\2\2\2\u03c4\u03c9"+
"\t\30\2\2\u03c5\u03c9\n\31\2\2\u03c6\u03c7\t\32\2\2\u03c7\u03c9\t\33\2"+
"\2\u03c8\u03c4\3\2\2\2\u03c8\u03c5\3\2\2\2\u03c8\u03c6\3\2\2\2\u03c9\u00f2"+
"\3\2\2\2\63\2\u024d\u0252\u0255\u0257\u025a\u0262\u0266\u0269\u026f\u0276"+
"\u027a\u027d\u0285\u0289\u028c\u0291\u0295\u0298\u029b\u02a0\u02a3\u02a5"+
"\u02ab\u02ae\u02b2\u02b6\u02ba\u02c5\u02ca\u02d1\u02d3\u0359\u0364\u0372"+
"\u0380\u0389\u038e\u0396\u0399\u03a0\u03a7\u03ac\u03ae\u03b2\u03ba\u03be"+
"\u03c2\u03c8\3\2\3\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
@@ -107,9 +107,10 @@ COLONCOLON=106
AT=107
ELLIPSIS=108
WS=109
COMMENT=110
LINE_COMMENT=111
IDENTIFIER=112
BLOCK_COMMENT=110
JAVADOC_COMMENT=111
LINE_COMMENT=112
IDENTIFIER=113
'abstract'=1
'assert'=2
'boolean'=3
File diff suppressed because one or more lines are too long
@@ -33,7 +33,8 @@ public class JavaParser extends Parser {
BITOR=91, CARET=92, MOD=93, ADD_ASSIGN=94, SUB_ASSIGN=95, MUL_ASSIGN=96,
DIV_ASSIGN=97, AND_ASSIGN=98, OR_ASSIGN=99, XOR_ASSIGN=100, MOD_ASSIGN=101,
LSHIFT_ASSIGN=102, RSHIFT_ASSIGN=103, URSHIFT_ASSIGN=104, ARROW=105, COLONCOLON=106,
AT=107, ELLIPSIS=108, WS=109, COMMENT=110, LINE_COMMENT=111, IDENTIFIER=112;
AT=107, ELLIPSIS=108, WS=109, BLOCK_COMMENT=110, JAVADOC_COMMENT=111,
LINE_COMMENT=112, IDENTIFIER=113;
public static final int
RULE_compilationUnit = 0, RULE_packageDeclaration = 1, RULE_importDeclaration = 2,
RULE_typeDeclaration = 3, RULE_modifier = 4, RULE_classOrInterfaceModifier = 5,
@@ -140,7 +141,8 @@ public class JavaParser extends Parser {
"DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
"MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
"COLONCOLON", "AT", "ELLIPSIS", "WS", "COMMENT", "LINE_COMMENT", "IDENTIFIER"
"COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "JAVADOC_COMMENT",
"LINE_COMMENT", "IDENTIFIER"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -9641,7 +9643,7 @@ public class JavaParser extends Parser {
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3r\u059f\4\2\t\2\4"+
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3s\u059f\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"+
@@ -9797,7 +9799,7 @@ public class JavaParser extends Parser {
"\2\2\u0118\u0114\3\2\2\2\u0118\u0115\3\2\2\2\u0118\u0116\3\2\2\2\u0118"+
"\u0117\3\2\2\2\u0119\r\3\2\2\2\u011a\u011d\7\24\2\2\u011b\u011d\5h\65"+
"\2\u011c\u011a\3\2\2\2\u011c\u011b\3\2\2\2\u011d\17\3\2\2\2\u011e\u011f"+
"\7\13\2\2\u011f\u0121\7r\2\2\u0120\u0122\5\22\n\2\u0121\u0120\3\2\2\2"+
"\7\13\2\2\u011f\u0121\7s\2\2\u0120\u0122\5\22\n\2\u0121\u0120\3\2\2\2"+
"\u0121\u0122\3\2\2\2\u0122\u0125\3\2\2\2\u0123\u0124\7\23\2\2\u0124\u0126"+
"\5\u00c8e\2\u0125\u0123\3\2\2\2\u0125\u0126\3\2\2\2\u0126\u0129\3\2\2"+
"\2\u0127\u0128\7\32\2\2\u0128\u012a\5\u00c6d\2\u0129\u0127\3\2\2\2\u0129"+
@@ -9807,14 +9809,14 @@ public class JavaParser extends Parser {
"\u0133\u0134\3\2\2\2\u0134\u0136\3\2\2\2\u0135\u0133\3\2\2\2\u0136\u0137"+
"\7J\2\2\u0137\23\3\2\2\2\u0138\u013a\5h\65\2\u0139\u0138\3\2\2\2\u013a"+
"\u013d\3\2\2\2\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013e\3\2"+
"\2\2\u013d\u013b\3\2\2\2\u013e\u0147\7r\2\2\u013f\u0143\7\23\2\2\u0140"+
"\2\2\u013d\u013b\3\2\2\2\u013e\u0147\7s\2\2\u013f\u0143\7\23\2\2\u0140"+
"\u0142\5h\65\2\u0141\u0140\3\2\2\2\u0142\u0145\3\2\2\2\u0143\u0141\3\2"+
"\2\2\u0143\u0144\3\2\2\2\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146"+
"\u0148\5\26\f\2\u0147\u013f\3\2\2\2\u0147\u0148\3\2\2\2\u0148\25\3\2\2"+
"\2\u0149\u014e\5\u00c8e\2\u014a\u014b\7\\\2\2\u014b\u014d\5\u00c8e\2\u014c"+
"\u014a\3\2\2\2\u014d\u0150\3\2\2\2\u014e\u014c\3\2\2\2\u014e\u014f\3\2"+
"\2\2\u014f\27\3\2\2\2\u0150\u014e\3\2\2\2\u0151\u0152\7\22\2\2\u0152\u0155"+
"\7r\2\2\u0153\u0154\7\32\2\2\u0154\u0156\5\u00c6d\2\u0155\u0153\3\2\2"+
"\7s\2\2\u0153\u0154\7\32\2\2\u0154\u0156\5\u00c6d\2\u0155\u0153\3\2\2"+
"\2\u0155\u0156\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0159\7B\2\2\u0158\u015a"+
"\5\32\16\2\u0159\u0158\3\2\2\2\u0159\u015a\3\2\2\2\u015a\u015c\3\2\2\2"+
"\u015b\u015d\7G\2\2\u015c\u015b\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015f"+
@@ -9824,12 +9826,12 @@ public class JavaParser extends Parser {
"\u0167\u016a\3\2\2\2\u0168\u0166\3\2\2\2\u0168\u0169\3\2\2\2\u0169\33"+
"\3\2\2\2\u016a\u0168\3\2\2\2\u016b\u016d\5h\65\2\u016c\u016b\3\2\2\2\u016d"+
"\u0170\3\2\2\2\u016e\u016c\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0171\3\2"+
"\2\2\u0170\u016e\3\2\2\2\u0171\u0173\7r\2\2\u0172\u0174\5\u00d2j\2\u0173"+
"\2\2\u0170\u016e\3\2\2\2\u0171\u0173\7s\2\2\u0172\u0174\5\u00d2j\2\u0173"+
"\u0172\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0176\3\2\2\2\u0175\u0177\5\""+
"\22\2\u0176\u0175\3\2\2\2\u0176\u0177\3\2\2\2\u0177\35\3\2\2\2\u0178\u017c"+
"\7F\2\2\u0179\u017b\5&\24\2\u017a\u0179\3\2\2\2\u017b\u017e\3\2\2\2\u017c"+
"\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\37\3\2\2\2\u017e\u017c\3\2\2"+
"\2\u017f\u0180\7\36\2\2\u0180\u0182\7r\2\2\u0181\u0183\5\22\n\2\u0182"+
"\2\u017f\u0180\7\36\2\2\u0180\u0182\7s\2\2\u0181\u0183\5\22\n\2\u0182"+
"\u0181\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0186\3\2\2\2\u0184\u0185\7\23"+
"\2\2\u0185\u0187\5\u00c6d\2\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187"+
"\u0188\3\2\2\2\u0188\u0189\5$\23\2\u0189!\3\2\2\2\u018a\u018e\7B\2\2\u018b"+
@@ -9849,7 +9851,7 @@ public class JavaParser extends Parser {
"\3\2\2\2\u01b3\u01ab\3\2\2\2\u01b3\u01ac\3\2\2\2\u01b3\u01ad\3\2\2\2\u01b3"+
"\u01ae\3\2\2\2\u01b3\u01af\3\2\2\2\u01b3\u01b0\3\2\2\2\u01b3\u01b1\3\2"+
"\2\2\u01b3\u01b2\3\2\2\2\u01b4)\3\2\2\2\u01b5\u01b6\5.\30\2\u01b6\u01b7"+
"\7r\2\2\u01b7\u01bc\5V,\2\u01b8\u01b9\7D\2\2\u01b9\u01bb\7E\2\2\u01ba"+
"\7s\2\2\u01b7\u01bc\5V,\2\u01b8\u01b9\7D\2\2\u01b9\u01bb\7E\2\2\u01ba"+
"\u01b8\3\2\2\2\u01bb\u01be\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bc\u01bd\3\2"+
"\2\2\u01bd\u01c1\3\2\2\2\u01be\u01bc\3\2\2\2\u01bf\u01c0\7/\2\2\u01c0"+
"\u01c2\5T+\2\u01c1\u01bf\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c3\3\2\2"+
@@ -9858,7 +9860,7 @@ public class JavaParser extends Parser {
"\5\u00c8e\2\u01ca\u01cc\7\63\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01ca\3\2\2"+
"\2\u01cc/\3\2\2\2\u01cd\u01ce\5\22\n\2\u01ce\u01cf\5*\26\2\u01cf\61\3"+
"\2\2\2\u01d0\u01d1\5\22\n\2\u01d1\u01d2\5\64\33\2\u01d2\63\3\2\2\2\u01d3"+
"\u01d4\7r\2\2\u01d4\u01d7\5V,\2\u01d5\u01d6\7/\2\2\u01d6\u01d8\5T+\2\u01d7"+
"\u01d4\7s\2\2\u01d4\u01d7\5V,\2\u01d5\u01d6\7/\2\2\u01d6\u01d8\5T+\2\u01d7"+
"\u01d5\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9\u01da\5\u0082"+
"B\2\u01da\65\3\2\2\2\u01db\u01dc\5\u00c8e\2\u01dc\u01dd\5F$\2\u01dd\u01de"+
"\7F\2\2\u01de\67\3\2\2\2\u01df\u01e1\5\n\6\2\u01e0\u01df\3\2\2\2\u01e1"+
@@ -9872,7 +9874,7 @@ public class JavaParser extends Parser {
"\5\u00c8e\2\u01f3\u01f8\5> \2\u01f4\u01f5\7G\2\2\u01f5\u01f7\5> \2\u01f6"+
"\u01f4\3\2\2\2\u01f7\u01fa\3\2\2\2\u01f8\u01f6\3\2\2\2\u01f8\u01f9\3\2"+
"\2\2\u01f9\u01fb\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fb\u01fc\7F\2\2\u01fc"+
"=\3\2\2\2\u01fd\u0202\7r\2\2\u01fe\u01ff\7D\2\2\u01ff\u0201\7E\2\2\u0200"+
"=\3\2\2\2\u01fd\u0202\7s\2\2\u01fe\u01ff\7D\2\2\u01ff\u0201\7E\2\2\u0200"+
"\u01fe\3\2\2\2\u0201\u0204\3\2\2\2\u0202\u0200\3\2\2\2\u0202\u0203\3\2"+
"\2\2\u0203\u0205\3\2\2\2\u0204\u0202\3\2\2\2\u0205\u0206\7I\2\2\u0206"+
"\u0207\5L\'\2\u0207?\3\2\2\2\u0208\u020a\5B\"\2\u0209\u0208\3\2\2\2\u020a"+
@@ -9881,7 +9883,7 @@ public class JavaParser extends Parser {
"\u0212\5h\65\2\u0211\u0210\3\2\2\2\u0212\u0215\3\2\2\2\u0213\u0211\3\2"+
"\2\2\u0213\u0214\3\2\2\2\u0214\u0216\3\2\2\2\u0215\u0213\3\2\2\2\u0216"+
"\u0217\5.\30\2\u0217\u0219\3\2\2\2\u0218\u020e\3\2\2\2\u0218\u020f\3\2"+
"\2\2\u0219\u021a\3\2\2\2\u021a\u021b\7r\2\2\u021b\u0220\5V,\2\u021c\u021d"+
"\2\2\u0219\u021a\3\2\2\2\u021a\u021b\7s\2\2\u021b\u0220\5V,\2\u021c\u021d"+
"\7D\2\2\u021d\u021f\7E\2\2\u021e\u021c\3\2\2\2\u021f\u0222\3\2\2\2\u0220"+
"\u021e\3\2\2\2\u0220\u0221\3\2\2\2\u0221\u0225\3\2\2\2\u0222\u0220\3\2"+
"\2\2\u0223\u0224\7/\2\2\u0224\u0226\5T+\2\u0225\u0223\3\2\2\2\u0225\u0226"+
@@ -9894,7 +9896,7 @@ public class JavaParser extends Parser {
"\u0235\3\2\2\2\u0238\u023b\3\2\2\2\u0239\u0237\3\2\2\2\u0239\u023a\3\2"+
"\2\2\u023aG\3\2\2\2\u023b\u0239\3\2\2\2\u023c\u023f\5J&\2\u023d\u023e"+
"\7I\2\2\u023e\u0240\5L\'\2\u023f\u023d\3\2\2\2\u023f\u0240\3\2\2\2\u0240"+
"I\3\2\2\2\u0241\u0246\7r\2\2\u0242\u0243\7D\2\2\u0243\u0245\7E\2\2\u0244"+
"I\3\2\2\2\u0241\u0246\7s\2\2\u0242\u0243\7D\2\2\u0243\u0245\7E\2\2\u0244"+
"\u0242\3\2\2\2\u0245\u0248\3\2\2\2\u0246\u0244\3\2\2\2\u0246\u0247\3\2"+
"\2\2\u0247K\3\2\2\2\u0248\u0246\3\2\2\2\u0249\u024c\5N(\2\u024a\u024c"+
"\5\u00a8U\2\u024b\u0249\3\2\2\2\u024b\u024a\3\2\2\2\u024cM\3\2\2\2\u024d"+
@@ -9903,9 +9905,9 @@ public class JavaParser extends Parser {
"\3\2\2\2\u0254\u0257\3\2\2\2\u0255\u0253\3\2\2\2\u0256\u0258\7G\2\2\u0257"+
"\u0256\3\2\2\2\u0257\u0258\3\2\2\2\u0258\u025a\3\2\2\2\u0259\u024e\3\2"+
"\2\2\u0259\u025a\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u025c\7C\2\2\u025c"+
"O\3\2\2\2\u025d\u025f\7r\2\2\u025e\u0260\5\u00ccg\2\u025f\u025e\3\2\2"+
"O\3\2\2\2\u025d\u025f\7s\2\2\u025e\u0260\5\u00ccg\2\u025f\u025e\3\2\2"+
"\2\u025f\u0260\3\2\2\2\u0260\u0268\3\2\2\2\u0261\u0262\7H\2\2\u0262\u0264"+
"\7r\2\2\u0263\u0265\5\u00ccg\2\u0264\u0263\3\2\2\2\u0264\u0265\3\2\2\2"+
"\7s\2\2\u0263\u0265\5\u00ccg\2\u0264\u0263\3\2\2\2\u0264\u0265\3\2\2\2"+
"\u0265\u0267\3\2\2\2\u0266\u0261\3\2\2\2\u0267\u026a\3\2\2\2\u0268\u0266"+
"\3\2\2\2\u0268\u0269\3\2\2\2\u0269Q\3\2\2\2\u026a\u0268\3\2\2\2\u026b"+
"\u0278\5\u00c8e\2\u026c\u026e\5h\65\2\u026d\u026c\3\2\2\2\u026e\u0271"+
@@ -9929,24 +9931,24 @@ public class JavaParser extends Parser {
"\3\2\2\2\u02a3\u02a5\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5\u02a9\5\u00c8e"+
"\2\u02a6\u02a8\5h\65\2\u02a7\u02a6\3\2\2\2\u02a8\u02ab\3\2\2\2\u02a9\u02a7"+
"\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02a9\3\2\2\2\u02ac"+
"\u02ad\7n\2\2\u02ad\u02ae\5J&\2\u02ae]\3\2\2\2\u02af\u02b4\7r\2\2\u02b0"+
"\u02b1\7H\2\2\u02b1\u02b3\7r\2\2\u02b2\u02b0\3\2\2\2\u02b3\u02b6\3\2\2"+
"\u02ad\7n\2\2\u02ad\u02ae\5J&\2\u02ae]\3\2\2\2\u02af\u02b4\7s\2\2\u02b0"+
"\u02b1\7H\2\2\u02b1\u02b3\7s\2\2\u02b2\u02b0\3\2\2\2\u02b3\u02b6\3\2\2"+
"\2\u02b4\u02b2\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5_\3\2\2\2\u02b6\u02b4"+
"\3\2\2\2\u02b7\u02be\5b\62\2\u02b8\u02be\5d\63\2\u02b9\u02be\7=\2\2\u02ba"+
"\u02be\7>\2\2\u02bb\u02be\7<\2\2\u02bc\u02be\7?\2\2\u02bd\u02b7\3\2\2"+
"\2\u02bd\u02b8\3\2\2\2\u02bd\u02b9\3\2\2\2\u02bd\u02ba\3\2\2\2\u02bd\u02bb"+
"\3\2\2\2\u02bd\u02bc\3\2\2\2\u02bea\3\2\2\2\u02bf\u02c0\t\3\2\2\u02c0"+
"c\3\2\2\2\u02c1\u02c2\t\4\2\2\u02c2e\3\2\2\2\u02c3\u02c4\7r\2\2\u02c4"+
"c\3\2\2\2\u02c1\u02c2\t\4\2\2\u02c2e\3\2\2\2\u02c3\u02c4\7s\2\2\u02c4"+
"\u02c6\7H\2\2\u02c5\u02c3\3\2\2\2\u02c6\u02c9\3\2\2\2\u02c7\u02c5\3\2"+
"\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02ca\3\2\2\2\u02c9\u02c7\3\2\2\2\u02ca"+
"\u02cb\7m\2\2\u02cb\u02cc\7r\2\2\u02ccg\3\2\2\2\u02cd\u02ce\7m\2\2\u02ce"+
"\u02cb\7m\2\2\u02cb\u02cc\7s\2\2\u02ccg\3\2\2\2\u02cd\u02ce\7m\2\2\u02ce"+
"\u02d1\5^\60\2\u02cf\u02d1\5f\64\2\u02d0\u02cd\3\2\2\2\u02d0\u02cf\3\2"+
"\2\2\u02d1\u02d8\3\2\2\2\u02d2\u02d5\7@\2\2\u02d3\u02d6\5j\66\2\u02d4"+
"\u02d6\5n8\2\u02d5\u02d3\3\2\2\2\u02d5\u02d4\3\2\2\2\u02d5\u02d6\3\2\2"+
"\2\u02d6\u02d7\3\2\2\2\u02d7\u02d9\7A\2\2\u02d8\u02d2\3\2\2\2\u02d8\u02d9"+
"\3\2\2\2\u02d9i\3\2\2\2\u02da\u02df\5l\67\2\u02db\u02dc\7G\2\2\u02dc\u02de"+
"\5l\67\2\u02dd\u02db\3\2\2\2\u02de\u02e1\3\2\2\2\u02df\u02dd\3\2\2\2\u02df"+
"\u02e0\3\2\2\2\u02e0k\3\2\2\2\u02e1\u02df\3\2\2\2\u02e2\u02e3\7r\2\2\u02e3"+
"\u02e0\3\2\2\2\u02e0k\3\2\2\2\u02e1\u02df\3\2\2\2\u02e2\u02e3\7s\2\2\u02e3"+
"\u02e4\7I\2\2\u02e4\u02e5\5n8\2\u02e5m\3\2\2\2\u02e6\u02ea\5\u00a8U\2"+
"\u02e7\u02ea\5h\65\2\u02e8\u02ea\5p9\2\u02e9\u02e6\3\2\2\2\u02e9\u02e7"+
"\3\2\2\2\u02e9\u02e8\3\2\2\2\u02eao\3\2\2\2\u02eb\u02f4\7B\2\2\u02ec\u02f1"+
@@ -9955,7 +9957,7 @@ public class JavaParser extends Parser {
"\2\2\u02f3\u02f1\3\2\2\2\u02f4\u02ec\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5"+
"\u02f7\3\2\2\2\u02f6\u02f8\7G\2\2\u02f7\u02f6\3\2\2\2\u02f7\u02f8\3\2"+
"\2\2\u02f8\u02f9\3\2\2\2\u02f9\u02fa\7C\2\2\u02faq\3\2\2\2\u02fb\u02fc"+
"\7m\2\2\u02fc\u02fd\7\36\2\2\u02fd\u02fe\7r\2\2\u02fe\u02ff\5t;\2\u02ff"+
"\7m\2\2\u02fc\u02fd\7\36\2\2\u02fd\u02fe\7s\2\2\u02fe\u02ff\5t;\2\u02ff"+
"s\3\2\2\2\u0300\u0304\7B\2\2\u0301\u0303\5v<\2\u0302\u0301\3\2\2\2\u0303"+
"\u0306\3\2\2\2\u0304\u0302\3\2\2\2\u0304\u0305\3\2\2\2\u0305\u0307\3\2"+
"\2\2\u0306\u0304\3\2\2\2\u0307\u0308\7C\2\2\u0308u\3\2\2\2\u0309\u030b"+
@@ -9971,7 +9973,7 @@ public class JavaParser extends Parser {
"\2\u0325\u0324\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u0328\3\2\2\2\u0327\u0313"+
"\3\2\2\2\u0327\u0317\3\2\2\2\u0327\u031b\3\2\2\2\u0327\u031f\3\2\2\2\u0327"+
"\u0323\3\2\2\2\u0328y\3\2\2\2\u0329\u032c\5|?\2\u032a\u032c\5~@\2\u032b"+
"\u0329\3\2\2\2\u032b\u032a\3\2\2\2\u032c{\3\2\2\2\u032d\u032e\7r\2\2\u032e"+
"\u0329\3\2\2\2\u032b\u032a\3\2\2\2\u032c{\3\2\2\2\u032d\u032e\7s\2\2\u032e"+
"\u032f\7@\2\2\u032f\u0331\7A\2\2\u0330\u0332\5\u0080A\2\u0331\u0330\3"+
"\2\2\2\u0331\u0332\3\2\2\2\u0332}\3\2\2\2\u0333\u0334\5F$\2\u0334\177"+
"\3\2\2\2\u0335\u0336\7\16\2\2\u0336\u0337\5n8\2\u0337\u0081\3\2\2\2\u0338"+
@@ -10016,11 +10018,11 @@ public class JavaParser extends Parser {
"\u0082B\2\u03ab\u03c7\3\2\2\2\u03ac\u03ae\7&\2\2\u03ad\u03af\5\u00a8U"+
"\2\u03ae\u03ad\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0\u03c7"+
"\7F\2\2\u03b1\u03b2\7.\2\2\u03b2\u03b3\5\u00a8U\2\u03b3\u03b4\7F\2\2\u03b4"+
"\u03c7\3\2\2\2\u03b5\u03b7\7\6\2\2\u03b6\u03b8\7r\2\2\u03b7\u03b6\3\2"+
"\u03c7\3\2\2\2\u03b5\u03b7\7\6\2\2\u03b6\u03b8\7s\2\2\u03b7\u03b6\3\2"+
"\2\2\u03b7\u03b8\3\2\2\2\u03b8\u03b9\3\2\2\2\u03b9\u03c7\7F\2\2\u03ba"+
"\u03bc\7\r\2\2\u03bb\u03bd\7r\2\2\u03bc\u03bb\3\2\2\2\u03bc\u03bd\3\2"+
"\u03bc\7\r\2\2\u03bb\u03bd\7s\2\2\u03bc\u03bb\3\2\2\2\u03bc\u03bd\3\2"+
"\2\2\u03bd\u03be\3\2\2\2\u03be\u03c7\7F\2\2\u03bf\u03c7\7F\2\2\u03c0\u03c1"+
"\5\u00a8U\2\u03c1\u03c2\7F\2\2\u03c2\u03c7\3\2\2\2\u03c3\u03c4\7r\2\2"+
"\5\u00a8U\2\u03c1\u03c2\7F\2\2\u03c2\u03c7\3\2\2\2\u03c3\u03c4\7s\2\2"+
"\u03c4\u03c5\7O\2\2\u03c5\u03c7\5\u008aF\2\u03c6\u035e\3\2\2\2\u03c6\u035f"+
"\3\2\2\2\u03c6\u0367\3\2\2\2\u03c6\u036e\3\2\2\2\u03c6\u0374\3\2\2\2\u03c6"+
"\u0378\3\2\2\2\u03c6\u037e\3\2\2\2\u03c6\u038b\3\2\2\2\u03c6\u0397\3\2"+
@@ -10029,7 +10031,7 @@ public class JavaParser extends Parser {
"\2\2\u03c6\u03c3\3\2\2\2\u03c7\u008b\3\2\2\2\u03c8\u03c9\7\t\2\2\u03c9"+
"\u03cd\7@\2\2\u03ca\u03cc\5\16\b\2\u03cb\u03ca\3\2\2\2\u03cc\u03cf\3\2"+
"\2\2\u03cd\u03cb\3\2\2\2\u03cd\u03ce\3\2\2\2\u03ce\u03d0\3\2\2\2\u03cf"+
"\u03cd\3\2\2\2\u03d0\u03d1\5\u008eH\2\u03d1\u03d2\7r\2\2\u03d2\u03d3\7"+
"\u03cd\3\2\2\2\u03d0\u03d1\5\u008eH\2\u03d1\u03d2\7s\2\2\u03d2\u03d3\7"+
"A\2\2\u03d3\u03d4\5\u0082B\2\u03d4\u008d\3\2\2\2\u03d5\u03da\5^\60\2\u03d6"+
"\u03d7\7]\2\2\u03d7\u03d9\5^\60\2\u03d8\u03d6\3\2\2\2\u03d9\u03dc\3\2"+
"\2\2\u03da\u03d8\3\2\2\2\u03da\u03db\3\2\2\2\u03db\u008f\3\2\2\2\u03dc"+
@@ -10046,7 +10048,7 @@ public class JavaParser extends Parser {
"\2\2\u03fc\u03fd\3\2\2\2\u03fd\u03fb\3\2\2\2\u03fd\u03fe\3\2\2\2\u03fe"+
"\u0400\3\2\2\2\u03ff\u0401\5\u0084C\2\u0400\u03ff\3\2\2\2\u0401\u0402"+
"\3\2\2\2\u0402\u0400\3\2\2\2\u0402\u0403\3\2\2\2\u0403\u0099\3\2\2\2\u0404"+
"\u0407\7\b\2\2\u0405\u0408\5\u00a8U\2\u0406\u0408\7r\2\2\u0407\u0405\3"+
"\u0407\7\b\2\2\u0405\u0408\5\u00a8U\2\u0406\u0408\7s\2\2\u0407\u0405\3"+
"\2\2\2\u0407\u0406\3\2\2\2\u0408\u0409\3\2\2\2\u0409\u040d\7O\2\2\u040a"+
"\u040b\7\16\2\2\u040b\u040d\7O\2\2\u040c\u0404\3\2\2\2\u040c\u040a\3\2"+
"\2\2\u040d\u009b\3\2\2\2\u040e\u041b\5\u00a0Q\2\u040f\u0411\5\u009eP\2"+
@@ -10063,7 +10065,7 @@ public class JavaParser extends Parser {
"\u00a8U\2\u042d\u042e\7A\2\2\u042e\u00a3\3\2\2\2\u042f\u0434\5\u00a8U"+
"\2\u0430\u0431\7G\2\2\u0431\u0433\5\u00a8U\2\u0432\u0430\3\2\2\2\u0433"+
"\u0436\3\2\2\2\u0434\u0432\3\2\2\2\u0434\u0435\3\2\2\2\u0435\u00a5\3\2"+
"\2\2\u0436\u0434\3\2\2\2\u0437\u0438\7r\2\2\u0438\u043a\7@\2\2\u0439\u043b"+
"\2\2\u0436\u0434\3\2\2\2\u0437\u0438\7s\2\2\u0438\u043a\7@\2\2\u0439\u043b"+
"\5\u00a4S\2\u043a\u0439\3\2\2\2\u043a\u043b\3\2\2\2\u043b\u043c\3\2\2"+
"\2\u043c\u044a\7A\2\2\u043d\u043e\7-\2\2\u043e\u0440\7@\2\2\u043f\u0441"+
"\5\u00a4S\2\u0440\u043f\3\2\2\2\u0440\u0441\3\2\2\2\u0441\u0442\3\2\2"+
@@ -10081,7 +10083,7 @@ public class JavaParser extends Parser {
"\2\u0463\u0478\5\u00a8U\25\u0464\u0465\t\6\2\2\u0465\u0478\5\u00a8U\24"+
"\u0466\u0478\5\u00aaV\2\u0467\u0468\5\u00c8e\2\u0468\u046e\7l\2\2\u0469"+
"\u046b\5\u00ccg\2\u046a\u0469\3\2\2\2\u046a\u046b\3\2\2\2\u046b\u046c"+
"\3\2\2\2\u046c\u046f\7r\2\2\u046d\u046f\7!\2\2\u046e\u046a\3\2\2\2\u046e"+
"\3\2\2\2\u046c\u046f\7s\2\2\u046d\u046f\7!\2\2\u046e\u046a\3\2\2\2\u046e"+
"\u046d\3\2\2\2\u046f\u0478\3\2\2\2\u0470\u0471\5\u00b2Z\2\u0471\u0473"+
"\7l\2\2\u0472\u0474\5\u00ccg\2\u0473\u0472\3\2\2\2\u0473\u0474\3\2\2\2"+
"\u0474\u0475\3\2\2\2\u0475\u0476\7!\2\2\u0476\u0478\3\2\2\2\u0477\u044b"+
@@ -10102,7 +10104,7 @@ public class JavaParser extends Parser {
"\7U\2\2\u049e\u04c8\5\u00a8U\n\u049f\u04a0\f\b\2\2\u04a0\u04a1\7N\2\2"+
"\u04a1\u04a2\5\u00a8U\2\u04a2\u04a3\7O\2\2\u04a3\u04a4\5\u00a8U\b\u04a4"+
"\u04c8\3\2\2\2\u04a5\u04a6\f\7\2\2\u04a6\u04a7\t\13\2\2\u04a7\u04c8\5"+
"\u00a8U\7\u04a8\u04a9\f\33\2\2\u04a9\u04b5\7H\2\2\u04aa\u04b6\7r\2\2\u04ab"+
"\u00a8U\7\u04a8\u04a9\f\33\2\2\u04a9\u04b5\7H\2\2\u04aa\u04b6\7s\2\2\u04ab"+
"\u04b6\5\u00a6T\2\u04ac\u04b6\7-\2\2\u04ad\u04af\7!\2\2\u04ae\u04b0\5"+
"\u00c4c\2\u04af\u04ae\3\2\2\2\u04af\u04b0\3\2\2\2\u04b0\u04b1\3\2\2\2"+
"\u04b1\u04b6\5\u00b8]\2\u04b2\u04b3\7*\2\2\u04b3\u04b6\5\u00ceh\2\u04b4"+
@@ -10113,24 +10115,24 @@ public class JavaParser extends Parser {
"\u04c8\t\f\2\2\u04be\u04bf\f\17\2\2\u04bf\u04c0\7\34\2\2\u04c0\u04c8\5"+
"\u00c8e\2\u04c1\u04c2\f\5\2\2\u04c2\u04c4\7l\2\2\u04c3\u04c5\5\u00ccg"+
"\2\u04c4\u04c3\3\2\2\2\u04c4\u04c5\3\2\2\2\u04c5\u04c6\3\2\2\2\u04c6\u04c8"+
"\7r\2\2\u04c7\u0479\3\2\2\2\u04c7\u047c\3\2\2\2\u04c7\u047f\3\2\2\2\u04c7"+
"\7s\2\2\u04c7\u0479\3\2\2\2\u04c7\u047c\3\2\2\2\u04c7\u047f\3\2\2\2\u04c7"+
"\u048a\3\2\2\2\u04c7\u048d\3\2\2\2\u04c7\u0490\3\2\2\2\u04c7\u0493\3\2"+
"\2\2\u04c7\u0496\3\2\2\2\u04c7\u0499\3\2\2\2\u04c7\u049c\3\2\2\2\u04c7"+
"\u049f\3\2\2\2\u04c7\u04a5\3\2\2\2\u04c7\u04a8\3\2\2\2\u04c7\u04b7\3\2"+
"\2\2\u04c7\u04bc\3\2\2\2\u04c7\u04be\3\2\2\2\u04c7\u04c1\3\2\2\2\u04c8"+
"\u04cb\3\2\2\2\u04c9\u04c7\3\2\2\2\u04c9\u04ca\3\2\2\2\u04ca\u00a9\3\2"+
"\2\2\u04cb\u04c9\3\2\2\2\u04cc\u04cd\5\u00acW\2\u04cd\u04ce\7k\2\2\u04ce"+
"\u04cf\5\u00aeX\2\u04cf\u00ab\3\2\2\2\u04d0\u04e1\7r\2\2\u04d1\u04d3\7"+
"\u04cf\5\u00aeX\2\u04cf\u00ab\3\2\2\2\u04d0\u04e1\7s\2\2\u04d1\u04d3\7"+
"@\2\2\u04d2\u04d4\5X-\2\u04d3\u04d2\3\2\2\2\u04d3\u04d4\3\2\2\2\u04d4"+
"\u04d5\3\2\2\2\u04d5\u04e1\7A\2\2\u04d6\u04d7\7@\2\2\u04d7\u04dc\7r\2"+
"\2\u04d8\u04d9\7G\2\2\u04d9\u04db\7r\2\2\u04da\u04d8\3\2\2\2\u04db\u04de"+
"\u04d5\3\2\2\2\u04d5\u04e1\7A\2\2\u04d6\u04d7\7@\2\2\u04d7\u04dc\7s\2"+
"\2\u04d8\u04d9\7G\2\2\u04d9\u04db\7s\2\2\u04da\u04d8\3\2\2\2\u04db\u04de"+
"\3\2\2\2\u04dc\u04da\3\2\2\2\u04dc\u04dd\3\2\2\2\u04dd\u04df\3\2\2\2\u04de"+
"\u04dc\3\2\2\2\u04df\u04e1\7A\2\2\u04e0\u04d0\3\2\2\2\u04e0\u04d1\3\2"+
"\2\2\u04e0\u04d6\3\2\2\2\u04e1\u00ad\3\2\2\2\u04e2\u04e5\5\u00a8U\2\u04e3"+
"\u04e5\5\u0082B\2\u04e4\u04e2\3\2\2\2\u04e4\u04e3\3\2\2\2\u04e5\u00af"+
"\3\2\2\2\u04e6\u04e7\7@\2\2\u04e7\u04e8\5\u00a8U\2\u04e8\u04e9\7A\2\2"+
"\u04e9\u04f9\3\2\2\2\u04ea\u04f9\7-\2\2\u04eb\u04f9\7*\2\2\u04ec\u04f9"+
"\5`\61\2\u04ed\u04f9\7r\2\2\u04ee\u04ef\5.\30\2\u04ef\u04f0\7H\2\2\u04f0"+
"\5`\61\2\u04ed\u04f9\7s\2\2\u04ee\u04ef\5.\30\2\u04ef\u04f0\7H\2\2\u04f0"+
"\u04f1\7\13\2\2\u04f1\u04f9\3\2\2\2\u04f2\u04f6\5\u00c4c\2\u04f3\u04f7"+
"\5\u00d0i\2\u04f4\u04f5\7-\2\2\u04f5\u04f7\5\u00d2j\2\u04f6\u04f3\3\2"+
"\2\2\u04f6\u04f4\3\2\2\2\u04f7\u04f9\3\2\2\2\u04f8\u04e6\3\2\2\2\u04f8"+
@@ -10139,19 +10141,19 @@ public class JavaParser extends Parser {
"\u04fb\5P)\2\u04fb\u04fc\7H\2\2\u04fc\u04fe\3\2\2\2\u04fd\u04fa\3\2\2"+
"\2\u04fd\u04fe\3\2\2\2\u04fe\u0502\3\2\2\2\u04ff\u0501\5h\65\2\u0500\u04ff"+
"\3\2\2\2\u0501\u0504\3\2\2\2\u0502\u0500\3\2\2\2\u0502\u0503\3\2\2\2\u0503"+
"\u0505\3\2\2\2\u0504\u0502\3\2\2\2\u0505\u0507\7r\2\2\u0506\u0508\5\u00cc"+
"\u0505\3\2\2\2\u0504\u0502\3\2\2\2\u0505\u0507\7s\2\2\u0506\u0508\5\u00cc"+
"g\2\u0507\u0506\3\2\2\2\u0507\u0508\3\2\2\2\u0508\u00b3\3\2\2\2\u0509"+
"\u050a\5\u00c4c\2\u050a\u050b\5\u00b6\\\2\u050b\u050c\5\u00bc_\2\u050c"+
"\u0513\3\2\2\2\u050d\u0510\5\u00b6\\\2\u050e\u0511\5\u00ba^\2\u050f\u0511"+
"\5\u00bc_\2\u0510\u050e\3\2\2\2\u0510\u050f\3\2\2\2\u0511\u0513\3\2\2"+
"\2\u0512\u0509\3\2\2\2\u0512\u050d\3\2\2\2\u0513\u00b5\3\2\2\2\u0514\u0516"+
"\7r\2\2\u0515\u0517\5\u00c0a\2\u0516\u0515\3\2\2\2\u0516\u0517\3\2\2\2"+
"\u0517\u051f\3\2\2\2\u0518\u0519\7H\2\2\u0519\u051b\7r\2\2\u051a\u051c"+
"\7s\2\2\u0515\u0517\5\u00c0a\2\u0516\u0515\3\2\2\2\u0516\u0517\3\2\2\2"+
"\u0517\u051f\3\2\2\2\u0518\u0519\7H\2\2\u0519\u051b\7s\2\2\u051a\u051c"+
"\5\u00c0a\2\u051b\u051a\3\2\2\2\u051b\u051c\3\2\2\2\u051c\u051e\3\2\2"+
"\2\u051d\u0518\3\2\2\2\u051e\u0521\3\2\2\2\u051f\u051d\3\2\2\2\u051f\u0520"+
"\3\2\2\2\u0520\u0524\3\2\2\2\u0521\u051f\3\2\2\2\u0522\u0524\5\u00caf"+
"\2\u0523\u0514\3\2\2\2\u0523\u0522\3\2\2\2\u0524\u00b7\3\2\2\2\u0525\u0527"+
"\7r\2\2\u0526\u0528\5\u00c2b\2\u0527\u0526\3\2\2\2\u0527\u0528\3\2\2\2"+
"\7s\2\2\u0526\u0528\5\u00c2b\2\u0527\u0526\3\2\2\2\u0527\u0528\3\2\2\2"+
"\u0528\u0529\3\2\2\2\u0529\u052a\5\u00bc_\2\u052a\u00b9\3\2\2\2\u052b"+
"\u0547\7D\2\2\u052c\u0531\7E\2\2\u052d\u052e\7D\2\2\u052e\u0530\7E\2\2"+
"\u052f\u052d\3\2\2\2\u0530\u0533\3\2\2\2\u0531\u052f\3\2\2\2\u0531\u0532"+
@@ -10184,9 +10186,9 @@ public class JavaParser extends Parser {
"\u0581\3\2\2\2\u0584\u0587\3\2\2\2\u0585\u0583\3\2\2\2\u0585\u0586\3\2"+
"\2\2\u0586\u0588\3\2\2\2\u0587\u0585\3\2\2\2\u0588\u0589\7J\2\2\u0589"+
"\u00cd\3\2\2\2\u058a\u0591\5\u00d2j\2\u058b\u058c\7H\2\2\u058c\u058e\7"+
"r\2\2\u058d\u058f\5\u00d2j\2\u058e\u058d\3\2\2\2\u058e\u058f\3\2\2\2\u058f"+
"s\2\2\u058d\u058f\5\u00d2j\2\u058e\u058d\3\2\2\2\u058e\u058f\3\2\2\2\u058f"+
"\u0591\3\2\2\2\u0590\u058a\3\2\2\2\u0590\u058b\3\2\2\2\u0591\u00cf\3\2"+
"\2\2\u0592\u0593\7*\2\2\u0593\u0597\5\u00ceh\2\u0594\u0595\7r\2\2\u0595"+
"\2\2\u0592\u0593\7*\2\2\u0593\u0597\5\u00ceh\2\u0594\u0595\7s\2\2\u0595"+
"\u0597\5\u00d2j\2\u0596\u0592\3\2\2\2\u0596\u0594\3\2\2\2\u0597\u00d1"+
"\3\2\2\2\u0598\u059a\7@\2\2\u0599\u059b\5\u00a4S\2\u059a\u0599\3\2\2\2"+
"\u059a\u059b\3\2\2\2\u059b\u059c\3\2\2\2\u059c\u059d\7A\2\2\u059d\u00d3"+
@@ -107,9 +107,10 @@ COLONCOLON=106
AT=107
ELLIPSIS=108
WS=109
COMMENT=110
LINE_COMMENT=111
IDENTIFIER=112
BLOCK_COMMENT=110
JAVADOC_COMMENT=111
LINE_COMMENT=112
IDENTIFIER=113
'abstract'=1
'assert'=2
'boolean'=3
@@ -0,0 +1,79 @@
/*
[The "BSD licence"]
Copyright (c) 2016 Pascal Gruen
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
lexer grammar JavadocLexer;
NAME
: [a-zA-Z]+
;
NEWLINE
: '\n' (SPACE? (STAR {_input.LA(1) != '/'}?)+)?
| '\r\n' (SPACE? (STAR {_input.LA(1) != '/'}?)+)?
| '\r' (SPACE? (STAR {_input.LA(1) != '/'}?)+)?
;
SPACE
: (' '|'\t')+
;
TEXT_CONTENT
: ~[\n\r\t @*{}/a-zA-Z]+
;
AT
: '@'
;
STAR
: '*'
;
SLASH
: '/'
;
JAVADOC_START
: '/**' STAR*
;
JAVADOC_END
: SPACE? STAR* '*/'
;
INLINE_TAG_START
: '{@'
;
BRACE_OPEN
: '{'
;
BRACE_CLOSE
: '}'
;
@@ -0,0 +1,53 @@
token literal names:
null
null
null
null
null
'@'
'*'
'/'
null
null
'{@'
'{'
'}'
token symbolic names:
null
NAME
NEWLINE
SPACE
TEXT_CONTENT
AT
STAR
SLASH
JAVADOC_START
JAVADOC_END
INLINE_TAG_START
BRACE_OPEN
BRACE_CLOSE
rule names:
NAME
NEWLINE
SPACE
TEXT_CONTENT
AT
STAR
SLASH
JAVADOC_START
JAVADOC_END
INLINE_TAG_START
BRACE_OPEN
BRACE_CLOSE
channel names:
DEFAULT_TOKEN_CHANNEL
HIDDEN
mode names:
DEFAULT_MODE
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 14, 120, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 3, 2, 6, 2, 29, 10, 2, 13, 2, 14, 2, 30, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 3, 3, 3, 3, 3, 6, 3, 40, 10, 3, 13, 3, 14, 3, 41, 5, 3, 44, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 50, 10, 3, 3, 3, 3, 3, 3, 3, 6, 3, 55, 10, 3, 13, 3, 14, 3, 56, 5, 3, 59, 10, 3, 3, 3, 3, 3, 5, 3, 63, 10, 3, 3, 3, 3, 3, 3, 3, 6, 3, 68, 10, 3, 13, 3, 14, 3, 69, 5, 3, 72, 10, 3, 5, 3, 74, 10, 3, 3, 4, 6, 4, 77, 10, 4, 13, 4, 14, 4, 78, 3, 5, 6, 5, 82, 10, 5, 13, 5, 14, 5, 83, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 97, 10, 9, 12, 9, 14, 9, 100, 11, 9, 3, 10, 5, 10, 103, 10, 10, 3, 10, 7, 10, 106, 10, 10, 12, 10, 14, 10, 109, 11, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 2, 2, 14, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 3, 2, 5, 4, 2, 67, 92, 99, 124, 4, 2, 11, 11, 34, 34, 10, 2, 11, 12, 15, 15, 34, 34, 44, 44, 49, 49, 66, 92, 99, 125, 127, 127, 2, 136, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 3, 28, 3, 2, 2, 2, 5, 73, 3, 2, 2, 2, 7, 76, 3, 2, 2, 2, 9, 81, 3, 2, 2, 2, 11, 85, 3, 2, 2, 2, 13, 87, 3, 2, 2, 2, 15, 89, 3, 2, 2, 2, 17, 91, 3, 2, 2, 2, 19, 102, 3, 2, 2, 2, 21, 113, 3, 2, 2, 2, 23, 116, 3, 2, 2, 2, 25, 118, 3, 2, 2, 2, 27, 29, 9, 2, 2, 2, 28, 27, 3, 2, 2, 2, 29, 30, 3, 2, 2, 2, 30, 28, 3, 2, 2, 2, 30, 31, 3, 2, 2, 2, 31, 4, 3, 2, 2, 2, 32, 43, 7, 12, 2, 2, 33, 35, 5, 7, 4, 2, 34, 33, 3, 2, 2, 2, 34, 35, 3, 2, 2, 2, 35, 39, 3, 2, 2, 2, 36, 37, 5, 13, 7, 2, 37, 38, 6, 3, 2, 2, 38, 40, 3, 2, 2, 2, 39, 36, 3, 2, 2, 2, 40, 41, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 41, 42, 3, 2, 2, 2, 42, 44, 3, 2, 2, 2, 43, 34, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 74, 3, 2, 2, 2, 45, 46, 7, 15, 2, 2, 46, 47, 7, 12, 2, 2, 47, 58, 3, 2, 2, 2, 48, 50, 5, 7, 4, 2, 49, 48, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 54, 3, 2, 2, 2, 51, 52, 5, 13, 7, 2, 52, 53, 6, 3, 3, 2, 53, 55, 3, 2, 2, 2, 54, 51, 3, 2, 2, 2, 55, 56, 3, 2, 2, 2, 56, 54, 3, 2, 2, 2, 56, 57, 3, 2, 2, 2, 57, 59, 3, 2, 2, 2, 58, 49, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 74, 3, 2, 2, 2, 60, 71, 7, 15, 2, 2, 61, 63, 5, 7, 4, 2, 62, 61, 3, 2, 2, 2, 62, 63, 3, 2, 2, 2, 63, 67, 3, 2, 2, 2, 64, 65, 5, 13, 7, 2, 65, 66, 6, 3, 4, 2, 66, 68, 3, 2, 2, 2, 67, 64, 3, 2, 2, 2, 68, 69, 3, 2, 2, 2, 69, 67, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 72, 3, 2, 2, 2, 71, 62, 3, 2, 2, 2, 71, 72, 3, 2, 2, 2, 72, 74, 3, 2, 2, 2, 73, 32, 3, 2, 2, 2, 73, 45, 3, 2, 2, 2, 73, 60, 3, 2, 2, 2, 74, 6, 3, 2, 2, 2, 75, 77, 9, 3, 2, 2, 76, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 8, 3, 2, 2, 2, 80, 82, 10, 4, 2, 2, 81, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 10, 3, 2, 2, 2, 85, 86, 7, 66, 2, 2, 86, 12, 3, 2, 2, 2, 87, 88, 7, 44, 2, 2, 88, 14, 3, 2, 2, 2, 89, 90, 7, 49, 2, 2, 90, 16, 3, 2, 2, 2, 91, 92, 7, 49, 2, 2, 92, 93, 7, 44, 2, 2, 93, 94, 7, 44, 2, 2, 94, 98, 3, 2, 2, 2, 95, 97, 5, 13, 7, 2, 96, 95, 3, 2, 2, 2, 97, 100, 3, 2, 2, 2, 98, 96, 3, 2, 2, 2, 98, 99, 3, 2, 2, 2, 99, 18, 3, 2, 2, 2, 100, 98, 3, 2, 2, 2, 101, 103, 5, 7, 4, 2, 102, 101, 3, 2, 2, 2, 102, 103, 3, 2, 2, 2, 103, 107, 3, 2, 2, 2, 104, 106, 5, 13, 7, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 110, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 7, 44, 2, 2, 111, 112, 7, 49, 2, 2, 112, 20, 3, 2, 2, 2, 113, 114, 7, 125, 2, 2, 114, 115, 7, 66, 2, 2, 115, 22, 3, 2, 2, 2, 116, 117, 7, 125, 2, 2, 117, 24, 3, 2, 2, 2, 118, 119, 7, 127, 2, 2, 119, 26, 3, 2, 2, 2, 19, 2, 30, 34, 41, 43, 49, 56, 58, 62, 69, 71, 73, 78, 83, 98, 102, 107, 2]
@@ -0,0 +1,170 @@
// Generated from JavadocLexer.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
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 JavadocLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
NAME=1, NEWLINE=2, SPACE=3, TEXT_CONTENT=4, AT=5, STAR=6, SLASH=7, JAVADOC_START=8,
JAVADOC_END=9, INLINE_TAG_START=10, BRACE_OPEN=11, BRACE_CLOSE=12;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
public static String[] modeNames = {
"DEFAULT_MODE"
};
private static String[] makeRuleNames() {
return new String[] {
"NAME", "NEWLINE", "SPACE", "TEXT_CONTENT", "AT", "STAR", "SLASH", "JAVADOC_START",
"JAVADOC_END", "INLINE_TAG_START", "BRACE_OPEN", "BRACE_CLOSE"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null, null, null, null, null, "'@'", "'*'", "'/'", null, null, "'{@'",
"'{'", "'}'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "NAME", "NEWLINE", "SPACE", "TEXT_CONTENT", "AT", "STAR", "SLASH",
"JAVADOC_START", "JAVADOC_END", "INLINE_TAG_START", "BRACE_OPEN", "BRACE_CLOSE"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
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] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public JavadocLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "JavadocLexer.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
@Override
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 1:
return NEWLINE_sempred((RuleContext)_localctx, predIndex);
}
return true;
}
private boolean NEWLINE_sempred(RuleContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
return _input.LA(1) != '/';
case 1:
return _input.LA(1) != '/';
case 2:
return _input.LA(1) != '/';
}
return true;
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\16x\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\3\2\6\2\35\n\2\r\2\16\2\36\3\3\3\3\5\3#\n\3\3\3\3"+
"\3\3\3\6\3(\n\3\r\3\16\3)\5\3,\n\3\3\3\3\3\3\3\3\3\5\3\62\n\3\3\3\3\3"+
"\3\3\6\3\67\n\3\r\3\16\38\5\3;\n\3\3\3\3\3\5\3?\n\3\3\3\3\3\3\3\6\3D\n"+
"\3\r\3\16\3E\5\3H\n\3\5\3J\n\3\3\4\6\4M\n\4\r\4\16\4N\3\5\6\5R\n\5\r\5"+
"\16\5S\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\t\3\t\7\ta\n\t\f\t\16\td"+
"\13\t\3\n\5\ng\n\n\3\n\7\nj\n\n\f\n\16\nm\13\n\3\n\3\n\3\n\3\13\3\13\3"+
"\13\3\f\3\f\3\r\3\r\2\2\16\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25"+
"\f\27\r\31\16\3\2\5\4\2C\\c|\4\2\13\13\"\"\n\2\13\f\17\17\"\",,\61\61"+
"B\\c}\177\177\2\u0088\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2"+
"\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25"+
"\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\3\34\3\2\2\2\5I\3\2\2\2\7L\3\2\2\2"+
"\tQ\3\2\2\2\13U\3\2\2\2\rW\3\2\2\2\17Y\3\2\2\2\21[\3\2\2\2\23f\3\2\2\2"+
"\25q\3\2\2\2\27t\3\2\2\2\31v\3\2\2\2\33\35\t\2\2\2\34\33\3\2\2\2\35\36"+
"\3\2\2\2\36\34\3\2\2\2\36\37\3\2\2\2\37\4\3\2\2\2 +\7\f\2\2!#\5\7\4\2"+
"\"!\3\2\2\2\"#\3\2\2\2#\'\3\2\2\2$%\5\r\7\2%&\6\3\2\2&(\3\2\2\2\'$\3\2"+
"\2\2()\3\2\2\2)\'\3\2\2\2)*\3\2\2\2*,\3\2\2\2+\"\3\2\2\2+,\3\2\2\2,J\3"+
"\2\2\2-.\7\17\2\2./\7\f\2\2/:\3\2\2\2\60\62\5\7\4\2\61\60\3\2\2\2\61\62"+
"\3\2\2\2\62\66\3\2\2\2\63\64\5\r\7\2\64\65\6\3\3\2\65\67\3\2\2\2\66\63"+
"\3\2\2\2\678\3\2\2\28\66\3\2\2\289\3\2\2\29;\3\2\2\2:\61\3\2\2\2:;\3\2"+
"\2\2;J\3\2\2\2<G\7\17\2\2=?\5\7\4\2>=\3\2\2\2>?\3\2\2\2?C\3\2\2\2@A\5"+
"\r\7\2AB\6\3\4\2BD\3\2\2\2C@\3\2\2\2DE\3\2\2\2EC\3\2\2\2EF\3\2\2\2FH\3"+
"\2\2\2G>\3\2\2\2GH\3\2\2\2HJ\3\2\2\2I \3\2\2\2I-\3\2\2\2I<\3\2\2\2J\6"+
"\3\2\2\2KM\t\3\2\2LK\3\2\2\2MN\3\2\2\2NL\3\2\2\2NO\3\2\2\2O\b\3\2\2\2"+
"PR\n\4\2\2QP\3\2\2\2RS\3\2\2\2SQ\3\2\2\2ST\3\2\2\2T\n\3\2\2\2UV\7B\2\2"+
"V\f\3\2\2\2WX\7,\2\2X\16\3\2\2\2YZ\7\61\2\2Z\20\3\2\2\2[\\\7\61\2\2\\"+
"]\7,\2\2]^\7,\2\2^b\3\2\2\2_a\5\r\7\2`_\3\2\2\2ad\3\2\2\2b`\3\2\2\2bc"+
"\3\2\2\2c\22\3\2\2\2db\3\2\2\2eg\5\7\4\2fe\3\2\2\2fg\3\2\2\2gk\3\2\2\2"+
"hj\5\r\7\2ih\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2ln\3\2\2\2mk\3\2\2\2"+
"no\7,\2\2op\7\61\2\2p\24\3\2\2\2qr\7}\2\2rs\7B\2\2s\26\3\2\2\2tu\7}\2"+
"\2u\30\3\2\2\2vw\7\177\2\2w\32\3\2\2\2\23\2\36\")+\618:>EGINSbfk\2";
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);
}
}
}
@@ -0,0 +1,18 @@
NAME=1
NEWLINE=2
SPACE=3
TEXT_CONTENT=4
AT=5
STAR=6
SLASH=7
JAVADOC_START=8
JAVADOC_END=9
INLINE_TAG_START=10
BRACE_OPEN=11
BRACE_CLOSE=12
'@'=5
'*'=6
'/'=7
'{@'=10
'{'=11
'}'=12
@@ -0,0 +1,149 @@
/*
[The "BSD licence"]
Copyright (c) 2016 Pascal Gruen
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
parser grammar JavadocParser;
options { tokenVocab=JavadocLexer; }
documentation
: EOF
| JAVADOC_START skipWhitespace* documentationContent JAVADOC_END EOF
| skipWhitespace* documentationContent EOF
;
documentationContent
: description skipWhitespace*
| skipWhitespace* tagSection
| description NEWLINE+ skipWhitespace* tagSection
;
skipWhitespace
: SPACE
| NEWLINE
;
description
: descriptionLine (descriptionNewline+ descriptionLine)*
;
descriptionLine
: descriptionLineStart descriptionLineElement*
| inlineTag descriptionLineElement*
;
descriptionLineStart
: SPACE? descriptionLineNoSpaceNoAt+ (descriptionLineNoSpaceNoAt | SPACE | AT)*
;
descriptionLineNoSpaceNoAt
: TEXT_CONTENT
| NAME
| STAR
| SLASH
| BRACE_OPEN
| BRACE_CLOSE
;
descriptionLineElement
: inlineTag
| descriptionLineText
;
descriptionLineText
: (descriptionLineNoSpaceNoAt | SPACE | AT)+
;
descriptionNewline
: NEWLINE
;
tagSection
: blockTag+
;
blockTag
: SPACE? AT blockTagName SPACE? blockTagContent*
;
blockTagName
: NAME
;
blockTagContent
: blockTagText
| inlineTag
| NEWLINE
;
blockTagText
: blockTagTextElement+
;
blockTagTextElement
: TEXT_CONTENT
| NAME
| SPACE
| STAR
| SLASH
| BRACE_OPEN
| BRACE_CLOSE
;
inlineTag
: INLINE_TAG_START inlineTagName SPACE* inlineTagContent? BRACE_CLOSE
;
inlineTagName
: NAME
;
inlineTagContent
: braceContent+
;
braceExpression
: BRACE_OPEN braceContent* BRACE_CLOSE
;
braceContent
: braceExpression
| braceText (NEWLINE* braceText)*
;
braceText
: TEXT_CONTENT
| NAME
| SPACE
| STAR
| SLASH
| NEWLINE
;
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
NAME=1
NEWLINE=2
SPACE=3
TEXT_CONTENT=4
AT=5
STAR=6
SLASH=7
JAVADOC_START=8
JAVADOC_END=9
INLINE_TAG_START=10
BRACE_OPEN=11
BRACE_CLOSE=12
'@'=5
'*'=6
'/'=7
'{@'=10
'{'=11
'}'=12
@@ -0,0 +1,303 @@
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
/**
* This class provides an empty implementation of {@link JavadocParserListener},
* which can be extended to create a listener which only needs to handle a subset
* of the available methods.
*/
public class JavadocParserBaseListener implements JavadocParserListener {
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDocumentation(JavadocParser.DocumentationContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDocumentation(JavadocParser.DocumentationContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDocumentationContent(JavadocParser.DocumentationContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDocumentationContent(JavadocParser.DocumentationContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescription(JavadocParser.DescriptionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescription(JavadocParser.DescriptionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionLine(JavadocParser.DescriptionLineContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionLine(JavadocParser.DescriptionLineContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterTagSection(JavadocParser.TagSectionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitTagSection(JavadocParser.TagSectionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlockTag(JavadocParser.BlockTagContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlockTag(JavadocParser.BlockTagContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlockTagName(JavadocParser.BlockTagNameContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlockTagName(JavadocParser.BlockTagNameContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlockTagContent(JavadocParser.BlockTagContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlockTagContent(JavadocParser.BlockTagContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlockTagText(JavadocParser.BlockTagTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlockTagText(JavadocParser.BlockTagTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInlineTag(JavadocParser.InlineTagContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInlineTag(JavadocParser.InlineTagContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInlineTagName(JavadocParser.InlineTagNameContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInlineTagName(JavadocParser.InlineTagNameContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterInlineTagContent(JavadocParser.InlineTagContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitInlineTagContent(JavadocParser.InlineTagContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBraceExpression(JavadocParser.BraceExpressionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBraceExpression(JavadocParser.BraceExpressionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBraceContent(JavadocParser.BraceContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBraceContent(JavadocParser.BraceContentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBraceText(JavadocParser.BraceTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBraceText(JavadocParser.BraceTextContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void visitTerminal(TerminalNode node) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void visitErrorNode(ErrorNode node) { }
}
@@ -0,0 +1,168 @@
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
/**
* This class provides an empty implementation of {@link JavadocParserVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class JavadocParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements JavadocParserVisitor<T> {
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDocumentation(JavadocParser.DocumentationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDocumentationContent(JavadocParser.DocumentationContentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescription(JavadocParser.DescriptionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionLine(JavadocParser.DescriptionLineContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTagSection(JavadocParser.TagSectionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockTag(JavadocParser.BlockTagContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockTagName(JavadocParser.BlockTagNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockTagContent(JavadocParser.BlockTagContentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockTagText(JavadocParser.BlockTagTextContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInlineTag(JavadocParser.InlineTagContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInlineTagName(JavadocParser.InlineTagNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInlineTagContent(JavadocParser.InlineTagContentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBraceExpression(JavadocParser.BraceExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBraceContent(JavadocParser.BraceContentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBraceText(JavadocParser.BraceTextContext ctx) { return visitChildren(ctx); }
}
@@ -0,0 +1,230 @@
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
import org.antlr.v4.runtime.tree.ParseTreeListener;
/**
* This interface defines a complete listener for a parse tree produced by
* {@link JavadocParser}.
*/
public interface JavadocParserListener extends ParseTreeListener {
/**
* Enter a parse tree produced by {@link JavadocParser#documentation}.
* @param ctx the parse tree
*/
void enterDocumentation(JavadocParser.DocumentationContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#documentation}.
* @param ctx the parse tree
*/
void exitDocumentation(JavadocParser.DocumentationContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#documentationContent}.
* @param ctx the parse tree
*/
void enterDocumentationContent(JavadocParser.DocumentationContentContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#documentationContent}.
* @param ctx the parse tree
*/
void exitDocumentationContent(JavadocParser.DocumentationContentContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#skipWhitespace}.
* @param ctx the parse tree
*/
void enterSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#skipWhitespace}.
* @param ctx the parse tree
*/
void exitSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#description}.
* @param ctx the parse tree
*/
void enterDescription(JavadocParser.DescriptionContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#description}.
* @param ctx the parse tree
*/
void exitDescription(JavadocParser.DescriptionContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionLine}.
* @param ctx the parse tree
*/
void enterDescriptionLine(JavadocParser.DescriptionLineContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionLine}.
* @param ctx the parse tree
*/
void exitDescriptionLine(JavadocParser.DescriptionLineContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionLineStart}.
* @param ctx the parse tree
*/
void enterDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionLineStart}.
* @param ctx the parse tree
*/
void exitDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionLineNoSpaceNoAt}.
* @param ctx the parse tree
*/
void enterDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionLineNoSpaceNoAt}.
* @param ctx the parse tree
*/
void exitDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionLineElement}.
* @param ctx the parse tree
*/
void enterDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionLineElement}.
* @param ctx the parse tree
*/
void exitDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionLineText}.
* @param ctx the parse tree
*/
void enterDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionLineText}.
* @param ctx the parse tree
*/
void exitDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#descriptionNewline}.
* @param ctx the parse tree
*/
void enterDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#descriptionNewline}.
* @param ctx the parse tree
*/
void exitDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#tagSection}.
* @param ctx the parse tree
*/
void enterTagSection(JavadocParser.TagSectionContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#tagSection}.
* @param ctx the parse tree
*/
void exitTagSection(JavadocParser.TagSectionContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#blockTag}.
* @param ctx the parse tree
*/
void enterBlockTag(JavadocParser.BlockTagContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#blockTag}.
* @param ctx the parse tree
*/
void exitBlockTag(JavadocParser.BlockTagContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#blockTagName}.
* @param ctx the parse tree
*/
void enterBlockTagName(JavadocParser.BlockTagNameContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#blockTagName}.
* @param ctx the parse tree
*/
void exitBlockTagName(JavadocParser.BlockTagNameContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#blockTagContent}.
* @param ctx the parse tree
*/
void enterBlockTagContent(JavadocParser.BlockTagContentContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#blockTagContent}.
* @param ctx the parse tree
*/
void exitBlockTagContent(JavadocParser.BlockTagContentContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#blockTagText}.
* @param ctx the parse tree
*/
void enterBlockTagText(JavadocParser.BlockTagTextContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#blockTagText}.
* @param ctx the parse tree
*/
void exitBlockTagText(JavadocParser.BlockTagTextContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#blockTagTextElement}.
* @param ctx the parse tree
*/
void enterBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#blockTagTextElement}.
* @param ctx the parse tree
*/
void exitBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#inlineTag}.
* @param ctx the parse tree
*/
void enterInlineTag(JavadocParser.InlineTagContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#inlineTag}.
* @param ctx the parse tree
*/
void exitInlineTag(JavadocParser.InlineTagContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#inlineTagName}.
* @param ctx the parse tree
*/
void enterInlineTagName(JavadocParser.InlineTagNameContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#inlineTagName}.
* @param ctx the parse tree
*/
void exitInlineTagName(JavadocParser.InlineTagNameContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#inlineTagContent}.
* @param ctx the parse tree
*/
void enterInlineTagContent(JavadocParser.InlineTagContentContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#inlineTagContent}.
* @param ctx the parse tree
*/
void exitInlineTagContent(JavadocParser.InlineTagContentContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#braceExpression}.
* @param ctx the parse tree
*/
void enterBraceExpression(JavadocParser.BraceExpressionContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#braceExpression}.
* @param ctx the parse tree
*/
void exitBraceExpression(JavadocParser.BraceExpressionContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#braceContent}.
* @param ctx the parse tree
*/
void enterBraceContent(JavadocParser.BraceContentContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#braceContent}.
* @param ctx the parse tree
*/
void exitBraceContent(JavadocParser.BraceContentContext ctx);
/**
* Enter a parse tree produced by {@link JavadocParser#braceText}.
* @param ctx the parse tree
*/
void enterBraceText(JavadocParser.BraceTextContext ctx);
/**
* Exit a parse tree produced by {@link JavadocParser#braceText}.
* @param ctx the parse tree
*/
void exitBraceText(JavadocParser.BraceTextContext ctx);
}
@@ -0,0 +1,145 @@
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
/**
* This interface defines a complete generic visitor for a parse tree produced
* by {@link JavadocParser}.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public interface JavadocParserVisitor<T> extends ParseTreeVisitor<T> {
/**
* Visit a parse tree produced by {@link JavadocParser#documentation}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDocumentation(JavadocParser.DocumentationContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#documentationContent}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDocumentationContent(JavadocParser.DocumentationContentContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#skipWhitespace}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#description}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescription(JavadocParser.DescriptionContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionLine}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionLine(JavadocParser.DescriptionLineContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionLineStart}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionLineNoSpaceNoAt}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionLineElement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionLineText}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#descriptionNewline}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#tagSection}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTagSection(JavadocParser.TagSectionContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#blockTag}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockTag(JavadocParser.BlockTagContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#blockTagName}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockTagName(JavadocParser.BlockTagNameContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#blockTagContent}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockTagContent(JavadocParser.BlockTagContentContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#blockTagText}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockTagText(JavadocParser.BlockTagTextContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#blockTagTextElement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#inlineTag}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInlineTag(JavadocParser.InlineTagContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#inlineTagName}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInlineTagName(JavadocParser.InlineTagNameContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#inlineTagContent}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInlineTagContent(JavadocParser.InlineTagContentContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#braceExpression}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBraceExpression(JavadocParser.BraceExpressionContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#braceContent}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBraceContent(JavadocParser.BraceContentContext ctx);
/**
* Visit a parse tree produced by {@link JavadocParser#braceText}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBraceText(JavadocParser.BraceTextContext ctx);
}
@@ -170,7 +170,11 @@ public class EditorFragment extends BaseFragment implements EditorEventListener
}
public void setDiagnostics(List<Diagnostic> diags) {
if(mBinding.editor != null && diags != null) {
if(diags == null && mBinding.editor != null) {
mBinding.editor.getEditorLanguage().getAnalyzer().updateDiagnostics(new HashMap<Integer, Map<Integer, Diagnostic>>());
return;
}
if(mBinding.editor != null) {
Map<Integer, Map<Integer, Diagnostic>> map = new HashMap<>();
for(int i=0;i<diags.size();i++) {
final Diagnostic d = diags.get(i);
@@ -44,8 +44,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import org.eclipse.lsp4j.CodeAction;
import org.eclipse.lsp4j.Command;
import org.eclipse.lsp4j.Diagnostic;
@@ -63,10 +63,6 @@ import org.eclipse.lsp4j.SignatureHelp;
import org.eclipse.lsp4j.SignatureInformation;
import org.eclipse.lsp4j.TextEdit;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import java.util.function.Consumer;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.ExecutionException;
/**
* AndroidIDE specific implementation of the LanguageClient
@@ -22,6 +22,8 @@ public class ConstantsBridge {
// Real password is gradle-api@admin@androidide
public static final String GRADLE_API_ZIP_PASSWORD_HASH = "b50b462f8e8c5789f32428d7e1967da2";
// Always compared in lowercase
public static final String CUSTOM_COMMENT_WARNING_TOKEN = "#warn ";
public static final String VIRTUAL_KEYS =
"["
@@ -142,7 +142,8 @@ public class JavaHighlighter implements Highlighter {
case JavaLexer.SHORT:
sb.append(token.getText(), new ForegroundColorSpan(scheme.getColor(EditorColorScheme.TYPE_NAME)), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
break;
case JavaLexer.COMMENT :
case JavaLexer.JAVADOC_COMMENT :
case JavaLexer.BLOCK_COMMENT :
case JavaLexer.LINE_COMMENT :
sb.append(token.getText(), new ForegroundColorSpan(scheme.getColor(EditorColorScheme.COMMENT)), SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE);
break;
@@ -1,10 +1,12 @@
package com.itsaky.androidide.syntax.lexer.impls.java;
import com.itsaky.androidide.antlr4.java.JavaLexer;
import com.itsaky.androidide.models.ConstantsBridge;
import com.itsaky.androidide.syntax.lexer.Lexer;
import com.itsaky.androidide.syntax.lexer.impls.BaseJavaLexer;
import com.itsaky.androidide.syntax.lexer.tokens.Token;
import com.itsaky.androidide.syntax.lexer.tokens.TokenType;
import com.itsaky.androidide.utils.LSPUtils;
import com.itsaky.androidide.utils.Logger;
import com.itsaky.lsp.SemanticHighlight;
import com.itsaky.lsp.services.IDELanguageServer;
@@ -16,13 +18,14 @@ import io.github.rosemoe.editor.widget.EditorColorScheme;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
import org.antlr.v4.runtime.CharStreams;
import org.eclipse.lsp4j.Diagnostic;
import org.eclipse.lsp4j.DiagnosticTag;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.Range;
@@ -30,6 +33,7 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn
private SemanticHighlight highlights;
private Map<Integer, Map<Integer, Diagnostic>> diagnostics = new HashMap<>();
private final Map<Integer, Map<Integer, Diagnostic>> customDiagnostics = new HashMap<>();
@Override
public void setSemanticHighlights(SemanticHighlight highlights) {
@@ -49,18 +53,6 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn
lexer.maxSwitch = lexer.currSwitch;
colors.determine(lexer.lastLine);
for(Map.Entry<Integer, Map<Integer, Diagnostic>> entry1 : diagnostics.entrySet()) {
for(Map.Entry<Integer, Diagnostic> entry2 : entry1.getValue().entrySet()) {
final Diagnostic diag = entry2.getValue();
final Range range = diag.getRange();
final Position start = range.getStart();
final Position end = range.getEnd();
colors.markProblemRegion(getDiagnosticSpanFlag(diag), start.getLine(), start.getCharacter(), end.getLine(), end.getCharacter());
}
}
colors.setSuppressSwitch(lexer.maxSwitch + 10);
colors.setHexColors(lexer.lineColors);
}
@@ -106,25 +98,10 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn
.map(d -> d.getValue())
.collect(Collectors.toList());
}
private int getDiagnosticSpanFlag (final Diagnostic diagnostic) {
if(diagnostic.getTags() != null && diagnostic.getTags().contains(DiagnosticTag.Deprecated)) {
return Span.FLAG_DEPRECATED;
}
switch (diagnostic.getSeverity()) {
case Error :
return Span.FLAG_ERROR;
case Warning :
return Span.FLAG_WARNING;
case Hint :
return Span.FLAG_HINT;
case Information :
return Span.FLAG_INFO;
default :
return 0;
}
@Override
public Map<Integer, Diagnostic> getDiagnosticsAtLine(int line) {
return diagnostics.get(line);
}
public class JavaLexerAnalyzer extends BaseJavaLexer implements Lexer {
@@ -321,12 +298,34 @@ public class JavaLexerImpl extends io.github.rosemoe.editor.langs.AbstractCodeAn
span = colors.addIfNeeded(line, column, EditorColorScheme.TYPE_NAME);
wasClassName = true;
break;
case JavaLexer.COMMENT :
case JavaLexer.JAVADOC_COMMENT :
// TODO Highlight javadoc
break;
case JavaLexer.BLOCK_COMMENT :
type = TokenType.COMMENT;
span = colors.addIfNeeded(line, column, EditorColorScheme.COMMENT);
break;
case JavaLexer.LINE_COMMENT :
type = TokenType.COMMENT;
span = colors.addIfNeeded(line, column, EditorColorScheme.COMMENT);
wasClassName = false;
String lineComment = currentToken.getText();
if(lineComment != null) {
lineComment = lineComment.trim();
if(lineComment.startsWith("//")) {
lineComment = lineComment.substring(2).trim();
}
final String text = new String (lineComment.toCharArray());
lineComment = lineComment.toLowerCase(Locale.getDefault());
if(lineComment.startsWith("todo ")) {
diagnostics.put(line, Collections.singletonMap(column, LSPUtils.newInfoDiagnostic(line, column, currentToken.getText().length(), text, currentToken.getText())));
} else if (lineComment.startsWith(ConstantsBridge.CUSTOM_COMMENT_WARNING_TOKEN)) {
diagnostics.put(line, Collections.singletonMap(column, LSPUtils.newWarningDiagnostic(line, column, currentToken.getText().length(), text, currentToken.getText())));
}
}
break;
case JavaLexer.AT :
type = TokenType.ANNOTATION;
@@ -1,5 +1,7 @@
package com.itsaky.androidide.utils;
import org.eclipse.lsp4j.Diagnostic;
import org.eclipse.lsp4j.DiagnosticSeverity;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.Range;
@@ -28,4 +30,31 @@ public class LSPUtils {
return LSPUtils.isEqual(r1.getStart(), r2.getStart())
&& LSPUtils.isEqual(r1.getEnd(), r2.getEnd());
}
public static Diagnostic newInfoDiagnostic(int line, int column, int length, String message, String text) {
final Diagnostic diag = new Diagnostic();
diag.setCode("todo");
diag.setMessage(message);
diag.setRange(getSingleLineRange(line, column, length));
diag.setSeverity(DiagnosticSeverity.Information);
diag.setSource(text);
return diag;
}
public static Diagnostic newWarningDiagnostic(int line, int column, int length, String message, String text) {
final Diagnostic diag = new Diagnostic();
diag.setCode("custom_warning");
diag.setMessage(message);
diag.setRange(getSingleLineRange(line, column, length));
diag.setSeverity(DiagnosticSeverity.Warning);
diag.setSource(text);
return diag;
}
public static Range getSingleLineRange(int line, int column, int length) {
final Range range = new Range();
range.setStart(new Position(line, column));
range.setEnd(new Position(line, column + length));
return range;
}
}
@@ -62,6 +62,13 @@ public interface CodeAnalyzer {
*/
List<Diagnostic> findDiagnosticsContainingLine(int line);
/**
* Get diagnostics at the specified line.
*
* @return A map containing the diagnostics mapped by their columns
*/
Map<Integer, Diagnostic> getDiagnosticsAtLine(int line);
/**
* Analyze spans for the given input
*
@@ -4,6 +4,8 @@ import io.github.rosemoe.editor.interfaces.CodeAnalyzer;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.lsp4j.Diagnostic;
import java.util.Map;
import java.util.HashMap;
public abstract class AbstractCodeAnalyzer implements CodeAnalyzer {
@@ -16,4 +18,9 @@ public abstract class AbstractCodeAnalyzer implements CodeAnalyzer {
public List<Diagnostic> findDiagnosticsContainingLine(int line) {
return new ArrayList<Diagnostic>();
}
@Override
public Map<Integer, Diagnostic> getDiagnosticsAtLine(int line) {
return new HashMap<Integer, Diagnostic>();
}
}
@@ -270,7 +270,6 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
private Paint mPaint;
private Paint mPaintOther;
private Paint mPaintGraph;
private Path mPath;
private char[] mBuffer;
private char[] mBuffer2;
private Matrix mMatrix;
@@ -545,7 +544,6 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
mRightHandle = new RectF();
mVerticalScrollBar = new RectF();
mHorizontalScrollBar = new RectF();
mPath = new Path();
mDividerMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, Resources.getSystem().getDisplayMetrics());
mDividerWidth = mDividerMargin;
mInsertSelWidth = mDividerWidth / 2;
@@ -1284,8 +1282,6 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
* @param postDrawCursor Cursors to be drawn later
*/
private void drawRows(Canvas canvas, float offset, LongArrayList postDrawLineNumbers, List<CursorPaintAction> postDrawCursor, LongArrayList postDrawCurrentLines, MutableInt requiredFirstLn) {
final float waveLength = getDpUnit() * 10;
final float amplitude = getDpUnit() * 4;
RowIterator rowIterator = mLayout.obtainRowIterator(getFirstVisibleRow());
List<Span> temporaryEmptySpans = null;
List<List<Span>> spanMap = mSpanner.getResult().getSpanMap();
@@ -1388,24 +1384,9 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
}
spans = temporaryEmptySpans;
}
float phi = 0f;
while (spanOffset + 1 < spans.size()) {
if (spans.get(spanOffset + 1).column <= firstVisibleChar) {
// Update phi
Span span = spans.get(spanOffset);
if (span.problemFlags > 0 && Integer.highestOneBit(span.problemFlags) != Span.FLAG_DEPRECATED) {
float lineWidth;
int spanEnd = Math.min(rowInf.endColumn, spans.get(spanOffset + 1).column);
if (isWordwrap()) {
lineWidth = measureText(mBuffer, Math.max(firstVisibleChar, span.column), spanEnd - Math.max(firstVisibleChar, span.column)) + phi;
} else {
lineWidth = measureText(mBuffer, span.column, spanEnd - span.column) + phi;
}
int waveCount = (int) Math.ceil(lineWidth / waveLength);
phi = waveLength - (waveCount * waveLength - lineWidth);
} else {
phi = 0f;
}
spanOffset++;
} else {
break;
@@ -1431,59 +1412,6 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
drawColor(canvas, span.underlineColor, mRect);
}
if (span.problemFlags > 0 && Integer.highestOneBit(span.problemFlags) != Span.FLAG_DEPRECATED) {
int color = 0;
switch (Integer.highestOneBit(span.problemFlags)) {
case Span.FLAG_ERROR:
color = mColors.getColor(EditorColorScheme.DIAGNOSTIC_ERROR);
break;
case Span.FLAG_WARNING:
color = mColors.getColor(EditorColorScheme.DIAGNOSTIC_WARNING);
break;
case Span.FLAG_INFO:
color = mColors.getColor(EditorColorScheme.DIAGNOSTIC_INFO);
break;
case Span.FLAG_HINT:
color = mColors.getColor(EditorColorScheme.DIAGNOSTIC_HINT);
break;
}
if (color != 0 && span.column >= 0 && spanEnd - span.column >= 0) {
// Start and end X offset
float startOffset;
float lineWidth;
if (isWordwrap()) {
startOffset = measureTextRegionOffset() + measureText(mBuffer, firstVisibleChar, Math.max(0, span.column - firstVisibleChar)) - getOffsetX();
lineWidth = measureText(mBuffer, Math.max(firstVisibleChar, span.column), spanEnd - Math.max(firstVisibleChar, span.column)) + phi;
} else {
startOffset = measureTextRegionOffset() + measureText(mBuffer, 0, span.column) - getOffsetX();
lineWidth = measureText(mBuffer, span.column, spanEnd - span.column) + phi;
}
float centerY = getRowBottom(row) - getOffsetY() - amplitude;
// Clip region due not to draw outside the horizontal region
canvas.save();
canvas.clipRect(startOffset, 0, startOffset + lineWidth, canvas.getHeight());
canvas.translate(startOffset - phi, centerY);
// Draw waves
mPath.reset();
mPath.moveTo(0, 0);
int waveCount = (int) Math.ceil(lineWidth / waveLength);
for (int i = 0; i < waveCount; i++) {
mPath.quadTo(waveLength * i + waveLength / 4, amplitude, waveLength * i + waveLength / 2, 0);
mPath.quadTo(waveLength * i + waveLength * 3 / 4, -amplitude, waveLength * i + waveLength, 0);
}
phi = waveLength - (waveCount * waveLength - lineWidth);
// Draw path
mPaint.setStrokeWidth(getDpUnit() * 1.8f);
mPaintOther.setStyle(Paint.Style.STROKE);
mPaintOther.setColor(color);
canvas.drawPath(mPath, mPaintOther);
canvas.restore();
}
mPaintOther.setStyle(Paint.Style.FILL);
} else {
phi = 0f;
}
paintingOffset += width;
if (paintEnd == lastVisibleChar) {
@@ -1553,6 +1481,36 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
}
}
final Paint.Style style = mPaint.getStyle();
final float stroke = mPaint.getStrokeWidth();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(getDpUnit() * 1.4f);
final List<Diagnostic> diags = getEditorLanguage().getAnalyzer().findDiagnosticsContainingLine(line);
if(diags != null && diags.size() > 0) {
for(int i=0;i<diags.size();i++) {
Diagnostic d = diags.get(i);
if(d == null) continue;
int startCol = d.getRange().getStart().getCharacter();
int endCol = d.getRange().getEnd().getCharacter();
if(line > d.getRange().getStart().getCharacter()) startCol = 0;
if(line > d.getRange().getEnd().getCharacter()) endCol = 0;
final int paintStart = Math.max(firstVisibleChar, startCol);
final int paintEnd = Math.min(lastVisibleChar, endCol);
final float width = measureText(mBuffer, paintStart, paintEnd - paintStart);
final RectF r = new RectF();
r.bottom = getRowBottom(line) - getOffsetY() - mDpUnit * 1;
r.top = r.bottom - getRowHeight() * 0.2f;
r.left = paintingOffset + measureText(mBuffer, firstVisibleChar, paintStart - firstVisibleChar);
r.right = r.left + width;
mPaint.setColor(diagnosticColor(d.getSeverity()));
drawDiagnostics(r, canvas, mPaint);
}
}
mPaint.setStyle(style);
mPaint.setStrokeWidth(stroke);
// Draw cursors
if (mCursor.isSelected()) {
if (mTextActionPresenter.shouldShowCursor()) {
@@ -1572,6 +1530,29 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
}
}
private void drawDiagnostics(RectF rect, Canvas canvas, Paint paint) {
final Path path = new Path();
final float right = rect.right;
final float bottom = rect.bottom;
final float waveLength = getDpUnit() * 5f;
final float halfLength = waveLength / 2;
final float waveAmplitude = getDpUnit() * 4f;
path.moveTo(rect.left, rect.bottom);
float x = rect.left;
while (right > x) {
path.quadTo(x + halfLength, bottom - waveAmplitude, x + waveLength, bottom);
x += waveLength;
path.quadTo(x + halfLength, bottom + waveAmplitude, x + waveLength, bottom);
x += waveLength;
if(x > right) {
x = right;
}
}
canvas.drawPath(path, paint);
}
private void drawRowBackground(Canvas canvas, int color, int row, int right) {
mRect.top = getRowTop(row) - getOffsetY();
@@ -1639,7 +1620,7 @@ public class CodeEditor extends View implements ContentListener, TextAnalyzer.Ca
case Error : id = EditorColorScheme.DIAGNOSTIC_ERROR; break;
case Warning : id = EditorColorScheme.DIAGNOSTIC_WARNING; break;
case Information : id = EditorColorScheme.DIAGNOSTIC_INFO; break;
default : id = EditorColorScheme.DIAGNOSTIC_ERROR; break;
default : id = EditorColorScheme.DIAGNOSTIC_HINT; break;
}
return mColors.getColor(id);
}