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
