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