Fixed and added test for the expression parser.
diff --git a/grammerBuilder/BindingExpression.g4 b/grammerBuilder/BindingExpression.g4
index 85d7631..f406bec 100644
--- a/grammerBuilder/BindingExpression.g4
+++ b/grammerBuilder/BindingExpression.g4
@@ -5,7 +5,6 @@
grammar BindingExpression;
bindingSyntax
-// : '{' expression defaults? '}'
: expression defaults?
;
@@ -15,11 +14,6 @@
constantValue
: literal
| ResourceReference
- | constantExpression
- ;
-
-constantExpression
- : constantExpression '.' Identifier
| identifier
;
@@ -31,15 +25,15 @@
| identifier # Primary
| classExtraction # Primary
| ResourceReference # Resource
- | typeArguments (explicitGenericInvocationSuffix | 'this' arguments) # GenericCall
+// | typeArguments (explicitGenericInvocationSuffix | 'this' arguments) # GenericCall
| expression '.' Identifier # DotOp
// | expression '.' 'this' # ThisReference
- | expression '.' explicitGenericInvocation # ExplicitGenericInvocationOp
+// | expression '.' explicitGenericInvocation # ExplicitGenericInvocationOp
| expression '[' expression ']' # BracketOp
| target=expression '.' methodName=Identifier '(' args=expressionList? ')' # MethodInvocation
| '(' type ')' expression # CastOp
- | ('+'|'-') expression # UnaryOp
- | ('~'|'!') expression # UnaryOp
+ | op=('+'|'-') expression # UnaryOp
+ | op=('~'|'!') expression # UnaryOp
| left=expression op=('*'|'/'|'%') right=expression # MathOp
| left=expression op=('+'|'-') right=expression # MathOp
| left=expression op=('<<' | '>>>' | '>>') right=expression # BitShiftOp
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpression.tokens b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpression.tokens
index 2e6950f..5a9817d 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpression.tokens
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpression.tokens
@@ -59,8 +59,8 @@
'class'=40
'>='=39
'~'=38
-'=='=37
-'/'=36
+'/'=37
+'=='=36
'??'=35
'null'=51
'>'=34
@@ -69,8 +69,8 @@
'&&'=32
'='=31
'+'=30
-')'=29
-'.'=28
+'.'=29
+')'=28
'byte'=27
'^'=26
'%'=25
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
index ed390b4..b20a504 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
@@ -83,19 +83,6 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
@Override public void enterMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { }
/**
* {@inheritDoc}
@@ -109,6 +96,19 @@
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
/**
* {@inheritDoc}
@@ -304,19 +304,6 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
@Override public void enterTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { }
/**
* {@inheritDoc}
@@ -343,19 +330,6 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
@Override public void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
/**
* {@inheritDoc}
@@ -408,19 +382,6 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
@Override public void enterQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { }
/**
* {@inheritDoc}
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
index aa91ac9..87a460a 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
@@ -59,7 +59,7 @@
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { return visitChildren(ctx); }
+ @Override public Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
@@ -67,7 +67,7 @@
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { return visitChildren(ctx); }
+ @Override public Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
@@ -195,14 +195,6 @@
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx) { return visitChildren(ctx); }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
@Override public Result visitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { return visitChildren(ctx); }
/**
@@ -219,14 +211,6 @@
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx) { return visitChildren(ctx); }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
@Override public Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { return visitChildren(ctx); }
/**
@@ -259,14 +243,6 @@
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx) { return visitChildren(ctx); }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
@Override public Result visitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { return visitChildren(ctx); }
/**
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.java
index badb7f6..43f55c9 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.java
@@ -124,7 +124,7 @@
}
public static final String _serializedATN =
- "\3\uaf6f\u8320\u479d\ub75c\u4880\u1605\u191c\uab37\29\u0343\b\1\4\2\t"+
+ "\3\uaf6f\u8320\u479d\ub75c\u4880\u1605\u191c\uab37\29\u0375\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"+
@@ -143,7 +143,7 @@
"\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27"+
"\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34"+
"\3\34\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3!\3\"\3\"\3"+
- "\"\3#\3#\3$\3$\3$\3%\3%\3&\3&\3&\3\'\3\'\3(\3(\3(\3)\3)\3)\3)\3)\3)\3"+
+ "\"\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3\'\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"+
".\5.\u016e\n.\3/\3/\5/\u0172\n/\3\60\3\60\5\60\u0176\n\60\3\61\3\61\5"+
"\61\u017a\n\61\3\62\3\62\5\62\u017e\n\62\3\63\3\63\3\64\3\64\3\64\5\64"+
@@ -170,90 +170,92 @@
"d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
"d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
"d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
- "d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\5d\u032b\nd\3e\3"+
- "e\7e\u032f\ne\fe\16e\u0332\13e\3f\3f\3f\3f\3f\3f\5f\u033a\nf\3g\3g\3g"+
- "\3g\3g\3g\5g\u0342\ng\2\2\2h\3\2\3\5\2\4\7\2\5\t\2\6\13\2\7\r\2\b\17\2"+
- "\t\21\2\n\23\2\13\25\2\f\27\2\r\31\2\16\33\2\17\35\2\20\37\2\21!\2\22"+
- "#\2\23%\2\24\'\2\25)\2\26+\2\27-\2\30/\2\31\61\2\32\63\2\33\65\2\34\67"+
- "\2\359\2\36;\2\37=\2 ?\2!A\2\"C\2#E\2$G\2%I\2&K\2\'M\2(O\2)Q\2*S\2+U\2"+
- ",W\2-Y\2.[\2/]\2\2_\2\2a\2\2c\2\2e\2\2g\2\2i\2\2k\2\2m\2\2o\2\2q\2\2s"+
- "\2\2u\2\2w\2\2y\2\2{\2\2}\2\2\177\2\2\u0081\2\2\u0083\2\2\u0085\2\2\u0087"+
- "\2\2\u0089\2\2\u008b\2\60\u008d\2\2\u008f\2\2\u0091\2\2\u0093\2\2\u0095"+
- "\2\2\u0097\2\2\u0099\2\2\u009b\2\2\u009d\2\2\u009f\2\2\u00a1\2\61\u00a3"+
- "\2\62\u00a5\2\2\u00a7\2\63\u00a9\2\64\u00ab\2\2\u00ad\2\2\u00af\2\2\u00b1"+
- "\2\2\u00b3\2\2\u00b5\2\2\u00b7\2\2\u00b9\2\65\u00bb\2\66\u00bd\2\2\u00bf"+
- "\2\2\u00c1\2\67\u00c3\28\u00c5\2\2\u00c7\2\2\u00c9\29\u00cb\2\2\u00cd"+
- "\2\2\3\2\32\4\2NNnn\3\2\63;\4\2ZZzz\5\2\62;CHch\3\2\629\4\2DDdd\3\2\62"+
- "\63\4\2GGgg\4\2--//\6\2FFHHffhh\4\2RRrr\4\2))^^\4\2$$^^\4\2^^bb\13\2$"+
- "$))^^bbddhhppttvv\3\2\62\65\6\2&&C\\aac|\4\2\2\u0101\ud802\udc01\3\2\ud802"+
- "\udc01\3\2\udc02\ue001\7\2&&\62;C\\aac|\5\2\13\f\16\17\"\"\5\2&&aac|\6"+
- "\2&&\62;aac|\u0367\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/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2"+
- "\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E"+
- "\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2"+
- "\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2\u008b\3"+
- "\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2"+
- "\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c9"+
- "\3\2\2\2\3\u00cf\3\2\2\2\5\u00d4\3\2\2\2\7\u00d8\3\2\2\2\t\u00da\3\2\2"+
- "\2\13\u00e0\3\2\2\2\r\u00e2\3\2\2\2\17\u00ea\3\2\2\2\21\u00ec\3\2\2\2"+
- "\23\u00ee\3\2\2\2\25\u00f0\3\2\2\2\27\u00f2\3\2\2\2\31\u00f4\3\2\2\2\33"+
- "\u00f6\3\2\2\2\35\u00f8\3\2\2\2\37\u00fc\3\2\2\2!\u00ff\3\2\2\2#\u0102"+
- "\3\2\2\2%\u0104\3\2\2\2\'\u0107\3\2\2\2)\u010c\3\2\2\2+\u0113\3\2\2\2"+
- "-\u011b\3\2\2\2/\u0121\3\2\2\2\61\u0124\3\2\2\2\63\u0129\3\2\2\2\65\u012b"+
- "\3\2\2\2\67\u012d\3\2\2\29\u0132\3\2\2\2;\u0134\3\2\2\2=\u0136\3\2\2\2"+
- "?\u0138\3\2\2\2A\u013a\3\2\2\2C\u013d\3\2\2\2E\u0140\3\2\2\2G\u0142\3"+
- "\2\2\2I\u0145\3\2\2\2K\u0147\3\2\2\2M\u014a\3\2\2\2O\u014c\3\2\2\2Q\u014f"+
- "\3\2\2\2S\u0155\3\2\2\2U\u0157\3\2\2\2W\u0162\3\2\2\2Y\u0164\3\2\2\2["+
- "\u016d\3\2\2\2]\u016f\3\2\2\2_\u0173\3\2\2\2a\u0177\3\2\2\2c\u017b\3\2"+
- "\2\2e\u017f\3\2\2\2g\u018b\3\2\2\2i\u018d\3\2\2\2k\u0199\3\2\2\2m\u019b"+
- "\3\2\2\2o\u019f\3\2\2\2q\u01a2\3\2\2\2s\u01a6\3\2\2\2u\u01aa\3\2\2\2w"+
- "\u01b4\3\2\2\2y\u01b8\3\2\2\2{\u01ba\3\2\2\2}\u01c0\3\2\2\2\177\u01ca"+
- "\3\2\2\2\u0081\u01ce\3\2\2\2\u0083\u01d0\3\2\2\2\u0085\u01d4\3\2\2\2\u0087"+
- "\u01de\3\2\2\2\u0089\u01e2\3\2\2\2\u008b\u01e6\3\2\2\2\u008d\u0203\3\2"+
- "\2\2\u008f\u0205\3\2\2\2\u0091\u0208\3\2\2\2\u0093\u020b\3\2\2\2\u0095"+
- "\u020f\3\2\2\2\u0097\u0211\3\2\2\2\u0099\u0213\3\2\2\2\u009b\u0223\3\2"+
- "\2\2\u009d\u0225\3\2\2\2\u009f\u0228\3\2\2\2\u00a1\u0233\3\2\2\2\u00a3"+
- "\u023d\3\2\2\2\u00a5\u023f\3\2\2\2\u00a7\u0241\3\2\2\2\u00a9\u024a\3\2"+
- "\2\2\u00ab\u0251\3\2\2\2\u00ad\u0257\3\2\2\2\u00af\u025b\3\2\2\2\u00b1"+
- "\u0261\3\2\2\2\u00b3\u026e\3\2\2\2\u00b5\u0270\3\2\2\2\u00b7\u0277\3\2"+
- "\2\2\u00b9\u0279\3\2\2\2\u00bb\u027e\3\2\2\2\u00bd\u028b\3\2\2\2\u00bf"+
- "\u0293\3\2\2\2\u00c1\u0296\3\2\2\2\u00c3\u029c\3\2\2\2\u00c5\u02ae\3\2"+
- "\2\2\u00c7\u032a\3\2\2\2\u00c9\u032c\3\2\2\2\u00cb\u0339\3\2\2\2\u00cd"+
- "\u0341\3\2\2\2\u00cf\u00d0\7n\2\2\u00d0\u00d1\7q\2\2\u00d1\u00d2\7p\2"+
- "\2\u00d2\u00d3\7i\2\2\u00d3\4\3\2\2\2\u00d4\u00d5\7@\2\2\u00d5\u00d6\7"+
- "@\2\2\u00d6\u00d7\7@\2\2\u00d7\6\3\2\2\2\u00d8\u00d9\7_\2\2\u00d9\b\3"+
- "\2\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7j\2\2\u00dc\u00dd\7q\2\2\u00dd"+
- "\u00de\7t\2\2\u00de\u00df\7v\2\2\u00df\n\3\2\2\2\u00e0\u00e1\7(\2\2\u00e1"+
- "\f\3\2\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7h\2\2\u00e5"+
- "\u00e6\7c\2\2\u00e6\u00e7\7w\2\2\u00e7\u00e8\7n\2\2\u00e8\u00e9\7v\2\2"+
- "\u00e9\16\3\2\2\2\u00ea\u00eb\7.\2\2\u00eb\20\3\2\2\2\u00ec\u00ed\7,\2"+
- "\2\u00ed\22\3\2\2\2\u00ee\u00ef\7]\2\2\u00ef\24\3\2\2\2\u00f0\u00f1\7"+
- "/\2\2\u00f1\26\3\2\2\2\u00f2\u00f3\7*\2\2\u00f3\30\3\2\2\2\u00f4\u00f5"+
- "\7<\2\2\u00f5\32\3\2\2\2\u00f6\u00f7\7>\2\2\u00f7\34\3\2\2\2\u00f8\u00f9"+
- "\7k\2\2\u00f9\u00fa\7p\2\2\u00fa\u00fb\7v\2\2\u00fb\36\3\2\2\2\u00fc\u00fd"+
- "\7#\2\2\u00fd\u00fe\7?\2\2\u00fe \3\2\2\2\u00ff\u0100\7>\2\2\u0100\u0101"+
- "\7?\2\2\u0101\"\3\2\2\2\u0102\u0103\7A\2\2\u0103$\3\2\2\2\u0104\u0105"+
- "\7>\2\2\u0105\u0106\7>\2\2\u0106&\3\2\2\2\u0107\u0108\7x\2\2\u0108\u0109"+
- "\7q\2\2\u0109\u010a\7k\2\2\u010a\u010b\7f\2\2\u010b(\3\2\2\2\u010c\u010d"+
- "\7f\2\2\u010d\u010e\7q\2\2\u010e\u010f\7w\2\2\u010f\u0110\7d\2\2\u0110"+
- "\u0111\7n\2\2\u0111\u0112\7g\2\2\u0112*\3\2\2\2\u0113\u0114\7d\2\2\u0114"+
- "\u0115\7q\2\2\u0115\u0116\7q\2\2\u0116\u0117\7n\2\2\u0117\u0118\7g\2\2"+
- "\u0118\u0119\7c\2\2\u0119\u011a\7p\2\2\u011a,\3\2\2\2\u011b\u011c\7h\2"+
- "\2\u011c\u011d\7n\2\2\u011d\u011e\7q\2\2\u011e\u011f\7c\2\2\u011f\u0120"+
- "\7v\2\2\u0120.\3\2\2\2\u0121\u0122\7@\2\2\u0122\u0123\7@\2\2\u0123\60"+
- "\3\2\2\2\u0124\u0125\7e\2\2\u0125\u0126\7j\2\2\u0126\u0127\7c\2\2\u0127"+
+ "d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
+ "d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
+ "d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\5d\u035d"+
+ "\nd\3e\3e\7e\u0361\ne\fe\16e\u0364\13e\3f\3f\3f\3f\3f\3f\5f\u036c\nf\3"+
+ "g\3g\3g\3g\3g\3g\5g\u0374\ng\2\2\2h\3\2\3\5\2\4\7\2\5\t\2\6\13\2\7\r\2"+
+ "\b\17\2\t\21\2\n\23\2\13\25\2\f\27\2\r\31\2\16\33\2\17\35\2\20\37\2\21"+
+ "!\2\22#\2\23%\2\24\'\2\25)\2\26+\2\27-\2\30/\2\31\61\2\32\63\2\33\65\2"+
+ "\34\67\2\359\2\36;\2\37=\2 ?\2!A\2\"C\2#E\2$G\2%I\2&K\2\'M\2(O\2)Q\2*"+
+ "S\2+U\2,W\2-Y\2.[\2/]\2\2_\2\2a\2\2c\2\2e\2\2g\2\2i\2\2k\2\2m\2\2o\2\2"+
+ "q\2\2s\2\2u\2\2w\2\2y\2\2{\2\2}\2\2\177\2\2\u0081\2\2\u0083\2\2\u0085"+
+ "\2\2\u0087\2\2\u0089\2\2\u008b\2\60\u008d\2\2\u008f\2\2\u0091\2\2\u0093"+
+ "\2\2\u0095\2\2\u0097\2\2\u0099\2\2\u009b\2\2\u009d\2\2\u009f\2\2\u00a1"+
+ "\2\61\u00a3\2\62\u00a5\2\2\u00a7\2\63\u00a9\2\64\u00ab\2\2\u00ad\2\2\u00af"+
+ "\2\2\u00b1\2\2\u00b3\2\2\u00b5\2\2\u00b7\2\2\u00b9\2\65\u00bb\2\66\u00bd"+
+ "\2\2\u00bf\2\2\u00c1\2\67\u00c3\28\u00c5\2\2\u00c7\2\2\u00c9\29\u00cb"+
+ "\2\2\u00cd\2\2\3\2\33\4\2NNnn\3\2\63;\4\2ZZzz\5\2\62;CHch\3\2\629\4\2"+
+ "DDdd\3\2\62\63\4\2GGgg\4\2--//\6\2FFHHffhh\4\2RRrr\3\2))\4\2))^^\4\2$"+
+ "$^^\4\2^^bb\13\2$$))^^bbddhhppttvv\3\2\62\65\6\2&&C\\aac|\4\2\2\u0101"+
+ "\ud802\udc01\3\2\ud802\udc01\3\2\udc02\ue001\7\2&&\62;C\\aac|\5\2\13\f"+
+ "\16\17\"\"\5\2&&aac|\6\2&&\62;aac|\u0399\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/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2"+
+ "\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2"+
+ "A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3"+
+ "\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2"+
+ "\2\2[\3\2\2\2\2\u008b\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a7"+
+ "\3\2\2\2\2\u00a9\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00c1\3\2\2"+
+ "\2\2\u00c3\3\2\2\2\2\u00c9\3\2\2\2\3\u00cf\3\2\2\2\5\u00d4\3\2\2\2\7\u00d8"+
+ "\3\2\2\2\t\u00da\3\2\2\2\13\u00e0\3\2\2\2\r\u00e2\3\2\2\2\17\u00ea\3\2"+
+ "\2\2\21\u00ec\3\2\2\2\23\u00ee\3\2\2\2\25\u00f0\3\2\2\2\27\u00f2\3\2\2"+
+ "\2\31\u00f4\3\2\2\2\33\u00f6\3\2\2\2\35\u00f8\3\2\2\2\37\u00fc\3\2\2\2"+
+ "!\u00ff\3\2\2\2#\u0102\3\2\2\2%\u0104\3\2\2\2\'\u0107\3\2\2\2)\u010c\3"+
+ "\2\2\2+\u0113\3\2\2\2-\u011b\3\2\2\2/\u0121\3\2\2\2\61\u0124\3\2\2\2\63"+
+ "\u0129\3\2\2\2\65\u012b\3\2\2\2\67\u012d\3\2\2\29\u0132\3\2\2\2;\u0134"+
+ "\3\2\2\2=\u0136\3\2\2\2?\u0138\3\2\2\2A\u013a\3\2\2\2C\u013d\3\2\2\2E"+
+ "\u0140\3\2\2\2G\u0142\3\2\2\2I\u0145\3\2\2\2K\u0148\3\2\2\2M\u014a\3\2"+
+ "\2\2O\u014c\3\2\2\2Q\u014f\3\2\2\2S\u0155\3\2\2\2U\u0157\3\2\2\2W\u0162"+
+ "\3\2\2\2Y\u0164\3\2\2\2[\u016d\3\2\2\2]\u016f\3\2\2\2_\u0173\3\2\2\2a"+
+ "\u0177\3\2\2\2c\u017b\3\2\2\2e\u017f\3\2\2\2g\u018b\3\2\2\2i\u018d\3\2"+
+ "\2\2k\u0199\3\2\2\2m\u019b\3\2\2\2o\u019f\3\2\2\2q\u01a2\3\2\2\2s\u01a6"+
+ "\3\2\2\2u\u01aa\3\2\2\2w\u01b4\3\2\2\2y\u01b8\3\2\2\2{\u01ba\3\2\2\2}"+
+ "\u01c0\3\2\2\2\177\u01ca\3\2\2\2\u0081\u01ce\3\2\2\2\u0083\u01d0\3\2\2"+
+ "\2\u0085\u01d4\3\2\2\2\u0087\u01de\3\2\2\2\u0089\u01e2\3\2\2\2\u008b\u01e6"+
+ "\3\2\2\2\u008d\u0203\3\2\2\2\u008f\u0205\3\2\2\2\u0091\u0208\3\2\2\2\u0093"+
+ "\u020b\3\2\2\2\u0095\u020f\3\2\2\2\u0097\u0211\3\2\2\2\u0099\u0213\3\2"+
+ "\2\2\u009b\u0223\3\2\2\2\u009d\u0225\3\2\2\2\u009f\u0228\3\2\2\2\u00a1"+
+ "\u0233\3\2\2\2\u00a3\u023d\3\2\2\2\u00a5\u023f\3\2\2\2\u00a7\u0241\3\2"+
+ "\2\2\u00a9\u024a\3\2\2\2\u00ab\u0251\3\2\2\2\u00ad\u0257\3\2\2\2\u00af"+
+ "\u025b\3\2\2\2\u00b1\u0261\3\2\2\2\u00b3\u026e\3\2\2\2\u00b5\u0270\3\2"+
+ "\2\2\u00b7\u0277\3\2\2\2\u00b9\u0279\3\2\2\2\u00bb\u027e\3\2\2\2\u00bd"+
+ "\u028b\3\2\2\2\u00bf\u0293\3\2\2\2\u00c1\u0296\3\2\2\2\u00c3\u029c\3\2"+
+ "\2\2\u00c5\u02ae\3\2\2\2\u00c7\u035c\3\2\2\2\u00c9\u035e\3\2\2\2\u00cb"+
+ "\u036b\3\2\2\2\u00cd\u0373\3\2\2\2\u00cf\u00d0\7n\2\2\u00d0\u00d1\7q\2"+
+ "\2\u00d1\u00d2\7p\2\2\u00d2\u00d3\7i\2\2\u00d3\4\3\2\2\2\u00d4\u00d5\7"+
+ "@\2\2\u00d5\u00d6\7@\2\2\u00d6\u00d7\7@\2\2\u00d7\6\3\2\2\2\u00d8\u00d9"+
+ "\7_\2\2\u00d9\b\3\2\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7j\2\2\u00dc\u00dd"+
+ "\7q\2\2\u00dd\u00de\7t\2\2\u00de\u00df\7v\2\2\u00df\n\3\2\2\2\u00e0\u00e1"+
+ "\7(\2\2\u00e1\f\3\2\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5"+
+ "\7h\2\2\u00e5\u00e6\7c\2\2\u00e6\u00e7\7w\2\2\u00e7\u00e8\7n\2\2\u00e8"+
+ "\u00e9\7v\2\2\u00e9\16\3\2\2\2\u00ea\u00eb\7.\2\2\u00eb\20\3\2\2\2\u00ec"+
+ "\u00ed\7,\2\2\u00ed\22\3\2\2\2\u00ee\u00ef\7]\2\2\u00ef\24\3\2\2\2\u00f0"+
+ "\u00f1\7/\2\2\u00f1\26\3\2\2\2\u00f2\u00f3\7*\2\2\u00f3\30\3\2\2\2\u00f4"+
+ "\u00f5\7<\2\2\u00f5\32\3\2\2\2\u00f6\u00f7\7>\2\2\u00f7\34\3\2\2\2\u00f8"+
+ "\u00f9\7k\2\2\u00f9\u00fa\7p\2\2\u00fa\u00fb\7v\2\2\u00fb\36\3\2\2\2\u00fc"+
+ "\u00fd\7#\2\2\u00fd\u00fe\7?\2\2\u00fe \3\2\2\2\u00ff\u0100\7>\2\2\u0100"+
+ "\u0101\7?\2\2\u0101\"\3\2\2\2\u0102\u0103\7A\2\2\u0103$\3\2\2\2\u0104"+
+ "\u0105\7>\2\2\u0105\u0106\7>\2\2\u0106&\3\2\2\2\u0107\u0108\7x\2\2\u0108"+
+ "\u0109\7q\2\2\u0109\u010a\7k\2\2\u010a\u010b\7f\2\2\u010b(\3\2\2\2\u010c"+
+ "\u010d\7f\2\2\u010d\u010e\7q\2\2\u010e\u010f\7w\2\2\u010f\u0110\7d\2\2"+
+ "\u0110\u0111\7n\2\2\u0111\u0112\7g\2\2\u0112*\3\2\2\2\u0113\u0114\7d\2"+
+ "\2\u0114\u0115\7q\2\2\u0115\u0116\7q\2\2\u0116\u0117\7n\2\2\u0117\u0118"+
+ "\7g\2\2\u0118\u0119\7c\2\2\u0119\u011a\7p\2\2\u011a,\3\2\2\2\u011b\u011c"+
+ "\7h\2\2\u011c\u011d\7n\2\2\u011d\u011e\7q\2\2\u011e\u011f\7c\2\2\u011f"+
+ "\u0120\7v\2\2\u0120.\3\2\2\2\u0121\u0122\7@\2\2\u0122\u0123\7@\2\2\u0123"+
+ "\60\3\2\2\2\u0124\u0125\7e\2\2\u0125\u0126\7j\2\2\u0126\u0127\7c\2\2\u0127"+
"\u0128\7t\2\2\u0128\62\3\2\2\2\u0129\u012a\7\'\2\2\u012a\64\3\2\2\2\u012b"+
"\u012c\7`\2\2\u012c\66\3\2\2\2\u012d\u012e\7d\2\2\u012e\u012f\7{\2\2\u012f"+
- "\u0130\7v\2\2\u0130\u0131\7g\2\2\u01318\3\2\2\2\u0132\u0133\7\60\2\2\u0133"+
- ":\3\2\2\2\u0134\u0135\7+\2\2\u0135<\3\2\2\2\u0136\u0137\7-\2\2\u0137>"+
- "\3\2\2\2\u0138\u0139\7?\2\2\u0139@\3\2\2\2\u013a\u013b\7(\2\2\u013b\u013c"+
+ "\u0130\7v\2\2\u0130\u0131\7g\2\2\u01318\3\2\2\2\u0132\u0133\7+\2\2\u0133"+
+ ":\3\2\2\2\u0134\u0135\7\60\2\2\u0135<\3\2\2\2\u0136\u0137\7-\2\2\u0137"+
+ ">\3\2\2\2\u0138\u0139\7?\2\2\u0139@\3\2\2\2\u013a\u013b\7(\2\2\u013b\u013c"+
"\7(\2\2\u013cB\3\2\2\2\u013d\u013e\7~\2\2\u013e\u013f\7~\2\2\u013fD\3"+
"\2\2\2\u0140\u0141\7@\2\2\u0141F\3\2\2\2\u0142\u0143\7A\2\2\u0143\u0144"+
- "\7A\2\2\u0144H\3\2\2\2\u0145\u0146\7\61\2\2\u0146J\3\2\2\2\u0147\u0148"+
- "\7?\2\2\u0148\u0149\7?\2\2\u0149L\3\2\2\2\u014a\u014b\7\u0080\2\2\u014b"+
+ "\7A\2\2\u0144H\3\2\2\2\u0145\u0146\7?\2\2\u0146\u0147\7?\2\2\u0147J\3"+
+ "\2\2\2\u0148\u0149\7\61\2\2\u0149L\3\2\2\2\u014a\u014b\7\u0080\2\2\u014b"+
"N\3\2\2\2\u014c\u014d\7@\2\2\u014d\u014e\7?\2\2\u014eP\3\2\2\2\u014f\u0150"+
"\7e\2\2\u0150\u0151\7n\2\2\u0151\u0152\7c\2\2\u0152\u0153\7u\2\2\u0153"+
"\u0154\7u\2\2\u0154R\3\2\2\2\u0155\u0156\7~\2\2\u0156T\3\2\2\2\u0157\u0158"+
@@ -330,38 +332,38 @@
"\7v\2\2\u022b\u022c\7t\2\2\u022c\u022d\7w\2\2\u022d\u0234\7g\2\2\u022e"+
"\u022f\7h\2\2\u022f\u0230\7c\2\2\u0230\u0231\7n\2\2\u0231\u0232\7u\2\2"+
"\u0232\u0234\7g\2\2\u0233\u022a\3\2\2\2\u0233\u022e\3\2\2\2\u0234\u00a2"+
- "\3\2\2\2\u0235\u0236\7)\2\2\u0236\u0237\5\u00a5S\2\u0237\u0238\7)\2\2"+
- "\u0238\u023e\3\2\2\2\u0239\u023a\7)\2\2\u023a\u023b\5\u00b1Y\2\u023b\u023c"+
- "\7)\2\2\u023c\u023e\3\2\2\2\u023d\u0235\3\2\2\2\u023d\u0239\3\2\2\2\u023e"+
- "\u00a4\3\2\2\2\u023f\u0240\n\r\2\2\u0240\u00a6\3\2\2\2\u0241\u0242\7b"+
- "\2\2\u0242\u0244\5\u00afX\2\u0243\u0245\5\u00afX\2\u0244\u0243\3\2\2\2"+
- "\u0245\u0246\3\2\2\2\u0246\u0244\3\2\2\2\u0246\u0247\3\2\2\2\u0247\u0248"+
- "\3\2\2\2\u0248\u0249\7b\2\2\u0249\u00a8\3\2\2\2\u024a\u024c\7$\2\2\u024b"+
- "\u024d\5\u00abV\2\u024c\u024b\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u024e"+
- "\3\2\2\2\u024e\u024f\7$\2\2\u024f\u00aa\3\2\2\2\u0250\u0252\5\u00adW\2"+
- "\u0251\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0251\3\2\2\2\u0253\u0254"+
- "\3\2\2\2\u0254\u00ac\3\2\2\2\u0255\u0258\n\16\2\2\u0256\u0258\5\u00b1"+
- "Y\2\u0257\u0255\3\2\2\2\u0257\u0256\3\2\2\2\u0258\u00ae\3\2\2\2\u0259"+
- "\u025c\n\17\2\2\u025a\u025c\5\u00b1Y\2\u025b\u0259\3\2\2\2\u025b\u025a"+
- "\3\2\2\2\u025c\u00b0\3\2\2\2\u025d\u025e\7^\2\2\u025e\u0262\t\20\2\2\u025f"+
- "\u0262\5\u00b3Z\2\u0260\u0262\5\u00b5[\2\u0261\u025d\3\2\2\2\u0261\u025f"+
- "\3\2\2\2\u0261\u0260\3\2\2\2\u0262\u00b2\3\2\2\2\u0263\u0264\7^\2\2\u0264"+
- "\u026f\5\177@\2\u0265\u0266\7^\2\2\u0266\u0267\5\177@\2\u0267\u0268\5"+
- "\177@\2\u0268\u026f\3\2\2\2\u0269\u026a\7^\2\2\u026a\u026b\5\u00b7\\\2"+
- "\u026b\u026c\5\177@\2\u026c\u026d\5\177@\2\u026d\u026f\3\2\2\2\u026e\u0263"+
- "\3\2\2\2\u026e\u0265\3\2\2\2\u026e\u0269\3\2\2\2\u026f\u00b4\3\2\2\2\u0270"+
- "\u0271\7^\2\2\u0271\u0272\7w\2\2\u0272\u0273\5w<\2\u0273\u0274\5w<\2\u0274"+
- "\u0275\5w<\2\u0275\u0276\5w<\2\u0276\u00b6\3\2\2\2\u0277\u0278\t\21\2"+
- "\2\u0278\u00b8\3\2\2\2\u0279\u027a\7p\2\2\u027a\u027b\7w\2\2\u027b\u027c"+
- "\7n\2\2\u027c\u027d\7n\2\2\u027d\u00ba\3\2\2\2\u027e\u0282\5\u00bd_\2"+
- "\u027f\u0281\5\u00bf`\2\u0280\u027f\3\2\2\2\u0281\u0284\3\2\2\2\u0282"+
+ "\3\2\2\2\u0235\u0236\t\r\2\2\u0236\u0237\5\u00a5S\2\u0237\u0238\t\r\2"+
+ "\2\u0238\u023e\3\2\2\2\u0239\u023a\t\r\2\2\u023a\u023b\5\u00b1Y\2\u023b"+
+ "\u023c\t\r\2\2\u023c\u023e\3\2\2\2\u023d\u0235\3\2\2\2\u023d\u0239\3\2"+
+ "\2\2\u023e\u00a4\3\2\2\2\u023f\u0240\n\16\2\2\u0240\u00a6\3\2\2\2\u0241"+
+ "\u0242\7b\2\2\u0242\u0244\5\u00afX\2\u0243\u0245\5\u00afX\2\u0244\u0243"+
+ "\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u0244\3\2\2\2\u0246\u0247\3\2\2\2\u0247"+
+ "\u0248\3\2\2\2\u0248\u0249\7b\2\2\u0249\u00a8\3\2\2\2\u024a\u024c\7$\2"+
+ "\2\u024b\u024d\5\u00abV\2\u024c\u024b\3\2\2\2\u024c\u024d\3\2\2\2\u024d"+
+ "\u024e\3\2\2\2\u024e\u024f\7$\2\2\u024f\u00aa\3\2\2\2\u0250\u0252\5\u00ad"+
+ "W\2\u0251\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0251\3\2\2\2\u0253"+
+ "\u0254\3\2\2\2\u0254\u00ac\3\2\2\2\u0255\u0258\n\17\2\2\u0256\u0258\5"+
+ "\u00b1Y\2\u0257\u0255\3\2\2\2\u0257\u0256\3\2\2\2\u0258\u00ae\3\2\2\2"+
+ "\u0259\u025c\n\20\2\2\u025a\u025c\5\u00b1Y\2\u025b\u0259\3\2\2\2\u025b"+
+ "\u025a\3\2\2\2\u025c\u00b0\3\2\2\2\u025d\u025e\7^\2\2\u025e\u0262\t\21"+
+ "\2\2\u025f\u0262\5\u00b3Z\2\u0260\u0262\5\u00b5[\2\u0261\u025d\3\2\2\2"+
+ "\u0261\u025f\3\2\2\2\u0261\u0260\3\2\2\2\u0262\u00b2\3\2\2\2\u0263\u0264"+
+ "\7^\2\2\u0264\u026f\5\177@\2\u0265\u0266\7^\2\2\u0266\u0267\5\177@\2\u0267"+
+ "\u0268\5\177@\2\u0268\u026f\3\2\2\2\u0269\u026a\7^\2\2\u026a\u026b\5\u00b7"+
+ "\\\2\u026b\u026c\5\177@\2\u026c\u026d\5\177@\2\u026d\u026f\3\2\2\2\u026e"+
+ "\u0263\3\2\2\2\u026e\u0265\3\2\2\2\u026e\u0269\3\2\2\2\u026f\u00b4\3\2"+
+ "\2\2\u0270\u0271\7^\2\2\u0271\u0272\7w\2\2\u0272\u0273\5w<\2\u0273\u0274"+
+ "\5w<\2\u0274\u0275\5w<\2\u0275\u0276\5w<\2\u0276\u00b6\3\2\2\2\u0277\u0278"+
+ "\t\22\2\2\u0278\u00b8\3\2\2\2\u0279\u027a\7p\2\2\u027a\u027b\7w\2\2\u027b"+
+ "\u027c\7n\2\2\u027c\u027d\7n\2\2\u027d\u00ba\3\2\2\2\u027e\u0282\5\u00bd"+
+ "_\2\u027f\u0281\5\u00bf`\2\u0280\u027f\3\2\2\2\u0281\u0284\3\2\2\2\u0282"+
"\u0280\3\2\2\2\u0282\u0283\3\2\2\2\u0283\u00bc\3\2\2\2\u0284\u0282\3\2"+
- "\2\2\u0285\u028c\t\22\2\2\u0286\u0287\n\23\2\2\u0287\u028c\6_\2\2\u0288"+
- "\u0289\t\24\2\2\u0289\u028a\t\25\2\2\u028a\u028c\6_\3\2\u028b\u0285\3"+
+ "\2\2\u0285\u028c\t\23\2\2\u0286\u0287\n\24\2\2\u0287\u028c\6_\2\2\u0288"+
+ "\u0289\t\25\2\2\u0289\u028a\t\26\2\2\u028a\u028c\6_\3\2\u028b\u0285\3"+
"\2\2\2\u028b\u0286\3\2\2\2\u028b\u0288\3\2\2\2\u028c\u00be\3\2\2\2\u028d"+
- "\u0294\t\26\2\2\u028e\u028f\n\23\2\2\u028f\u0294\6`\4\2\u0290\u0291\t"+
- "\24\2\2\u0291\u0292\t\25\2\2\u0292\u0294\6`\5\2\u0293\u028d\3\2\2\2\u0293"+
- "\u028e\3\2\2\2\u0293\u0290\3\2\2\2\u0294\u00c0\3\2\2\2\u0295\u0297\t\27"+
+ "\u0294\t\27\2\2\u028e\u028f\n\24\2\2\u028f\u0294\6`\4\2\u0290\u0291\t"+
+ "\25\2\2\u0291\u0292\t\26\2\2\u0292\u0294\6`\5\2\u0293\u028d\3\2\2\2\u0293"+
+ "\u028e\3\2\2\2\u0293\u0290\3\2\2\2\u0294\u00c0\3\2\2\2\u0295\u0297\t\30"+
"\2\2\u0296\u0295\3\2\2\2\u0297\u0298\3\2\2\2\u0298\u0296\3\2\2\2\u0298"+
"\u0299\3\2\2\2\u0299\u029a\3\2\2\2\u029a\u029b\ba\2\2\u029b\u00c2\3\2"+
"\2\2\u029c\u02a0\7B\2\2\u029d\u029e\5\u00c5c\2\u029e\u029f\7<\2\2\u029f"+
@@ -371,58 +373,72 @@
"\7f\2\2\u02a9\u02aa\7t\2\2\u02aa\u02ab\7q\2\2\u02ab\u02ac\7k\2\2\u02ac"+
"\u02af\7f\2\2\u02ad\u02af\5\u00bb^\2\u02ae\u02a6\3\2\2\2\u02ae\u02ad\3"+
"\2\2\2\u02af\u00c6\3\2\2\2\u02b0\u02b1\7c\2\2\u02b1\u02b2\7p\2\2\u02b2"+
- "\u02b3\7k\2\2\u02b3\u032b\7o\2\2\u02b4\u02b5\7c\2\2\u02b5\u02b6\7p\2\2"+
+ "\u02b3\7k\2\2\u02b3\u035d\7o\2\2\u02b4\u02b5\7c\2\2\u02b5\u02b6\7p\2\2"+
"\u02b6\u02b7\7k\2\2\u02b7\u02b8\7o\2\2\u02b8\u02b9\7c\2\2\u02b9\u02ba"+
- "\7v\2\2\u02ba\u02bb\7q\2\2\u02bb\u032b\7t\2\2\u02bc\u02bd\7c\2\2\u02bd"+
- "\u02be\7t\2\2\u02be\u02bf\7t\2\2\u02bf\u02c0\7c\2\2\u02c0\u032b\7{\2\2"+
- "\u02c1\u02c2\7c\2\2\u02c2\u02c3\7v\2\2\u02c3\u02c4\7v\2\2\u02c4\u032b"+
- "\7t\2\2\u02c5\u02c6\7d\2\2\u02c6\u02c7\7q\2\2\u02c7\u02c8\7q\2\2\u02c8"+
- "\u032b\7n\2\2\u02c9\u02ca\7e\2\2\u02ca\u02cb\7q\2\2\u02cb\u02cc\7n\2\2"+
- "\u02cc\u02cd\7q\2\2\u02cd\u032b\7t\2\2\u02ce\u02cf\7f\2\2\u02cf\u02d0"+
- "\7k\2\2\u02d0\u02d1\7o\2\2\u02d1\u02d2\7g\2\2\u02d2\u032b\7p\2\2\u02d3"+
- "\u02d4\7f\2\2\u02d4\u02d5\7t\2\2\u02d5\u02d6\7c\2\2\u02d6\u02d7\7y\2\2"+
- "\u02d7\u02d8\7c\2\2\u02d8\u02d9\7d\2\2\u02d9\u02da\7n\2\2\u02da\u032b"+
- "\7g\2\2\u02db\u02dc\7h\2\2\u02dc\u02dd\7t\2\2\u02dd\u02de\7c\2\2\u02de"+
- "\u02df\7e\2\2\u02df\u02e0\7v\2\2\u02e0\u02e1\7k\2\2\u02e1\u02e2\7q\2\2"+
- "\u02e2\u032b\7p\2\2\u02e3\u02e4\7k\2\2\u02e4\u032b\7f\2\2\u02e5\u02e6"+
- "\7k\2\2\u02e6\u02e7\7p\2\2\u02e7\u02e8\7v\2\2\u02e8\u02e9\7g\2\2\u02e9"+
- "\u02ea\7i\2\2\u02ea\u02eb\7g\2\2\u02eb\u032b\7t\2\2\u02ec\u02ed\7k\2\2"+
- "\u02ed\u02ee\7p\2\2\u02ee\u02ef\7v\2\2\u02ef\u02f0\7g\2\2\u02f0\u02f1"+
- "\7t\2\2\u02f1\u02f2\7r\2\2\u02f2\u02f3\7q\2\2\u02f3\u02f4\7n\2\2\u02f4"+
- "\u02f5\7c\2\2\u02f5\u02f6\7v\2\2\u02f6\u02f7\7q\2\2\u02f7\u032b\7t\2\2"+
- "\u02f8\u02f9\7n\2\2\u02f9\u02fa\7c\2\2\u02fa\u02fb\7{\2\2\u02fb\u02fc"+
- "\7q\2\2\u02fc\u02fd\7w\2\2\u02fd\u032b\7v\2\2\u02fe\u02ff\7o\2\2\u02ff"+
- "\u0300\7g\2\2\u0300\u0301\7p\2\2\u0301\u032b\7w\2\2\u0302\u0303\7o\2\2"+
- "\u0303\u0304\7k\2\2\u0304\u0305\7r\2\2\u0305\u0306\7o\2\2\u0306\u0307"+
- "\7c\2\2\u0307\u032b\7r\2\2\u0308\u0309\7r\2\2\u0309\u030a\7n\2\2\u030a"+
- "\u030b\7w\2\2\u030b\u030c\7t\2\2\u030c\u030d\7c\2\2\u030d\u030e\7n\2\2"+
- "\u030e\u032b\7u\2\2\u030f\u0310\7t\2\2\u0310\u0311\7c\2\2\u0311\u032b"+
- "\7y\2\2\u0312\u0313\7u\2\2\u0313\u0314\7v\2\2\u0314\u0315\7t\2\2\u0315"+
- "\u0316\7k\2\2\u0316\u0317\7p\2\2\u0317\u032b\7i\2\2\u0318\u0319\7u\2\2"+
- "\u0319\u031a\7v\2\2\u031a\u031b\7{\2\2\u031b\u031c\7n\2\2\u031c\u032b"+
- "\7g\2\2\u031d\u031e\7v\2\2\u031e\u031f\7t\2\2\u031f\u0320\7c\2\2\u0320"+
- "\u0321\7p\2\2\u0321\u0322\7u\2\2\u0322\u0323\7k\2\2\u0323\u0324\7v\2\2"+
- "\u0324\u0325\7k\2\2\u0325\u0326\7q\2\2\u0326\u032b\7p\2\2\u0327\u0328"+
- "\7z\2\2\u0328\u0329\7o\2\2\u0329\u032b\7n\2\2\u032a\u02b0\3\2\2\2\u032a"+
- "\u02b4\3\2\2\2\u032a\u02bc\3\2\2\2\u032a\u02c1\3\2\2\2\u032a\u02c5\3\2"+
- "\2\2\u032a\u02c9\3\2\2\2\u032a\u02ce\3\2\2\2\u032a\u02d3\3\2\2\2\u032a"+
- "\u02db\3\2\2\2\u032a\u02e3\3\2\2\2\u032a\u02e5\3\2\2\2\u032a\u02ec\3\2"+
- "\2\2\u032a\u02f8\3\2\2\2\u032a\u02fe\3\2\2\2\u032a\u0302\3\2\2\2\u032a"+
- "\u0308\3\2\2\2\u032a\u030f\3\2\2\2\u032a\u0312\3\2\2\2\u032a\u0318\3\2"+
- "\2\2\u032a\u031d\3\2\2\2\u032a\u0327\3\2\2\2\u032b\u00c8\3\2\2\2\u032c"+
- "\u0330\5\u00cbf\2\u032d\u032f\5\u00cdg\2\u032e\u032d\3\2\2\2\u032f\u0332"+
- "\3\2\2\2\u0330\u032e\3\2\2\2\u0330\u0331\3\2\2\2\u0331\u00ca\3\2\2\2\u0332"+
- "\u0330\3\2\2\2\u0333\u033a\t\30\2\2\u0334\u0335\n\23\2\2\u0335\u033a\6"+
- "f\6\2\u0336\u0337\t\24\2\2\u0337\u0338\t\25\2\2\u0338\u033a\6f\7\2\u0339"+
- "\u0333\3\2\2\2\u0339\u0334\3\2\2\2\u0339\u0336\3\2\2\2\u033a\u00cc\3\2"+
- "\2\2\u033b\u0342\t\31\2\2\u033c\u033d\n\23\2\2\u033d\u0342\6g\b\2\u033e"+
- "\u033f\t\24\2\2\u033f\u0340\t\25\2\2\u0340\u0342\6g\t\2\u0341\u033b\3"+
- "\2\2\2\u0341\u033c\3\2\2\2\u0341\u033e\3\2\2\2\u0342\u00ce\3\2\2\2:\2"+
- "\u016d\u0171\u0175\u0179\u017d\u0184\u0189\u018b\u0191\u0195\u0199\u019f"+
- "\u01a4\u01ae\u01b2\u01b8\u01bc\u01c4\u01c8\u01ce\u01d8\u01dc\u01e2\u01e6"+
- "\u01eb\u01ee\u01f1\u01f6\u01f9\u01fe\u0203\u020b\u0216\u021a\u021f\u0223"+
- "\u0233\u023d\u0246\u024c\u0253\u0257\u025b\u0261\u026e\u0282\u028b\u0293"+
- "\u0298\u02a0\u02ae\u032a\u0330\u0339\u0341\3\b\2\2";
+ "\7v\2\2\u02ba\u02bb\7q\2\2\u02bb\u035d\7t\2\2\u02bc\u02bd\7d\2\2\u02bd"+
+ "\u02be\7q\2\2\u02be\u02bf\7q\2\2\u02bf\u035d\7n\2\2\u02c0\u02c1\7e\2\2"+
+ "\u02c1\u02c2\7q\2\2\u02c2\u02c3\7n\2\2\u02c3\u02c4\7q\2\2\u02c4\u035d"+
+ "\7t\2\2\u02c5\u02c6\7e\2\2\u02c6\u02c7\7q\2\2\u02c7\u02c8\7n\2\2\u02c8"+
+ "\u02c9\7q\2\2\u02c9\u02ca\7t\2\2\u02ca\u02cb\7U\2\2\u02cb\u02cc\7v\2\2"+
+ "\u02cc\u02cd\7c\2\2\u02cd\u02ce\7v\2\2\u02ce\u02cf\7g\2\2\u02cf\u02d0"+
+ "\7N\2\2\u02d0\u02d1\7k\2\2\u02d1\u02d2\7u\2\2\u02d2\u035d\7v\2\2\u02d3"+
+ "\u02d4\7f\2\2\u02d4\u02d5\7k\2\2\u02d5\u02d6\7o\2\2\u02d6\u02d7\7g\2\2"+
+ "\u02d7\u035d\7p\2\2\u02d8\u02d9\7f\2\2\u02d9\u02da\7k\2\2\u02da\u02db"+
+ "\7o\2\2\u02db\u02dc\7g\2\2\u02dc\u02dd\7p\2\2\u02dd\u02de\7Q\2\2\u02de"+
+ "\u02df\7h\2\2\u02df\u02e0\7h\2\2\u02e0\u02e1\7u\2\2\u02e1\u02e2\7g\2\2"+
+ "\u02e2\u035d\7v\2\2\u02e3\u02e4\7f\2\2\u02e4\u02e5\7k\2\2\u02e5\u02e6"+
+ "\7o\2\2\u02e6\u02e7\7g\2\2\u02e7\u02e8\7p\2\2\u02e8\u02e9\7U\2\2\u02e9"+
+ "\u02ea\7k\2\2\u02ea\u02eb\7|\2\2\u02eb\u035d\7g\2\2\u02ec\u02ed\7f\2\2"+
+ "\u02ed\u02ee\7t\2\2\u02ee\u02ef\7c\2\2\u02ef\u02f0\7y\2\2\u02f0\u02f1"+
+ "\7c\2\2\u02f1\u02f2\7d\2\2\u02f2\u02f3\7n\2\2\u02f3\u035d\7g\2\2\u02f4"+
+ "\u02f5\7h\2\2\u02f5\u02f6\7t\2\2\u02f6\u02f7\7c\2\2\u02f7\u02f8\7e\2\2"+
+ "\u02f8\u02f9\7v\2\2\u02f9\u02fa\7k\2\2\u02fa\u02fb\7q\2\2\u02fb\u035d"+
+ "\7p\2\2\u02fc\u02fd\7k\2\2\u02fd\u035d\7f\2\2\u02fe\u02ff\7k\2\2\u02ff"+
+ "\u0300\7p\2\2\u0300\u0301\7v\2\2\u0301\u0302\7g\2\2\u0302\u0303\7i\2\2"+
+ "\u0303\u0304\7g\2\2\u0304\u035d\7t\2\2\u0305\u0306\7k\2\2\u0306\u0307"+
+ "\7p\2\2\u0307\u0308\7v\2\2\u0308\u0309\7C\2\2\u0309\u030a\7t\2\2\u030a"+
+ "\u030b\7t\2\2\u030b\u030c\7c\2\2\u030c\u035d\7{\2\2\u030d\u030e\7k\2\2"+
+ "\u030e\u030f\7p\2\2\u030f\u0310\7v\2\2\u0310\u0311\7g\2\2\u0311\u0312"+
+ "\7t\2\2\u0312\u0313\7r\2\2\u0313\u0314\7q\2\2\u0314\u0315\7n\2\2\u0315"+
+ "\u0316\7c\2\2\u0316\u0317\7v\2\2\u0317\u0318\7q\2\2\u0318\u035d\7t\2\2"+
+ "\u0319\u031a\7n\2\2\u031a\u031b\7c\2\2\u031b\u031c\7{\2\2\u031c\u031d"+
+ "\7q\2\2\u031d\u031e\7w\2\2\u031e\u035d\7v\2\2\u031f\u0320\7r\2\2\u0320"+
+ "\u0321\7n\2\2\u0321\u0322\7w\2\2\u0322\u0323\7t\2\2\u0323\u0324\7c\2\2"+
+ "\u0324\u0325\7n\2\2\u0325\u035d\7u\2\2\u0326\u0327\7u\2\2\u0327\u0328"+
+ "\7v\2\2\u0328\u0329\7c\2\2\u0329\u032a\7v\2\2\u032a\u032b\7g\2\2\u032b"+
+ "\u032c\7N\2\2\u032c\u032d\7k\2\2\u032d\u032e\7u\2\2\u032e\u032f\7v\2\2"+
+ "\u032f\u0330\7C\2\2\u0330\u0331\7p\2\2\u0331\u0332\7k\2\2\u0332\u0333"+
+ "\7o\2\2\u0333\u0334\7c\2\2\u0334\u0335\7v\2\2\u0335\u0336\7q\2\2\u0336"+
+ "\u035d\7t\2\2\u0337\u0338\7u\2\2\u0338\u0339\7v\2\2\u0339\u033a\7t\2\2"+
+ "\u033a\u033b\7k\2\2\u033b\u033c\7p\2\2\u033c\u035d\7i\2\2\u033d\u033e"+
+ "\7u\2\2\u033e\u033f\7v\2\2\u033f\u0340\7t\2\2\u0340\u0341\7k\2\2\u0341"+
+ "\u0342\7p\2\2\u0342\u0343\7i\2\2\u0343\u0344\7C\2\2\u0344\u0345\7t\2\2"+
+ "\u0345\u0346\7t\2\2\u0346\u0347\7c\2\2\u0347\u035d\7{\2\2\u0348\u0349"+
+ "\7v\2\2\u0349\u034a\7t\2\2\u034a\u034b\7c\2\2\u034b\u034c\7p\2\2\u034c"+
+ "\u034d\7u\2\2\u034d\u034e\7k\2\2\u034e\u034f\7v\2\2\u034f\u0350\7k\2\2"+
+ "\u0350\u0351\7q\2\2\u0351\u035d\7p\2\2\u0352\u0353\7v\2\2\u0353\u0354"+
+ "\7{\2\2\u0354\u0355\7r\2\2\u0355\u0356\7g\2\2\u0356\u0357\7f\2\2\u0357"+
+ "\u0358\7C\2\2\u0358\u0359\7t\2\2\u0359\u035a\7t\2\2\u035a\u035b\7c\2\2"+
+ "\u035b\u035d\7{\2\2\u035c\u02b0\3\2\2\2\u035c\u02b4\3\2\2\2\u035c\u02bc"+
+ "\3\2\2\2\u035c\u02c0\3\2\2\2\u035c\u02c5\3\2\2\2\u035c\u02d3\3\2\2\2\u035c"+
+ "\u02d8\3\2\2\2\u035c\u02e3\3\2\2\2\u035c\u02ec\3\2\2\2\u035c\u02f4\3\2"+
+ "\2\2\u035c\u02fc\3\2\2\2\u035c\u02fe\3\2\2\2\u035c\u0305\3\2\2\2\u035c"+
+ "\u030d\3\2\2\2\u035c\u0319\3\2\2\2\u035c\u031f\3\2\2\2\u035c\u0326\3\2"+
+ "\2\2\u035c\u0337\3\2\2\2\u035c\u033d\3\2\2\2\u035c\u0348\3\2\2\2\u035c"+
+ "\u0352\3\2\2\2\u035d\u00c8\3\2\2\2\u035e\u0362\5\u00cbf\2\u035f\u0361"+
+ "\5\u00cdg\2\u0360\u035f\3\2\2\2\u0361\u0364\3\2\2\2\u0362\u0360\3\2\2"+
+ "\2\u0362\u0363\3\2\2\2\u0363\u00ca\3\2\2\2\u0364\u0362\3\2\2\2\u0365\u036c"+
+ "\t\31\2\2\u0366\u0367\n\24\2\2\u0367\u036c\6f\6\2\u0368\u0369\t\25\2\2"+
+ "\u0369\u036a\t\26\2\2\u036a\u036c\6f\7\2\u036b\u0365\3\2\2\2\u036b\u0366"+
+ "\3\2\2\2\u036b\u0368\3\2\2\2\u036c\u00cc\3\2\2\2\u036d\u0374\t\32\2\2"+
+ "\u036e\u036f\n\24\2\2\u036f\u0374\6g\b\2\u0370\u0371\t\25\2\2\u0371\u0372"+
+ "\t\26\2\2\u0372\u0374\6g\t\2\u0373\u036d\3\2\2\2\u0373\u036e\3\2\2\2\u0373"+
+ "\u0370\3\2\2\2\u0374\u00ce\3\2\2\2:\2\u016d\u0171\u0175\u0179\u017d\u0184"+
+ "\u0189\u018b\u0191\u0195\u0199\u019f\u01a4\u01ae\u01b2\u01b8\u01bc\u01c4"+
+ "\u01c8\u01ce\u01d8\u01dc\u01e2\u01e6\u01eb\u01ee\u01f1\u01f6\u01f9\u01fe"+
+ "\u0203\u020b\u0216\u021a\u021f\u0223\u0233\u023d\u0246\u024c\u0253\u0257"+
+ "\u025b\u0261\u026e\u0282\u028b\u0293\u0298\u02a0\u02ae\u035c\u0362\u036b"+
+ "\u0373\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.tokens b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.tokens
index 2e6950f..5a9817d 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.tokens
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionLexer.tokens
@@ -59,8 +59,8 @@
'class'=40
'>='=39
'~'=38
-'=='=37
-'/'=36
+'/'=37
+'=='=36
'??'=35
'null'=51
'>'=34
@@ -69,8 +69,8 @@
'&&'=32
'='=31
'+'=30
-')'=29
-'.'=28
+'.'=29
+')'=28
'byte'=27
'^'=26
'%'=25
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
index 0b4c24a..45543dd 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
@@ -73,17 +73,6 @@
void exitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx);
/**
- * Enter a parse tree produced by {@link BindingExpressionParser#expressionList}.
- * @param ctx the parse tree
- */
- void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
- /**
- * Exit a parse tree produced by {@link BindingExpressionParser#expressionList}.
- * @param ctx the parse tree
- */
- void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
-
- /**
* Enter a parse tree produced by the {@code MethodInvocation}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -97,6 +86,17 @@
void exitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
/**
+ * Enter a parse tree produced by {@link BindingExpressionParser#expressionList}.
+ * @param ctx the parse tree
+ */
+ void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
+ /**
+ * Exit a parse tree produced by {@link BindingExpressionParser#expressionList}.
+ * @param ctx the parse tree
+ */
+ void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
+
+ /**
* Enter a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
* @param ctx the parse tree
*/
@@ -278,19 +278,6 @@
void exitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
/**
- * Enter a parse tree produced by the {@code ExplicitGenericInvocationOp}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- */
- void enterExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx);
- /**
- * Exit a parse tree produced by the {@code ExplicitGenericInvocationOp}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- */
- void exitExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx);
-
- /**
* Enter a parse tree produced by {@link BindingExpressionParser#typeArguments}.
* @param ctx the parse tree
*/
@@ -315,19 +302,6 @@
void exitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
/**
- * Enter a parse tree produced by the {@code GenericCall}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- */
- void enterGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx);
- /**
- * Exit a parse tree produced by the {@code GenericCall}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- */
- void exitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx);
-
- /**
* Enter a parse tree produced by the {@code MathOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -374,17 +348,6 @@
void exitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
/**
- * Enter a parse tree produced by {@link BindingExpressionParser#constantExpression}.
- * @param ctx the parse tree
- */
- void enterConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx);
- /**
- * Exit a parse tree produced by {@link BindingExpressionParser#constantExpression}.
- * @param ctx the parse tree
- */
- void exitConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx);
-
- /**
* Enter a parse tree produced by the {@code QuestionQuestionOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
index cd2f929..cc5795a 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
@@ -24,25 +24,23 @@
"<INVALID>", "'long'", "'>>>'", "']'", "'short'", "'&'", "'default'",
"','", "'*'", "'['", "'-'", "'('", "':'", "'<'", "'int'", "'!='", "'<='",
"'?'", "'<<'", "'void'", "'double'", "'boolean'", "'float'", "'>>'", "'char'",
- "'%'", "'^'", "'byte'", "'.'", "')'", "'+'", "'='", "'&&'", "'||'", "'>'",
- "'??'", "'/'", "'=='", "'~'", "'>='", "'class'", "'|'", "'instanceof'",
+ "'%'", "'^'", "'byte'", "')'", "'.'", "'+'", "'='", "'&&'", "'||'", "'>'",
+ "'??'", "'=='", "'/'", "'~'", "'>='", "'class'", "'|'", "'instanceof'",
"'!'", "'this'", "IntegerLiteral", "FloatingPointLiteral", "BooleanLiteral",
"CharacterLiteral", "SingleQuoteString", "DoubleQuoteString", "'null'",
"Identifier", "WS", "ResourceReference", "ResourceName"
};
public static final int
- RULE_bindingSyntax = 0, RULE_defaults = 1, RULE_constantValue = 2, RULE_constantExpression = 3,
- RULE_expression = 4, RULE_classExtraction = 5, RULE_expressionList = 6,
- RULE_literal = 7, RULE_identifier = 8, RULE_javaLiteral = 9, RULE_stringLiteral = 10,
- RULE_explicitGenericInvocation = 11, RULE_typeArguments = 12, RULE_type = 13,
- RULE_explicitGenericInvocationSuffix = 14, RULE_arguments = 15, RULE_classOrInterfaceType = 16,
- RULE_primitiveType = 17;
+ RULE_bindingSyntax = 0, RULE_defaults = 1, RULE_constantValue = 2, RULE_expression = 3,
+ RULE_classExtraction = 4, RULE_expressionList = 5, RULE_literal = 6, RULE_identifier = 7,
+ RULE_javaLiteral = 8, RULE_stringLiteral = 9, RULE_explicitGenericInvocation = 10,
+ RULE_typeArguments = 11, RULE_type = 12, RULE_explicitGenericInvocationSuffix = 13,
+ RULE_arguments = 14, RULE_classOrInterfaceType = 15, RULE_primitiveType = 16;
public static final String[] ruleNames = {
- "bindingSyntax", "defaults", "constantValue", "constantExpression", "expression",
- "classExtraction", "expressionList", "literal", "identifier", "javaLiteral",
- "stringLiteral", "explicitGenericInvocation", "typeArguments", "type",
- "explicitGenericInvocationSuffix", "arguments", "classOrInterfaceType",
- "primitiveType"
+ "bindingSyntax", "defaults", "constantValue", "expression", "classExtraction",
+ "expressionList", "literal", "identifier", "javaLiteral", "stringLiteral",
+ "explicitGenericInvocation", "typeArguments", "type", "explicitGenericInvocationSuffix",
+ "arguments", "classOrInterfaceType", "primitiveType"
};
@Override
@@ -95,12 +93,12 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(36); expression(0);
- setState(38);
+ setState(34); expression(0);
+ setState(36);
_la = _input.LA(1);
if (_la==T__36) {
{
- setState(37); defaults();
+ setState(35); defaults();
}
}
@@ -147,10 +145,10 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(40); match(T__36);
- setState(41); match(T__37);
- setState(42); match(T__12);
- setState(43); constantValue();
+ setState(38); match(T__36);
+ setState(39); match(T__37);
+ setState(40); match(T__12);
+ setState(41); constantValue();
}
}
catch (RecognitionException re) {
@@ -165,12 +163,12 @@
}
public static class ConstantValueContext extends ParserRuleContext {
- public ConstantExpressionContext constantExpression() {
- return getRuleContext(ConstantExpressionContext.class,0);
- }
public LiteralContext literal() {
return getRuleContext(LiteralContext.class,0);
}
+ public IdentifierContext identifier() {
+ return getRuleContext(IdentifierContext.class,0);
+ }
public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 0); }
public ConstantValueContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -196,7 +194,7 @@
ConstantValueContext _localctx = new ConstantValueContext(_ctx, getState());
enterRule(_localctx, 4, RULE_constantValue);
try {
- setState(48);
+ setState(46);
switch (_input.LA(1)) {
case IntegerLiteral:
case FloatingPointLiteral:
@@ -207,19 +205,19 @@
case NullLiteral:
enterOuterAlt(_localctx, 1);
{
- setState(45); literal();
+ setState(43); literal();
}
break;
case ResourceReference:
enterOuterAlt(_localctx, 2);
{
- setState(46); match(ResourceReference);
+ setState(44); match(ResourceReference);
}
break;
case Identifier:
enterOuterAlt(_localctx, 3);
{
- setState(47); constantExpression(0);
+ setState(45); identifier();
}
break;
default:
@@ -237,88 +235,6 @@
return _localctx;
}
- public static class ConstantExpressionContext extends ParserRuleContext {
- public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
- public ConstantExpressionContext constantExpression() {
- return getRuleContext(ConstantExpressionContext.class,0);
- }
- public IdentifierContext identifier() {
- return getRuleContext(IdentifierContext.class,0);
- }
- public ConstantExpressionContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_constantExpression; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterConstantExpression(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitConstantExpression(this);
- }
- @Override
- public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitConstantExpression(this);
- else return visitor.visitChildren(this);
- }
- }
-
- @RuleVersion(0)
- public final ConstantExpressionContext constantExpression() throws RecognitionException {
- return constantExpression(0);
- }
-
- private ConstantExpressionContext constantExpression(int _p) throws RecognitionException {
- ParserRuleContext _parentctx = _ctx;
- int _parentState = getState();
- ConstantExpressionContext _localctx = new ConstantExpressionContext(_ctx, _parentState);
- ConstantExpressionContext _prevctx = _localctx;
- int _startState = 6;
- enterRecursionRule(_localctx, 6, RULE_constantExpression, _p);
- try {
- int _alt;
- enterOuterAlt(_localctx, 1);
- {
- {
- setState(51); identifier();
- }
- _ctx.stop = _input.LT(-1);
- setState(58);
- _errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,2,_ctx);
- while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
- if ( _alt==1 ) {
- if ( _parseListeners!=null ) triggerExitRuleEvent();
- _prevctx = _localctx;
- {
- {
- _localctx = new ConstantExpressionContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_constantExpression);
- setState(53);
- if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(54); match(T__15);
- setState(55); match(Identifier);
- }
- }
- }
- setState(60);
- _errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,2,_ctx);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- unrollRecursionContexts(_parentctx);
- }
- return _localctx;
- }
-
public static class ExpressionContext extends ParserRuleContext {
public ExpressionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -392,6 +308,7 @@
}
}
public static class UnaryOpContext extends ExpressionContext {
+ public Token op;
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
@@ -435,28 +352,6 @@
else return visitor.visitChildren(this);
}
}
- public static class ExplicitGenericInvocationOpContext extends ExpressionContext {
- public ExplicitGenericInvocationContext explicitGenericInvocation() {
- return getRuleContext(ExplicitGenericInvocationContext.class,0);
- }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public ExplicitGenericInvocationOpContext(ExpressionContext ctx) { copyFrom(ctx); }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterExplicitGenericInvocationOp(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitExplicitGenericInvocationOp(this);
- }
- @Override
- public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitExplicitGenericInvocationOp(this);
- else return visitor.visitChildren(this);
- }
- }
public static class MethodInvocationContext extends ExpressionContext {
public ExpressionContext target;
public Token methodName;
@@ -578,6 +473,26 @@
else return visitor.visitChildren(this);
}
}
+ public static class DotOpContext extends ExpressionContext {
+ public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public DotOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterDotOp(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitDotOp(this);
+ }
+ @Override
+ public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitDotOp(this);
+ else return visitor.visitChildren(this);
+ }
+ }
public static class MathOpContext extends ExpressionContext {
public ExpressionContext left;
public Token op;
@@ -603,51 +518,6 @@
else return visitor.visitChildren(this);
}
}
- public static class DotOpContext extends ExpressionContext {
- public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public DotOpContext(ExpressionContext ctx) { copyFrom(ctx); }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterDotOp(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitDotOp(this);
- }
- @Override
- public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitDotOp(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class GenericCallContext extends ExpressionContext {
- public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() {
- return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0);
- }
- public ArgumentsContext arguments() {
- return getRuleContext(ArgumentsContext.class,0);
- }
- public TypeArgumentsContext typeArguments() {
- return getRuleContext(TypeArgumentsContext.class,0);
- }
- public GenericCallContext(ExpressionContext ctx) { copyFrom(ctx); }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterGenericCall(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitGenericCall(this);
- }
- @Override
- public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitGenericCall(this);
- else return visitor.visitChildren(this);
- }
- }
public static class BitShiftOpContext extends ExpressionContext {
public ExpressionContext left;
public Token op;
@@ -756,25 +626,25 @@
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 8;
- enterRecursionRule(_localctx, 8, RULE_expression, _p);
+ int _startState = 6;
+ enterRecursionRule(_localctx, 6, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(85);
- switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
+ setState(66);
+ switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
{
_localctx = new CastOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(62); match(T__32);
- setState(63); type();
- setState(64); match(T__14);
- setState(65); expression(16);
+ setState(49); match(T__32);
+ setState(50); type();
+ setState(51); match(T__15);
+ setState(52); expression(16);
}
break;
@@ -783,13 +653,14 @@
_localctx = new UnaryOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(67);
+ setState(54);
+ ((UnaryOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__33 || _la==T__13) ) {
- _errHandler.recoverInline(this);
+ ((UnaryOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(68); expression(15);
+ setState(55); expression(15);
}
break;
@@ -798,13 +669,14 @@
_localctx = new UnaryOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(69);
+ setState(56);
+ ((UnaryOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__5 || _la==T__0) ) {
- _errHandler.recoverInline(this);
+ ((UnaryOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(70); expression(14);
+ setState(57); expression(14);
}
break;
@@ -813,9 +685,9 @@
_localctx = new GroupingContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(71); match(T__32);
- setState(72); expression(0);
- setState(73); match(T__14);
+ setState(58); match(T__32);
+ setState(59); expression(0);
+ setState(60); match(T__15);
}
break;
@@ -824,7 +696,7 @@
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(75); literal();
+ setState(62); literal();
}
break;
@@ -833,7 +705,7 @@
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(76); identifier();
+ setState(63); identifier();
}
break;
@@ -842,7 +714,7 @@
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(77); classExtraction();
+ setState(64); classExtraction();
}
break;
@@ -851,61 +723,36 @@
_localctx = new ResourceContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(78); match(ResourceReference);
- }
- break;
-
- case 9:
- {
- _localctx = new GenericCallContext(_localctx);
- _ctx = _localctx;
- _prevctx = _localctx;
- setState(79); typeArguments();
- setState(83);
- switch (_input.LA(1)) {
- case Identifier:
- {
- setState(80); explicitGenericInvocationSuffix();
- }
- break;
- case THIS:
- {
- setState(81); match(THIS);
- setState(82); arguments();
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
+ setState(65); match(ResourceReference);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(150);
+ setState(128);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(148);
- switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
+ setState(126);
+ switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
{
_localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(87);
+ setState(68);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
- setState(88);
+ setState(69);
((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__18) | (1L << T__7))) != 0)) ) {
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__18) | (1L << T__6))) != 0)) ) {
((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(89); ((MathOpContext)_localctx).right = expression(14);
+ setState(70); ((MathOpContext)_localctx).right = expression(14);
}
break;
@@ -914,16 +761,16 @@
_localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(90);
+ setState(71);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(91);
+ setState(72);
((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__33 || _la==T__13) ) {
((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(92); ((MathOpContext)_localctx).right = expression(13);
+ setState(73); ((MathOpContext)_localctx).right = expression(13);
}
break;
@@ -932,16 +779,16 @@
_localctx = new BitShiftOpContext(new ExpressionContext(_parentctx, _parentState));
((BitShiftOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(93);
+ setState(74);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
- setState(94);
+ setState(75);
((BitShiftOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__41) | (1L << T__25) | (1L << T__20))) != 0)) ) {
((BitShiftOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(95); ((BitShiftOpContext)_localctx).right = expression(12);
+ setState(76); ((BitShiftOpContext)_localctx).right = expression(12);
}
break;
@@ -950,16 +797,16 @@
_localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(96);
+ setState(77);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
- setState(97);
+ setState(78);
((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__30) | (1L << T__27) | (1L << T__9) | (1L << T__4))) != 0)) ) {
((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(98); ((ComparisonOpContext)_localctx).right = expression(11);
+ setState(79); ((ComparisonOpContext)_localctx).right = expression(11);
}
break;
@@ -968,16 +815,16 @@
_localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(99);
+ setState(80);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(100);
+ setState(81);
((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
- if ( !(_la==T__28 || _la==T__6) ) {
+ if ( !(_la==T__28 || _la==T__7) ) {
((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(101); ((ComparisonOpContext)_localctx).right = expression(9);
+ setState(82); ((ComparisonOpContext)_localctx).right = expression(9);
}
break;
@@ -986,10 +833,10 @@
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(102);
+ setState(83);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(103); ((BinaryOpContext)_localctx).op = match(T__38);
- setState(104); ((BinaryOpContext)_localctx).right = expression(8);
+ setState(84); ((BinaryOpContext)_localctx).op = match(T__38);
+ setState(85); ((BinaryOpContext)_localctx).right = expression(8);
}
break;
@@ -998,10 +845,10 @@
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(105);
+ setState(86);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(106); ((BinaryOpContext)_localctx).op = match(T__17);
- setState(107); ((BinaryOpContext)_localctx).right = expression(7);
+ setState(87); ((BinaryOpContext)_localctx).op = match(T__17);
+ setState(88); ((BinaryOpContext)_localctx).right = expression(7);
}
break;
@@ -1010,10 +857,10 @@
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(108);
+ setState(89);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(109); ((BinaryOpContext)_localctx).op = match(T__2);
- setState(110); ((BinaryOpContext)_localctx).right = expression(6);
+ setState(90); ((BinaryOpContext)_localctx).op = match(T__2);
+ setState(91); ((BinaryOpContext)_localctx).right = expression(6);
}
break;
@@ -1022,10 +869,10 @@
_localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(111);
+ setState(92);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(112); ((AndOrOpContext)_localctx).op = match(T__11);
- setState(113); ((AndOrOpContext)_localctx).right = expression(5);
+ setState(93); ((AndOrOpContext)_localctx).op = match(T__11);
+ setState(94); ((AndOrOpContext)_localctx).right = expression(5);
}
break;
@@ -1034,10 +881,10 @@
_localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(114);
+ setState(95);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(115); ((AndOrOpContext)_localctx).op = match(T__10);
- setState(116); ((AndOrOpContext)_localctx).right = expression(4);
+ setState(96); ((AndOrOpContext)_localctx).op = match(T__10);
+ setState(97); ((AndOrOpContext)_localctx).right = expression(4);
}
break;
@@ -1046,12 +893,12 @@
_localctx = new TernaryOpContext(new ExpressionContext(_parentctx, _parentState));
((TernaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(117);
+ setState(98);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(118); ((TernaryOpContext)_localctx).op = match(T__26);
- setState(119); ((TernaryOpContext)_localctx).iftrue = expression(0);
- setState(120); match(T__31);
- setState(121); ((TernaryOpContext)_localctx).iffalse = expression(3);
+ setState(99); ((TernaryOpContext)_localctx).op = match(T__26);
+ setState(100); ((TernaryOpContext)_localctx).iftrue = expression(0);
+ setState(101); match(T__31);
+ setState(102); ((TernaryOpContext)_localctx).iffalse = expression(3);
}
break;
@@ -1060,10 +907,10 @@
_localctx = new QuestionQuestionOpContext(new ExpressionContext(_parentctx, _parentState));
((QuestionQuestionOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(123);
+ setState(104);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(124); ((QuestionQuestionOpContext)_localctx).op = match(T__8);
- setState(125); ((QuestionQuestionOpContext)_localctx).right = expression(2);
+ setState(105); ((QuestionQuestionOpContext)_localctx).op = match(T__8);
+ setState(106); ((QuestionQuestionOpContext)_localctx).right = expression(2);
}
break;
@@ -1071,74 +918,63 @@
{
_localctx = new DotOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(126);
- if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
- setState(127); match(T__15);
- setState(128); match(Identifier);
+ setState(107);
+ if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
+ setState(108); match(T__14);
+ setState(109); match(Identifier);
}
break;
case 14:
{
- _localctx = new ExplicitGenericInvocationOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new BracketOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(129);
- if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
- setState(130); match(T__15);
- setState(131); explicitGenericInvocation();
+ setState(110);
+ if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
+ setState(111); match(T__34);
+ setState(112); expression(0);
+ setState(113); match(T__40);
}
break;
case 15:
{
- _localctx = new BracketOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new MethodInvocationContext(new ExpressionContext(_parentctx, _parentState));
+ ((MethodInvocationContext)_localctx).target = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(132);
- if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
- setState(133); match(T__34);
- setState(134); expression(0);
- setState(135); match(T__40);
+ setState(115);
+ if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
+ setState(116); match(T__14);
+ setState(117); ((MethodInvocationContext)_localctx).methodName = match(Identifier);
+ setState(118); match(T__32);
+ setState(120);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__39) | (1L << T__33) | (1L << T__32) | (1L << T__29) | (1L << T__24) | (1L << T__23) | (1L << T__22) | (1L << T__21) | (1L << T__19) | (1L << T__16) | (1L << T__13) | (1L << T__5) | (1L << T__0) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
+ {
+ setState(119); ((MethodInvocationContext)_localctx).args = expressionList();
+ }
+ }
+
+ setState(122); match(T__15);
}
break;
case 16:
{
- _localctx = new MethodInvocationContext(new ExpressionContext(_parentctx, _parentState));
- ((MethodInvocationContext)_localctx).target = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(137);
- if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
- setState(138); match(T__15);
- setState(139); ((MethodInvocationContext)_localctx).methodName = match(Identifier);
- setState(140); match(T__32);
- setState(142);
- _la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__39) | (1L << T__33) | (1L << T__32) | (1L << T__30) | (1L << T__29) | (1L << T__24) | (1L << T__23) | (1L << T__22) | (1L << T__21) | (1L << T__19) | (1L << T__16) | (1L << T__13) | (1L << T__5) | (1L << T__0) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
- {
- setState(141); ((MethodInvocationContext)_localctx).args = expressionList();
- }
- }
-
- setState(144); match(T__14);
- }
- break;
-
- case 17:
- {
_localctx = new InstanceOfOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(145);
+ setState(123);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(146); match(T__1);
- setState(147); type();
+ setState(124); match(T__1);
+ setState(125); type();
}
break;
}
}
}
- setState(152);
+ setState(130);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
}
}
}
@@ -1179,9 +1015,9 @@
@RuleVersion(0)
public final ClassExtractionContext classExtraction() throws RecognitionException {
ClassExtractionContext _localctx = new ClassExtractionContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_classExtraction);
+ enterRule(_localctx, 8, RULE_classExtraction);
try {
- setState(160);
+ setState(138);
switch (_input.LA(1)) {
case T__42:
case T__39:
@@ -1194,17 +1030,17 @@
case Identifier:
enterOuterAlt(_localctx, 1);
{
- setState(153); type();
- setState(154); match(T__15);
- setState(155); match(T__3);
+ setState(131); type();
+ setState(132); match(T__14);
+ setState(133); match(T__3);
}
break;
case T__24:
enterOuterAlt(_localctx, 2);
{
- setState(157); match(T__24);
- setState(158); match(T__15);
- setState(159); match(T__3);
+ setState(135); match(T__24);
+ setState(136); match(T__14);
+ setState(137); match(T__3);
}
break;
default:
@@ -1251,23 +1087,23 @@
@RuleVersion(0)
public final ExpressionListContext expressionList() throws RecognitionException {
ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_expressionList);
+ enterRule(_localctx, 10, RULE_expressionList);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(162); expression(0);
- setState(167);
+ setState(140); expression(0);
+ setState(145);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__36) {
{
{
- setState(163); match(T__36);
- setState(164); expression(0);
+ setState(141); match(T__36);
+ setState(142); expression(0);
}
}
- setState(169);
+ setState(147);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1313,9 +1149,9 @@
@RuleVersion(0)
public final LiteralContext literal() throws RecognitionException {
LiteralContext _localctx = new LiteralContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_literal);
+ enterRule(_localctx, 12, RULE_literal);
try {
- setState(172);
+ setState(150);
switch (_input.LA(1)) {
case IntegerLiteral:
case FloatingPointLiteral:
@@ -1324,14 +1160,14 @@
case NullLiteral:
enterOuterAlt(_localctx, 1);
{
- setState(170); javaLiteral();
+ setState(148); javaLiteral();
}
break;
case SingleQuoteString:
case DoubleQuoteString:
enterOuterAlt(_localctx, 2);
{
- setState(171); stringLiteral();
+ setState(149); stringLiteral();
}
break;
default:
@@ -1373,11 +1209,11 @@
@RuleVersion(0)
public final IdentifierContext identifier() throws RecognitionException {
IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_identifier);
+ enterRule(_localctx, 14, RULE_identifier);
try {
enterOuterAlt(_localctx, 1);
{
- setState(174); match(Identifier);
+ setState(152); match(Identifier);
}
}
catch (RecognitionException re) {
@@ -1419,12 +1255,12 @@
@RuleVersion(0)
public final JavaLiteralContext javaLiteral() throws RecognitionException {
JavaLiteralContext _localctx = new JavaLiteralContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_javaLiteral);
+ enterRule(_localctx, 16, RULE_javaLiteral);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(176);
+ setState(154);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << NullLiteral))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1468,12 +1304,12 @@
@RuleVersion(0)
public final StringLiteralContext stringLiteral() throws RecognitionException {
StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_stringLiteral);
+ enterRule(_localctx, 18, RULE_stringLiteral);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(178);
+ setState(156);
_la = _input.LA(1);
if ( !(_la==SingleQuoteString || _la==DoubleQuoteString) ) {
_errHandler.recoverInline(this);
@@ -1521,12 +1357,12 @@
@RuleVersion(0)
public final ExplicitGenericInvocationContext explicitGenericInvocation() throws RecognitionException {
ExplicitGenericInvocationContext _localctx = new ExplicitGenericInvocationContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_explicitGenericInvocation);
+ enterRule(_localctx, 20, RULE_explicitGenericInvocation);
try {
enterOuterAlt(_localctx, 1);
{
- setState(180); typeArguments();
- setState(181); explicitGenericInvocationSuffix();
+ setState(158); typeArguments();
+ setState(159); explicitGenericInvocationSuffix();
}
}
catch (RecognitionException re) {
@@ -1569,28 +1405,28 @@
@RuleVersion(0)
public final TypeArgumentsContext typeArguments() throws RecognitionException {
TypeArgumentsContext _localctx = new TypeArgumentsContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_typeArguments);
+ enterRule(_localctx, 22, RULE_typeArguments);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(183); match(T__30);
- setState(184); type();
- setState(189);
+ setState(161); match(T__30);
+ setState(162); type();
+ setState(167);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__36) {
{
{
- setState(185); match(T__36);
- setState(186); type();
+ setState(163); match(T__36);
+ setState(164); type();
}
}
- setState(191);
+ setState(169);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(192); match(T__9);
+ setState(170); match(T__9);
}
}
catch (RecognitionException re) {
@@ -1633,30 +1469,30 @@
@RuleVersion(0)
public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_type);
+ enterRule(_localctx, 24, RULE_type);
try {
int _alt;
- setState(210);
+ setState(188);
switch (_input.LA(1)) {
case Identifier:
enterOuterAlt(_localctx, 1);
{
- setState(194); classOrInterfaceType();
- setState(199);
+ setState(172); classOrInterfaceType();
+ setState(177);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,10,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(195); match(T__34);
- setState(196); match(T__40);
+ setState(173); match(T__34);
+ setState(174); match(T__40);
}
}
}
- setState(201);
+ setState(179);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,10,_ctx);
}
}
break;
@@ -1670,22 +1506,22 @@
case T__16:
enterOuterAlt(_localctx, 2);
{
- setState(202); primitiveType();
- setState(207);
+ setState(180); primitiveType();
+ setState(185);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,11,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(203); match(T__34);
- setState(204); match(T__40);
+ setState(181); match(T__34);
+ setState(182); match(T__40);
}
}
}
- setState(209);
+ setState(187);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,11,_ctx);
}
}
break;
@@ -1731,12 +1567,12 @@
@RuleVersion(0)
public final ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() throws RecognitionException {
ExplicitGenericInvocationSuffixContext _localctx = new ExplicitGenericInvocationSuffixContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_explicitGenericInvocationSuffix);
+ enterRule(_localctx, 26, RULE_explicitGenericInvocationSuffix);
try {
enterOuterAlt(_localctx, 1);
{
- setState(212); match(Identifier);
- setState(213); arguments();
+ setState(190); match(Identifier);
+ setState(191); arguments();
}
}
catch (RecognitionException re) {
@@ -1776,21 +1612,21 @@
@RuleVersion(0)
public final ArgumentsContext arguments() throws RecognitionException {
ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_arguments);
+ enterRule(_localctx, 28, RULE_arguments);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(215); match(T__32);
- setState(217);
+ setState(193); match(T__32);
+ setState(195);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__39) | (1L << T__33) | (1L << T__32) | (1L << T__30) | (1L << T__29) | (1L << T__24) | (1L << T__23) | (1L << T__22) | (1L << T__21) | (1L << T__19) | (1L << T__16) | (1L << T__13) | (1L << T__5) | (1L << T__0) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__39) | (1L << T__33) | (1L << T__32) | (1L << T__29) | (1L << T__24) | (1L << T__23) | (1L << T__22) | (1L << T__21) | (1L << T__19) | (1L << T__16) | (1L << T__13) | (1L << T__5) | (1L << T__0) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
{
- setState(216); expressionList();
+ setState(194); expressionList();
}
}
- setState(219); match(T__14);
+ setState(197); match(T__15);
}
}
catch (RecognitionException re) {
@@ -1840,43 +1676,43 @@
@RuleVersion(0)
public final ClassOrInterfaceTypeContext classOrInterfaceType() throws RecognitionException {
ClassOrInterfaceTypeContext _localctx = new ClassOrInterfaceTypeContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_classOrInterfaceType);
+ enterRule(_localctx, 30, RULE_classOrInterfaceType);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(221); identifier();
- setState(223);
- switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
+ setState(199); identifier();
+ setState(201);
+ switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1:
{
- setState(222); typeArguments();
+ setState(200); typeArguments();
}
break;
}
- setState(232);
+ setState(210);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,18,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(225); match(T__15);
- setState(226); match(Identifier);
- setState(228);
- switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
+ setState(203); match(T__14);
+ setState(204); match(Identifier);
+ setState(206);
+ switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
case 1:
{
- setState(227); typeArguments();
+ setState(205); typeArguments();
}
break;
}
}
}
}
- setState(234);
+ setState(212);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,18,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
}
}
}
@@ -1914,12 +1750,12 @@
@RuleVersion(0)
public final PrimitiveTypeContext primitiveType() throws RecognitionException {
PrimitiveTypeContext _localctx = new PrimitiveTypeContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_primitiveType);
+ enterRule(_localctx, 32, RULE_primitiveType);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(235);
+ setState(213);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__42) | (1L << T__39) | (1L << T__29) | (1L << T__23) | (1L << T__22) | (1L << T__21) | (1L << T__19) | (1L << T__16))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1940,140 +1776,121 @@
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 3: return constantExpression_sempred((ConstantExpressionContext)_localctx, predIndex);
-
- case 4: return expression_sempred((ExpressionContext)_localctx, predIndex);
+ case 3: return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
}
private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
switch (predIndex) {
- case 1: return precpred(_ctx, 13);
+ case 0: return precpred(_ctx, 13);
- case 2: return precpred(_ctx, 12);
+ case 1: return precpred(_ctx, 12);
- case 3: return precpred(_ctx, 11);
+ case 2: return precpred(_ctx, 11);
- case 4: return precpred(_ctx, 10);
+ case 3: return precpred(_ctx, 10);
- case 5: return precpred(_ctx, 8);
+ case 4: return precpred(_ctx, 8);
- case 6: return precpred(_ctx, 7);
+ case 5: return precpred(_ctx, 7);
- case 7: return precpred(_ctx, 6);
+ case 6: return precpred(_ctx, 6);
- case 8: return precpred(_ctx, 5);
+ case 7: return precpred(_ctx, 5);
- case 9: return precpred(_ctx, 4);
+ case 8: return precpred(_ctx, 4);
- case 10: return precpred(_ctx, 3);
+ case 9: return precpred(_ctx, 3);
- case 11: return precpred(_ctx, 2);
+ case 10: return precpred(_ctx, 2);
- case 12: return precpred(_ctx, 1);
+ case 11: return precpred(_ctx, 1);
- case 13: return precpred(_ctx, 20);
+ case 12: return precpred(_ctx, 19);
- case 14: return precpred(_ctx, 19);
+ case 13: return precpred(_ctx, 18);
- case 15: return precpred(_ctx, 18);
+ case 14: return precpred(_ctx, 17);
- case 17: return precpred(_ctx, 9);
-
- case 16: return precpred(_ctx, 17);
- }
- return true;
- }
- private boolean constantExpression_sempred(ConstantExpressionContext _localctx, int predIndex) {
- switch (predIndex) {
- case 0: return precpred(_ctx, 2);
+ case 15: return precpred(_ctx, 9);
}
return true;
}
public static final String _serializedATN =
- "\3\uaf6f\u8320\u479d\ub75c\u4880\u1605\u191c\uab37\39\u00f0\4\2\t\2\4"+
+ "\3\uaf6f\u8320\u479d\ub75c\u4880\u1605\u191c\uab37\39\u00da\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\3\2\3\2\5\2)\n\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\5\4\63\n\4"+
- "\3\5\3\5\3\5\3\5\3\5\3\5\7\5;\n\5\f\5\16\5>\13\5\3\6\3\6\3\6\3\6\3\6\3"+
- "\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6"+
- "V\n\6\5\6X\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
- "\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+
- "\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
- "\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0091\n\6\3\6\3\6\3\6\3\6\7\6\u0097\n\6\f"+
- "\6\16\6\u009a\13\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u00a3\n\7\3\b\3\b\3"+
- "\b\7\b\u00a8\n\b\f\b\16\b\u00ab\13\b\3\t\3\t\5\t\u00af\n\t\3\n\3\n\3\13"+
- "\3\13\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u00be\n\16\f\16\16"+
- "\16\u00c1\13\16\3\16\3\16\3\17\3\17\3\17\7\17\u00c8\n\17\f\17\16\17\u00cb"+
- "\13\17\3\17\3\17\3\17\7\17\u00d0\n\17\f\17\16\17\u00d3\13\17\5\17\u00d5"+
- "\n\17\3\20\3\20\3\20\3\21\3\21\5\21\u00dc\n\21\3\21\3\21\3\22\3\22\5\22"+
- "\u00e2\n\22\3\22\3\22\3\22\5\22\u00e7\n\22\7\22\u00e9\n\22\f\22\16\22"+
- "\u00ec\13\22\3\23\3\23\3\23\2\2\4\b\n\24\2\2\4\2\6\2\b\2\n\2\f\2\16\2"+
- "\20\2\22\2\24\2\26\2\30\2\32\2\34\2\36\2 \2\"\2$\2\2\13\4\2\f\f \4\2"+
- "((--\5\2\n\n\33\33&&\5\2\4\4\24\24\31\31\6\2\17\17\22\22$$))\4\2\21\21"+
- "\'\'\4\2/\62\65\65\3\2\63\64\b\2\3\3\6\6\20\20\26\30\32\32\35\35\u0107"+
- "\2&\3\2\2\2\4*\3\2\2\2\6\62\3\2\2\2\b\64\3\2\2\2\nW\3\2\2\2\f\u00a2\3"+
- "\2\2\2\16\u00a4\3\2\2\2\20\u00ae\3\2\2\2\22\u00b0\3\2\2\2\24\u00b2\3\2"+
- "\2\2\26\u00b4\3\2\2\2\30\u00b6\3\2\2\2\32\u00b9\3\2\2\2\34\u00d4\3\2\2"+
- "\2\36\u00d6\3\2\2\2 \u00d9\3\2\2\2\"\u00df\3\2\2\2$\u00ed\3\2\2\2&(\5"+
- "\n\6\2\')\5\4\3\2(\'\3\2\2\2()\3\2\2\2)\3\3\2\2\2*+\7\t\2\2+,\7\b\2\2"+
- ",-\7!\2\2-.\5\6\4\2.\5\3\2\2\2/\63\5\20\t\2\60\63\78\2\2\61\63\5\b\5\2"+
- "\62/\3\2\2\2\62\60\3\2\2\2\62\61\3\2\2\2\63\7\3\2\2\2\64\65\b\5\1\2\65"+
- "\66\5\22\n\2\66<\3\2\2\2\678\f\4\2\289\7\36\2\29;\7\66\2\2:\67\3\2\2\2"+
- ";>\3\2\2\2<:\3\2\2\2<=\3\2\2\2=\t\3\2\2\2><\3\2\2\2?@\b\6\1\2@A\7\r\2"+
- "\2AB\5\34\17\2BC\7\37\2\2CD\5\n\6\22DX\3\2\2\2EF\t\2\2\2FX\5\n\6\21GH"+
- "\t\3\2\2HX\5\n\6\20IJ\7\r\2\2JK\5\n\6\2KL\7\37\2\2LX\3\2\2\2MX\5\20\t"+
- "\2NX\5\22\n\2OX\5\f\7\2PX\78\2\2QU\5\32\16\2RV\5\36\20\2ST\7.\2\2TV\5"+
- " \21\2UR\3\2\2\2US\3\2\2\2VX\3\2\2\2W?\3\2\2\2WE\3\2\2\2WG\3\2\2\2WI\3"+
- "\2\2\2WM\3\2\2\2WN\3\2\2\2WO\3\2\2\2WP\3\2\2\2WQ\3\2\2\2X\u0098\3\2\2"+
- "\2YZ\f\17\2\2Z[\t\4\2\2[\u0097\5\n\6\20\\]\f\16\2\2]^\t\2\2\2^\u0097\5"+
- "\n\6\17_`\f\r\2\2`a\t\5\2\2a\u0097\5\n\6\16bc\f\f\2\2cd\t\6\2\2d\u0097"+
- "\5\n\6\ref\f\n\2\2fg\t\7\2\2g\u0097\5\n\6\13hi\f\t\2\2ij\7\7\2\2j\u0097"+
- "\5\n\6\nkl\f\b\2\2lm\7\34\2\2m\u0097\5\n\6\tno\f\7\2\2op\7+\2\2p\u0097"+
- "\5\n\6\bqr\f\6\2\2rs\7\"\2\2s\u0097\5\n\6\7tu\f\5\2\2uv\7#\2\2v\u0097"+
- "\5\n\6\6wx\f\4\2\2xy\7\23\2\2yz\5\n\6\2z{\7\16\2\2{|\5\n\6\5|\u0097\3"+
- "\2\2\2}~\f\3\2\2~\177\7%\2\2\177\u0097\5\n\6\4\u0080\u0081\f\26\2\2\u0081"+
- "\u0082\7\36\2\2\u0082\u0097\7\66\2\2\u0083\u0084\f\25\2\2\u0084\u0085"+
- "\7\36\2\2\u0085\u0097\5\30\r\2\u0086\u0087\f\24\2\2\u0087\u0088\7\13\2"+
- "\2\u0088\u0089\5\n\6\2\u0089\u008a\7\5\2\2\u008a\u0097\3\2\2\2\u008b\u008c"+
- "\f\23\2\2\u008c\u008d\7\36\2\2\u008d\u008e\7\66\2\2\u008e\u0090\7\r\2"+
- "\2\u008f\u0091\5\16\b\2\u0090\u008f\3\2\2\2\u0090\u0091\3\2\2\2\u0091"+
- "\u0092\3\2\2\2\u0092\u0097\7\37\2\2\u0093\u0094\f\13\2\2\u0094\u0095\7"+
- ",\2\2\u0095\u0097\5\34\17\2\u0096Y\3\2\2\2\u0096\\\3\2\2\2\u0096_\3\2"+
- "\2\2\u0096b\3\2\2\2\u0096e\3\2\2\2\u0096h\3\2\2\2\u0096k\3\2\2\2\u0096"+
- "n\3\2\2\2\u0096q\3\2\2\2\u0096t\3\2\2\2\u0096w\3\2\2\2\u0096}\3\2\2\2"+
- "\u0096\u0080\3\2\2\2\u0096\u0083\3\2\2\2\u0096\u0086\3\2\2\2\u0096\u008b"+
- "\3\2\2\2\u0096\u0093\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0098"+
- "\u0099\3\2\2\2\u0099\13\3\2\2\2\u009a\u0098\3\2\2\2\u009b\u009c\5\34\17"+
- "\2\u009c\u009d\7\36\2\2\u009d\u009e\7*\2\2\u009e\u00a3\3\2\2\2\u009f\u00a0"+
- "\7\25\2\2\u00a0\u00a1\7\36\2\2\u00a1\u00a3\7*\2\2\u00a2\u009b\3\2\2\2"+
- "\u00a2\u009f\3\2\2\2\u00a3\r\3\2\2\2\u00a4\u00a9\5\n\6\2\u00a5\u00a6\7"+
- "\t\2\2\u00a6\u00a8\5\n\6\2\u00a7\u00a5\3\2\2\2\u00a8\u00ab\3\2\2\2\u00a9"+
- "\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\17\3\2\2\2\u00ab\u00a9\3\2\2"+
- "\2\u00ac\u00af\5\24\13\2\u00ad\u00af\5\26\f\2\u00ae\u00ac\3\2\2\2\u00ae"+
- "\u00ad\3\2\2\2\u00af\21\3\2\2\2\u00b0\u00b1\7\66\2\2\u00b1\23\3\2\2\2"+
- "\u00b2\u00b3\t\b\2\2\u00b3\25\3\2\2\2\u00b4\u00b5\t\t\2\2\u00b5\27\3\2"+
- "\2\2\u00b6\u00b7\5\32\16\2\u00b7\u00b8\5\36\20\2\u00b8\31\3\2\2\2\u00b9"+
- "\u00ba\7\17\2\2\u00ba\u00bf\5\34\17\2\u00bb\u00bc\7\t\2\2\u00bc\u00be"+
- "\5\34\17\2\u00bd\u00bb\3\2\2\2\u00be\u00c1\3\2\2\2\u00bf\u00bd\3\2\2\2"+
- "\u00bf\u00c0\3\2\2\2\u00c0\u00c2\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c2\u00c3"+
- "\7$\2\2\u00c3\33\3\2\2\2\u00c4\u00c9\5\"\22\2\u00c5\u00c6\7\13\2\2\u00c6"+
- "\u00c8\7\5\2\2\u00c7\u00c5\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9\u00c7\3\2"+
- "\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00d5\3\2\2\2\u00cb\u00c9\3\2\2\2\u00cc"+
- "\u00d1\5$\23\2\u00cd\u00ce\7\13\2\2\u00ce\u00d0\7\5\2\2\u00cf\u00cd\3"+
- "\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2"+
- "\u00d5\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4\u00c4\3\2\2\2\u00d4\u00cc\3\2"+
- "\2\2\u00d5\35\3\2\2\2\u00d6\u00d7\7\66\2\2\u00d7\u00d8\5 \21\2\u00d8\37"+
- "\3\2\2\2\u00d9\u00db\7\r\2\2\u00da\u00dc\5\16\b\2\u00db\u00da\3\2\2\2"+
- "\u00db\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\7\37\2\2\u00de!\3"+
- "\2\2\2\u00df\u00e1\5\22\n\2\u00e0\u00e2\5\32\16\2\u00e1\u00e0\3\2\2\2"+
- "\u00e1\u00e2\3\2\2\2\u00e2\u00ea\3\2\2\2\u00e3\u00e4\7\36\2\2\u00e4\u00e6"+
- "\7\66\2\2\u00e5\u00e7\5\32\16\2\u00e6\u00e5\3\2\2\2\u00e6\u00e7\3\2\2"+
- "\2\u00e7\u00e9\3\2\2\2\u00e8\u00e3\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8"+
- "\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb#\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed"+
- "\u00ee\t\n\2\2\u00ee%\3\2\2\2\25(\62<UW\u0090\u0096\u0098\u00a2\u00a9"+
- "\u00ae\u00bf\u00c9\u00d1\u00d4\u00db\u00e1\u00e6\u00ea";
+ "\3\2\3\2\5\2\'\n\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\5\4\61\n\4\3\5\3\5"+
+ "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5E"+
+ "\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
+ "\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5"+
+ "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
+ "\5\5\5{\n\5\3\5\3\5\3\5\3\5\7\5\u0081\n\5\f\5\16\5\u0084\13\5\3\6\3\6"+
+ "\3\6\3\6\3\6\3\6\3\6\5\6\u008d\n\6\3\7\3\7\3\7\7\7\u0092\n\7\f\7\16\7"+
+ "\u0095\13\7\3\b\3\b\5\b\u0099\n\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3"+
+ "\f\3\r\3\r\3\r\3\r\7\r\u00a8\n\r\f\r\16\r\u00ab\13\r\3\r\3\r\3\16\3\16"+
+ "\3\16\7\16\u00b2\n\16\f\16\16\16\u00b5\13\16\3\16\3\16\3\16\7\16\u00ba"+
+ "\n\16\f\16\16\16\u00bd\13\16\5\16\u00bf\n\16\3\17\3\17\3\17\3\20\3\20"+
+ "\5\20\u00c6\n\20\3\20\3\20\3\21\3\21\5\21\u00cc\n\21\3\21\3\21\3\21\5"+
+ "\21\u00d1\n\21\7\21\u00d3\n\21\f\21\16\21\u00d6\13\21\3\22\3\22\3\22\2"+
+ "\2\3\b\23\2\2\4\2\6\2\b\2\n\2\f\2\16\2\20\2\22\2\24\2\26\2\30\2\32\2\34"+
+ "\2\36\2 \2\"\2\2\13\4\2\f\f \4\2((--\5\2\n\n\33\33\'\'\5\2\4\4\24\24"+
+ "\31\31\6\2\17\17\22\22$$))\4\2\21\21&&\4\2/\62\65\65\3\2\63\64\b\2\3\3"+
+ "\6\6\20\20\26\30\32\32\35\35\u00ee\2$\3\2\2\2\4(\3\2\2\2\6\60\3\2\2\2"+
+ "\bD\3\2\2\2\n\u008c\3\2\2\2\f\u008e\3\2\2\2\16\u0098\3\2\2\2\20\u009a"+
+ "\3\2\2\2\22\u009c\3\2\2\2\24\u009e\3\2\2\2\26\u00a0\3\2\2\2\30\u00a3\3"+
+ "\2\2\2\32\u00be\3\2\2\2\34\u00c0\3\2\2\2\36\u00c3\3\2\2\2 \u00c9\3\2\2"+
+ "\2\"\u00d7\3\2\2\2$&\5\b\5\2%\'\5\4\3\2&%\3\2\2\2&\'\3\2\2\2\'\3\3\2\2"+
+ "\2()\7\t\2\2)*\7\b\2\2*+\7!\2\2+,\5\6\4\2,\5\3\2\2\2-\61\5\16\b\2.\61"+
+ "\78\2\2/\61\5\20\t\2\60-\3\2\2\2\60.\3\2\2\2\60/\3\2\2\2\61\7\3\2\2\2"+
+ "\62\63\b\5\1\2\63\64\7\r\2\2\64\65\5\32\16\2\65\66\7\36\2\2\66\67\5\b"+
+ "\5\22\67E\3\2\2\289\t\2\2\29E\5\b\5\21:;\t\3\2\2;E\5\b\5\20<=\7\r\2\2"+
+ "=>\5\b\5\2>?\7\36\2\2?E\3\2\2\2@E\5\16\b\2AE\5\20\t\2BE\5\n\6\2CE\78\2"+
+ "\2D\62\3\2\2\2D8\3\2\2\2D:\3\2\2\2D<\3\2\2\2D@\3\2\2\2DA\3\2\2\2DB\3\2"+
+ "\2\2DC\3\2\2\2E\u0082\3\2\2\2FG\f\17\2\2GH\t\4\2\2H\u0081\5\b\5\20IJ\f"+
+ "\16\2\2JK\t\2\2\2K\u0081\5\b\5\17LM\f\r\2\2MN\t\5\2\2N\u0081\5\b\5\16"+
+ "OP\f\f\2\2PQ\t\6\2\2Q\u0081\5\b\5\rRS\f\n\2\2ST\t\7\2\2T\u0081\5\b\5\13"+
+ "UV\f\t\2\2VW\7\7\2\2W\u0081\5\b\5\nXY\f\b\2\2YZ\7\34\2\2Z\u0081\5\b\5"+
+ "\t[\\\f\7\2\2\\]\7+\2\2]\u0081\5\b\5\b^_\f\6\2\2_`\7\"\2\2`\u0081\5\b"+
+ "\5\7ab\f\5\2\2bc\7#\2\2c\u0081\5\b\5\6de\f\4\2\2ef\7\23\2\2fg\5\b\5\2"+
+ "gh\7\16\2\2hi\5\b\5\5i\u0081\3\2\2\2jk\f\3\2\2kl\7%\2\2l\u0081\5\b\5\4"+
+ "mn\f\25\2\2no\7\37\2\2o\u0081\7\66\2\2pq\f\24\2\2qr\7\13\2\2rs\5\b\5\2"+
+ "st\7\5\2\2t\u0081\3\2\2\2uv\f\23\2\2vw\7\37\2\2wx\7\66\2\2xz\7\r\2\2y"+
+ "{\5\f\7\2zy\3\2\2\2z{\3\2\2\2{|\3\2\2\2|\u0081\7\36\2\2}~\f\13\2\2~\177"+
+ "\7,\2\2\177\u0081\5\32\16\2\u0080F\3\2\2\2\u0080I\3\2\2\2\u0080L\3\2\2"+
+ "\2\u0080O\3\2\2\2\u0080R\3\2\2\2\u0080U\3\2\2\2\u0080X\3\2\2\2\u0080["+
+ "\3\2\2\2\u0080^\3\2\2\2\u0080a\3\2\2\2\u0080d\3\2\2\2\u0080j\3\2\2\2\u0080"+
+ "m\3\2\2\2\u0080p\3\2\2\2\u0080u\3\2\2\2\u0080}\3\2\2\2\u0081\u0084\3\2"+
+ "\2\2\u0082\u0080\3\2\2\2\u0082\u0083\3\2\2\2\u0083\t\3\2\2\2\u0084\u0082"+
+ "\3\2\2\2\u0085\u0086\5\32\16\2\u0086\u0087\7\37\2\2\u0087\u0088\7*\2\2"+
+ "\u0088\u008d\3\2\2\2\u0089\u008a\7\25\2\2\u008a\u008b\7\37\2\2\u008b\u008d"+
+ "\7*\2\2\u008c\u0085\3\2\2\2\u008c\u0089\3\2\2\2\u008d\13\3\2\2\2\u008e"+
+ "\u0093\5\b\5\2\u008f\u0090\7\t\2\2\u0090\u0092\5\b\5\2\u0091\u008f\3\2"+
+ "\2\2\u0092\u0095\3\2\2\2\u0093\u0091\3\2\2\2\u0093\u0094\3\2\2\2\u0094"+
+ "\r\3\2\2\2\u0095\u0093\3\2\2\2\u0096\u0099\5\22\n\2\u0097\u0099\5\24\13"+
+ "\2\u0098\u0096\3\2\2\2\u0098\u0097\3\2\2\2\u0099\17\3\2\2\2\u009a\u009b"+
+ "\7\66\2\2\u009b\21\3\2\2\2\u009c\u009d\t\b\2\2\u009d\23\3\2\2\2\u009e"+
+ "\u009f\t\t\2\2\u009f\25\3\2\2\2\u00a0\u00a1\5\30\r\2\u00a1\u00a2\5\34"+
+ "\17\2\u00a2\27\3\2\2\2\u00a3\u00a4\7\17\2\2\u00a4\u00a9\5\32\16\2\u00a5"+
+ "\u00a6\7\t\2\2\u00a6\u00a8\5\32\16\2\u00a7\u00a5\3\2\2\2\u00a8\u00ab\3"+
+ "\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00ac\3\2\2\2\u00ab"+
+ "\u00a9\3\2\2\2\u00ac\u00ad\7$\2\2\u00ad\31\3\2\2\2\u00ae\u00b3\5 \21\2"+
+ "\u00af\u00b0\7\13\2\2\u00b0\u00b2\7\5\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b5"+
+ "\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4\u00bf\3\2\2\2\u00b5"+
+ "\u00b3\3\2\2\2\u00b6\u00bb\5\"\22\2\u00b7\u00b8\7\13\2\2\u00b8\u00ba\7"+
+ "\5\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00bd\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bb"+
+ "\u00bc\3\2\2\2\u00bc\u00bf\3\2\2\2\u00bd\u00bb\3\2\2\2\u00be\u00ae\3\2"+
+ "\2\2\u00be\u00b6\3\2\2\2\u00bf\33\3\2\2\2\u00c0\u00c1\7\66\2\2\u00c1\u00c2"+
+ "\5\36\20\2\u00c2\35\3\2\2\2\u00c3\u00c5\7\r\2\2\u00c4\u00c6\5\f\7\2\u00c5"+
+ "\u00c4\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c8\7\36"+
+ "\2\2\u00c8\37\3\2\2\2\u00c9\u00cb\5\20\t\2\u00ca\u00cc\5\30\r\2\u00cb"+
+ "\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00d4\3\2\2\2\u00cd\u00ce\7\37"+
+ "\2\2\u00ce\u00d0\7\66\2\2\u00cf\u00d1\5\30\r\2\u00d0\u00cf\3\2\2\2\u00d0"+
+ "\u00d1\3\2\2\2\u00d1\u00d3\3\2\2\2\u00d2\u00cd\3\2\2\2\u00d3\u00d6\3\2"+
+ "\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5!\3\2\2\2\u00d6\u00d4"+
+ "\3\2\2\2\u00d7\u00d8\t\n\2\2\u00d8#\3\2\2\2\23&\60Dz\u0080\u0082\u008c"+
+ "\u0093\u0098\u00a9\u00b3\u00bb\u00be\u00c5\u00cb\u00d0\u00d4";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
index 70fb7d0..e010f23 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
@@ -52,13 +52,6 @@
Result visitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx);
/**
- * Visit a parse tree produced by {@link BindingExpressionParser#expressionList}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
-
- /**
* Visit a parse tree produced by the {@code MethodInvocation}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -67,6 +60,13 @@
Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
/**
+ * Visit a parse tree produced by {@link BindingExpressionParser#expressionList}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
+
+ /**
* Visit a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
* @param ctx the parse tree
* @return the visitor result
@@ -180,14 +180,6 @@
Result visitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
/**
- * Visit a parse tree produced by the {@code ExplicitGenericInvocationOp}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- Result visitExplicitGenericInvocationOp(@NotNull BindingExpressionParser.ExplicitGenericInvocationOpContext ctx);
-
- /**
* Visit a parse tree produced by {@link BindingExpressionParser#typeArguments}.
* @param ctx the parse tree
* @return the visitor result
@@ -203,14 +195,6 @@
Result visitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
/**
- * Visit a parse tree produced by the {@code GenericCall}
- * labeled alternative in {@link BindingExpressionParser#expression}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- Result visitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx);
-
- /**
* Visit a parse tree produced by the {@code MathOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -240,13 +224,6 @@
Result visitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
/**
- * Visit a parse tree produced by {@link BindingExpressionParser#constantExpression}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- Result visitConstantExpression(@NotNull BindingExpressionParser.ConstantExpressionContext ctx);
-
- /**
* Visit a parse tree produced by the {@code QuestionQuestionOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
diff --git a/grammerBuilder/src/test/java/com/android/databinding/BindingExpressionParserTest.java b/grammerBuilder/src/test/java/com/android/databinding/BindingExpressionParserTest.java
new file mode 100644
index 0000000..2c79a06
--- /dev/null
+++ b/grammerBuilder/src/test/java/com/android/databinding/BindingExpressionParserTest.java
@@ -0,0 +1,324 @@
+package com.android.databinding;
+
+import com.android.databinding.BindingExpressionParser.*;
+
+import junit.framework.TestCase;
+
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+import java.io.StringReader;
+
+public class BindingExpressionParserTest extends TestCase {
+ public void testSingleQuoteStringLiteral() throws Exception {
+ String expr = "`test`";
+ LiteralContext literal = parseLiteral(expr);
+ assertNotNull(literal);
+ StringLiteralContext stringLiteral = literal.stringLiteral();
+ assertNotNull(stringLiteral);
+ TerminalNode singleQuote = stringLiteral.SingleQuoteString();
+ Token token = singleQuote.getSymbol();
+ assertEquals("`test`", token.getText());
+ }
+
+ public void testDoubleQuoteStringLiteral() throws Exception {
+ String expr = "\"test\"";
+
+ LiteralContext literal = parseLiteral(expr);
+ StringLiteralContext stringLiteral = literal.stringLiteral();
+ TerminalNode singleQuote = stringLiteral.DoubleQuoteString();
+ Token token = singleQuote.getSymbol();
+ assertEquals("\"test\"", token.getText());
+ }
+
+ public void testSingleQuoteEscapeStringLiteral() throws Exception {
+ String expr = "`\"t\\`est\"`";
+ LiteralContext literal = parseLiteral(expr);
+ StringLiteralContext stringLiteral = literal.stringLiteral();
+ TerminalNode singleQuote = stringLiteral.SingleQuoteString();
+ Token token = singleQuote.getSymbol();
+ assertEquals("`\"t\\`est\"`", token.getText());
+ }
+
+ public void testCharLiteral() throws Exception {
+ LiteralContext literal = parseLiteral("'c'");
+ assertEquals("'c'", literal.getText());
+ literal = parseLiteral("'\\u0054'");
+ assertEquals("'\\u0054'", literal.getText());
+ literal = parseLiteral("'\\''");
+ assertEquals("'\\''", literal.getText());
+ }
+
+ public void testIntLiterals() throws Exception {
+ compareIntLiteral("123");
+ compareIntLiteral("123l");
+ compareIntLiteral("1_2_3l");
+ compareIntLiteral("123L");
+ compareIntLiteral("0xdeadbeef");
+ compareIntLiteral("0xdeadbeefl");
+ compareIntLiteral("0Xdeadbeef");
+ compareIntLiteral("0xdead_beefl");
+ compareIntLiteral("0xdead_beefL");
+ compareIntLiteral("01234567");
+ compareIntLiteral("01234567L");
+ compareIntLiteral("01234567l");
+ compareIntLiteral("0123_45_67l");
+ compareIntLiteral("0b0101");
+ compareIntLiteral("0b0101_0101");
+ compareIntLiteral("0B0101_0101");
+ compareIntLiteral("0B0101_0101L");
+ compareIntLiteral("0B0101_0101l");
+ }
+
+ public void testFloatLiterals() throws Exception {
+ compareFloatLiteral("0.12345");
+ compareFloatLiteral("0.12345f");
+ compareFloatLiteral("0.12345F");
+ compareFloatLiteral("132450.12345F");
+ compareFloatLiteral("132450.12345");
+ compareFloatLiteral("132450e123");
+ compareFloatLiteral("132450.4e123");
+ }
+
+ public void testBoolLiterals() throws Exception {
+ compareBoolLiteral("true");
+ compareBoolLiteral("false");
+ }
+
+ public void testNullLiteral() throws Exception {
+ LiteralContext literal = parseLiteral("null");
+ String token = literal.getText();
+ assertEquals("null", token);
+ }
+
+ public void testVoidExtraction() throws Exception {
+ PrimaryContext primary = parsePrimary("void.class");
+ assertNotNull(primary.classExtraction());
+ assertNull(primary.classExtraction().type());
+ assertEquals("void", primary.classExtraction().getChild(0).getText());
+ }
+
+ public void testPrimitiveClassExtraction() throws Exception {
+ PrimaryContext primary = parsePrimary("int.class");
+ PrimitiveTypeContext type = primary.classExtraction().type().primitiveType();
+ assertEquals("int", type.getText());
+ }
+
+ public void testIdentifier() throws Exception {
+ PrimaryContext primary = parsePrimary("abcdEfg");
+ assertEquals("abcdEfg", primary.identifier().getText());
+ }
+
+ public void testUnaryOperators() throws Exception {
+ compareUnaryOperators("+");
+ compareUnaryOperators("-");
+ compareUnaryOperators("!");
+ compareUnaryOperators("~");
+ }
+
+ public void testMathOperators() throws Exception {
+ compareMathOperators("+");
+ compareMathOperators("-");
+ compareMathOperators("*");
+ compareMathOperators("/");
+ compareMathOperators("%");
+ }
+
+ public void testBitShiftOperators() throws Exception {
+ compareBitShiftOperators(">>>");
+ compareBitShiftOperators("<<");
+ compareBitShiftOperators(">>");
+ }
+
+ public void testComparisonShiftOperators() throws Exception {
+ compareComparisonOperators("<");
+ compareComparisonOperators(">");
+ compareComparisonOperators("<=");
+ compareComparisonOperators(">=");
+ compareComparisonOperators("==");
+ compareComparisonOperators("!=");
+ }
+
+ public void testAndOrOperators() throws Exception {
+ compareAndOrOperators("&&");
+ compareAndOrOperators("||");
+ }
+
+ public void testBinaryOperators() throws Exception {
+ compareBinaryOperators("&");
+ compareBinaryOperators("|");
+ compareBinaryOperators("^");
+ }
+
+ public void testTernaryOperator() throws Exception {
+ TernaryOpContext expression = parseExpression("true ? 1 : 0");
+ assertEquals(5, expression.getChildCount());
+ assertEquals("true",
+ ((PrimaryContext) expression.left).literal().javaLiteral().getText());
+ assertEquals("?", expression.op.getText());
+ assertEquals("1",
+ ((PrimaryContext) expression.iftrue).literal().javaLiteral().getText());
+ assertEquals(":", expression.getChild(3).getText());
+ assertEquals("0", ((PrimaryContext)expression.iffalse).literal().javaLiteral().getText());
+ }
+
+ public void testDot() throws Exception {
+ DotOpContext expression = parseExpression("one.two.three");
+ assertEquals(3, expression.getChildCount());
+ assertEquals("three", expression.Identifier().getText());
+ assertEquals(".", expression.getChild(1).getText());
+ DotOpContext left = (DotOpContext) expression.expression();
+ assertEquals("two", left.Identifier().getText());
+ assertEquals(".", left.getChild(1).getText());
+ assertEquals("one", ((PrimaryContext) left.expression()).identifier().getText());
+ }
+
+ public void testQuestionQuestion() throws Exception {
+ QuestionQuestionOpContext expression = parseExpression("one ?? two");
+ assertEquals(3, expression.getChildCount());
+ assertEquals("one", ((PrimaryContext)expression.left).identifier().getText());
+ assertEquals("two", ((PrimaryContext)expression.right).identifier().getText());
+ assertEquals("??", expression.op.getText());
+ }
+
+ public void testResourceReference() throws Exception {
+ compareResource("@id/foo_bar");
+ compareResource("@transition/foo_bar");
+ compareResource("@anim/foo_bar");
+ compareResource("@animator/foo_bar");
+ compareResource("@android:id/foo_bar");
+ compareResource("@app:id/foo_bar");
+ }
+
+ public void testDefaults() throws Exception {
+ BindingSyntaxContext syntax = parseExpressionString("foo.bar, default = @id/foo_bar");
+ DefaultsContext defaults = syntax.defaults();
+ assertEquals("@id/foo_bar", defaults.constantValue().ResourceReference().getText());
+ }
+
+ public void testParentheses() throws Exception {
+ GroupingContext grouping = parseExpression("(1234)");
+ assertEquals("1234", grouping.expression().getText());
+ }
+
+ // ---------------------- Helpers --------------------
+
+ private void compareResource(String value) throws Exception {
+ ResourceContext primaryContext = parseExpression(value);
+ assertEquals(value, primaryContext.ResourceReference().getText());
+ }
+
+ private void compareUnaryOperators(String op) throws Exception {
+ UnaryOpContext expression = parseExpression(op + " 2");
+ assertEquals(2, expression.getChildCount());
+ assertEquals(op, expression.op.getText());
+ assertEquals("2",
+ ((PrimaryContext) expression.expression()).literal().javaLiteral()
+ .getText());
+ }
+
+ private void compareBinaryOperators(String op) throws Exception {
+ BinaryOpContext expression = parseExpression("1 " + op + " 2");
+ assertEquals(3, expression.getChildCount());
+ assertTrue(expression.left instanceof ExpressionContext);
+ String one = ((PrimaryContext)expression.left).literal().javaLiteral().getText();
+ assertEquals("1", one);
+ assertEquals(op, expression.op.getText());
+ assertTrue(expression.right instanceof ExpressionContext);
+ String two = ((PrimaryContext)expression.right).literal().javaLiteral().getText();
+ assertEquals("2", two);
+ }
+
+ private void compareMathOperators(String op) throws Exception {
+ MathOpContext expression = parseExpression("1 " + op + " 2");
+ assertEquals(3, expression.getChildCount());
+ assertTrue(expression.left instanceof ExpressionContext);
+ String one = ((PrimaryContext)expression.left).literal().javaLiteral().getText();
+ assertEquals("1", one);
+ assertEquals(op, expression.op.getText());
+ assertTrue(expression.right instanceof ExpressionContext);
+ String two = ((PrimaryContext)expression.right).literal().javaLiteral().getText();
+ assertEquals("2", two);
+ }
+
+ private void compareBitShiftOperators(String op) throws Exception {
+ BitShiftOpContext expression = parseExpression("1 " + op + " 2");
+ assertEquals(3, expression.getChildCount());
+ assertTrue(expression.left instanceof ExpressionContext);
+ String one = ((PrimaryContext)expression.left).literal().javaLiteral().getText();
+ assertEquals("1", one);
+ assertEquals(op, expression.op.getText());
+ assertTrue(expression.right instanceof ExpressionContext);
+ String two = ((PrimaryContext)expression.right).literal().javaLiteral().getText();
+ assertEquals("2", two);
+ }
+
+ private void compareComparisonOperators(String op) throws Exception {
+ ComparisonOpContext expression = parseExpression("1 " + op + " 2");
+ assertEquals(3, expression.getChildCount());
+ assertTrue(expression.left instanceof ExpressionContext);
+ String one = ((PrimaryContext)expression.left).literal().javaLiteral().getText();
+ assertEquals("1", one);
+ assertEquals(op, expression.op.getText());
+ assertTrue(expression.right instanceof ExpressionContext);
+ String two = ((PrimaryContext)expression.right).literal().javaLiteral().getText();
+ assertEquals("2", two);
+ }
+
+ private void compareAndOrOperators(String op) throws Exception {
+ AndOrOpContext expression = parseExpression("1 " + op + " 2");
+ assertEquals(3, expression.getChildCount());
+ assertTrue(expression.left instanceof ExpressionContext);
+ String one = ((PrimaryContext)expression.left).literal().javaLiteral().getText();
+ assertEquals("1", one);
+ assertEquals(op, expression.op.getText());
+ assertTrue(expression.right instanceof ExpressionContext);
+ String two = ((PrimaryContext)expression.right).literal().javaLiteral().getText();
+ assertEquals("2", two);
+ }
+
+ private void compareIntLiteral(String constant) throws Exception {
+ LiteralContext literal = parseLiteral(constant);
+ String token = literal.javaLiteral().getText();
+ assertEquals(constant, token);
+ }
+
+ private void compareFloatLiteral(String constant) throws Exception {
+ LiteralContext literal = parseLiteral(constant);
+ String token = literal.javaLiteral().getText();
+ assertEquals(constant, token);
+ }
+
+ private void compareBoolLiteral(String constant) throws Exception {
+ LiteralContext literal = parseLiteral(constant);
+ String token = literal.javaLiteral().getText();
+ assertEquals(constant, token);
+ }
+
+ private BindingSyntaxContext parse(String value) throws Exception {
+ return parseExpressionString(value);
+ }
+
+ private <T extends ExpressionContext> T parseExpression(String value) throws Exception {
+ ExpressionContext expressionContext = parse(value).expression();
+ return (T) expressionContext;
+ }
+
+ private PrimaryContext parsePrimary(String value) throws Exception {
+ return parseExpression(value);
+ }
+
+ private LiteralContext parseLiteral(String value) throws Exception {
+ return parsePrimary(value).literal();
+ }
+
+ BindingExpressionParser.BindingSyntaxContext parseExpressionString(String s) throws Exception {
+ ANTLRInputStream input = new ANTLRInputStream(new StringReader(s));
+ BindingExpressionLexer lexer = new BindingExpressionLexer(input);
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ BindingExpressionParser parser = new BindingExpressionParser(tokens);
+ return parser.bindingSyntax();
+ }
+}
\ No newline at end of file