Fix precedence of chained ternary operation.

Bug 22108739

Change-Id: I443da537f51e503edbeb269db7432757d58887a9
diff --git a/compilerCommon/BindingExpression.g4 b/compilerCommon/BindingExpression.g4
index 3142507..0835a14 100644
--- a/compilerCommon/BindingExpression.g4
+++ b/compilerCommon/BindingExpression.g4
@@ -66,7 +66,7 @@
     |   left=expression op='|' right=expression                       # BinaryOp
     |   left=expression op='&&' right=expression                      # AndOrOp
     |   left=expression op='||' right=expression                      # AndOrOp
-    |   left=expression op='?' iftrue=expression ':' iffalse=expression        # TernaryOp
+    |   <assoc=right>left=expression op='?' iftrue=expression ':' iffalse=expression # TernaryOp
     |   left=expression op='??' right=expression                      # QuestionQuestionOp
     ;
 
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpression.tokens b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpression.tokens
index d379280..d9d1035 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpression.tokens
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpression.tokens
@@ -1,101 +1,101 @@
-NullLiteral=51
-T__29=14
-T__28=15
-T__27=16
-T__26=17
-T__25=18
-T__24=19
-T__23=20
-T__22=21
-CharacterLiteral=48
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+T__6=7
+T__7=8
+T__8=9
+T__9=10
+T__10=11
+T__11=12
+T__12=13
+T__13=14
+T__14=15
+T__15=16
+T__16=17
+T__17=18
+T__18=19
+T__19=20
+T__20=21
 T__21=22
-T__20=23
-SingleQuoteString=49
-T__9=34
-T__8=35
-Identifier=52
-T__7=36
-T__6=37
-T__5=38
-T__4=39
-T__19=24
-T__16=27
-T__15=28
-T__18=25
-T__17=26
-T__12=31
-T__11=32
-T__14=29
-T__13=30
-T__10=33
+T__22=23
+T__23=24
+T__24=25
+T__25=26
+T__26=27
+T__27=28
+T__28=29
+T__29=30
+T__30=31
+T__31=32
+T__32=33
+T__33=34
+T__34=35
+T__35=36
+T__36=37
+T__37=38
+T__38=39
+T__39=40
+T__40=41
+T__41=42
+T__42=43
 THIS=44
-PackageName=55
-DoubleQuoteString=50
-T__42=1
-T__40=3
-T__41=2
-ResourceType=56
-T__30=13
-T__31=12
-T__32=11
-WS=53
-T__33=10
-T__34=9
-T__35=8
-T__36=7
-T__37=6
-T__38=5
-T__39=4
-T__1=42
-T__0=43
-FloatingPointLiteral=46
-T__3=40
-T__2=41
 IntegerLiteral=45
-ResourceReference=54
+FloatingPointLiteral=46
 BooleanLiteral=47
-'!'=43
-'instanceof'=42
-'|'=41
-'class'=40
-'>='=39
-'~'=38
-'/'=37
-'=='=36
-'??'=35
-'null'=51
-'>'=34
-'||'=33
-'this'=44
-'&&'=32
-'='=31
-'+'=30
-'.'=29
-')'=28
-'byte'=27
-'^'=26
-'%'=25
-'>>'=23
-'char'=24
-'float'=22
-'boolean'=21
-'double'=20
-'<<'=18
-'void'=19
-'?'=17
-'<='=16
-'!='=15
-'<'=13
-'int'=14
-':'=12
-'('=11
+CharacterLiteral=48
+SingleQuoteString=49
+DoubleQuoteString=50
+NullLiteral=51
+Identifier=52
+WS=53
+ResourceReference=54
+PackageName=55
+ResourceType=56
+','=1
+'default'=2
+'='=3
+'('=4
+')'=5
+'.'=6
+'['=7
+']'=8
+'+'=9
 '-'=10
-'['=9
-'*'=8
-','=7
-'default'=6
-'&'=5
-'short'=4
-']'=3
-'>>>'=2
-'long'=1
+'~'=11
+'!'=12
+'*'=13
+'/'=14
+'%'=15
+'<<'=16
+'>>>'=17
+'>>'=18
+'<='=19
+'>='=20
+'>'=21
+'<'=22
+'instanceof'=23
+'=='=24
+'!='=25
+'&'=26
+'^'=27
+'|'=28
+'&&'=29
+'||'=30
+'?'=31
+':'=32
+'??'=33
+'class'=34
+'void'=35
+'boolean'=36
+'char'=37
+'byte'=38
+'short'=39
+'int'=40
+'long'=41
+'float'=42
+'double'=43
+'this'=44
+'null'=51
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseListener.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseListener.java
index 400c422..2b11492 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseListener.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseListener.java
@@ -1,7 +1,8 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
 
 import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.misc.NotNull;
 import org.antlr.v4.runtime.tree.ErrorNode;
 import org.antlr.v4.runtime.tree.TerminalNode;
@@ -17,32 +18,6 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
 	@Override public void enterBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx) { }
 	/**
 	 * {@inheritDoc}
@@ -56,13 +31,13 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
+	@Override public void enterResource(@NotNull BindingExpressionParser.ResourceContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
+	@Override public void exitResource(@NotNull BindingExpressionParser.ResourceContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -82,13 +57,13 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { }
+	@Override public void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { }
+	@Override public void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -121,45 +96,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 enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
 	@Override public void enterPrimary(@NotNull BindingExpressionParser.PrimaryContext ctx) { }
 	/**
 	 * {@inheritDoc}
@@ -173,39 +109,13 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterType(@NotNull BindingExpressionParser.TypeContext ctx) { }
+	@Override public void enterGrouping(@NotNull BindingExpressionParser.GroupingContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitType(@NotNull BindingExpressionParser.TypeContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
+	@Override public void exitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -225,13 +135,13 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { }
+	@Override public void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { }
+	@Override public void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -251,13 +161,26 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { }
+	@Override public void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { }
+	@Override public void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -303,65 +226,52 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx) { }
+	@Override public void enterBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx) { }
+	@Override public void exitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterResource(@NotNull BindingExpressionParser.ResourceContext ctx) { }
+	@Override public void enterDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitResource(@NotNull BindingExpressionParser.ResourceContext ctx) { }
+	@Override public void exitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { }
+	@Override public void enterConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { }
+	@Override public void exitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterGrouping(@NotNull BindingExpressionParser.GroupingContext ctx) { }
+	@Override public void enterExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
+	@Override public void exitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -381,65 +291,26 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { }
+	@Override public void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { }
+	@Override public void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx) { }
+	@Override public void enterLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void enterExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { }
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation does nothing.</p>
-	 */
-	@Override public void exitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { }
+	@Override public void exitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
@@ -459,13 +330,143 @@
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void enterLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { }
+	@Override public void enterJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { }
 	/**
 	 * {@inheritDoc}
 	 *
 	 * <p>The default implementation does nothing.</p>
 	 */
-	@Override public void exitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { }
+	@Override public void exitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterType(@NotNull BindingExpressionParser.TypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitType(@NotNull BindingExpressionParser.TypeContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { }
 
 	/**
 	 * {@inheritDoc}
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseVisitor.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseVisitor.java
index a664007..08c54fa 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseVisitor.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionBaseVisitor.java
@@ -1,5 +1,6 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
+import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.misc.NotNull;
 import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
 
@@ -18,22 +19,6 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
 	@Override public Result visitBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx) { return visitChildren(ctx); }
 
 	/**
@@ -42,7 +27,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitResource(@NotNull BindingExpressionParser.ResourceContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -58,7 +43,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -82,30 +67,6 @@
 	 * <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); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
 	@Override public Result visitPrimary(@NotNull BindingExpressionParser.PrimaryContext ctx) { return visitChildren(ctx); }
 
 	/**
@@ -114,23 +75,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitType(@NotNull BindingExpressionParser.TypeContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -146,7 +91,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -162,7 +107,15 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext 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); }
 
 	/**
 	 * {@inheritDoc}
@@ -194,7 +147,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -202,7 +155,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitResource(@NotNull BindingExpressionParser.ResourceContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -210,7 +163,7 @@
 	 * <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); }
+	@Override public Result visitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -218,15 +171,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitGrouping(@NotNull BindingExpressionParser.GroupingContext 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); }
+	@Override public Result visitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -242,7 +187,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -250,31 +195,7 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext 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); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { return visitChildren(ctx); }
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * <p>The default implementation returns the result of calling
-	 * {@link #visitChildren} on {@code ctx}.</p>
-	 */
-	@Override public Result visitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { return visitChildren(ctx); }
 
 	/**
 	 * {@inheritDoc}
@@ -290,5 +211,85 @@
 	 * <p>The default implementation returns the result of calling
 	 * {@link #visitChildren} on {@code ctx}.</p>
 	 */
-	@Override public Result visitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx) { return visitChildren(ctx); }
+	@Override public Result visitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext 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); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitType(@NotNull BindingExpressionParser.TypeContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitResources(@NotNull BindingExpressionParser.ResourcesContext ctx) { return visitChildren(ctx); }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation returns the result of calling
+	 * {@link #visitChildren} on {@code ctx}.</p>
+	 */
+	@Override public Result visitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx) { return visitChildren(ctx); }
 }
\ No newline at end of file
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.java
index 47eb769..898ab4e 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.java
@@ -1,4 +1,4 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
 import org.antlr.v4.runtime.Lexer;
 import org.antlr.v4.runtime.CharStream;
@@ -11,12 +11,12 @@
 
 public class BindingExpressionLexer extends Lexer {
 	public static final int
-		T__42=1, T__41=2, T__40=3, T__39=4, T__38=5, T__37=6, T__36=7, T__35=8, 
-		T__34=9, T__33=10, T__32=11, T__31=12, T__30=13, T__29=14, T__28=15, T__27=16, 
-		T__26=17, T__25=18, T__24=19, T__23=20, T__22=21, T__21=22, T__20=23, 
-		T__19=24, T__18=25, T__17=26, T__16=27, T__15=28, T__14=29, T__13=30, 
-		T__12=31, T__11=32, T__10=33, T__9=34, T__8=35, T__7=36, T__6=37, T__5=38, 
-		T__4=39, T__3=40, T__2=41, T__1=42, T__0=43, THIS=44, IntegerLiteral=45, 
+		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, 
+		T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, 
+		T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, 
+		T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, 
+		T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, 
+		T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, THIS=44, IntegerLiteral=45, 
 		FloatingPointLiteral=46, BooleanLiteral=47, CharacterLiteral=48, SingleQuoteString=49, 
 		DoubleQuoteString=50, NullLiteral=51, Identifier=52, WS=53, ResourceReference=54, 
 		PackageName=55, ResourceType=56;
@@ -24,23 +24,13 @@
 		"DEFAULT_MODE"
 	};
 
-	public static final String[] tokenNames = {
-		"'\\u0000'", "'\\u0001'", "'\\u0002'", "'\\u0003'", "'\\u0004'", "'\\u0005'", 
-		"'\\u0006'", "'\\u0007'", "'\b'", "'\t'", "'\n'", "'\\u000B'", "'\f'", 
-		"'\r'", "'\\u000E'", "'\\u000F'", "'\\u0010'", "'\\u0011'", "'\\u0012'", 
-		"'\\u0013'", "'\\u0014'", "'\\u0015'", "'\\u0016'", "'\\u0017'", "'\\u0018'", 
-		"'\\u0019'", "'\\u001A'", "'\\u001B'", "'\\u001C'", "'\\u001D'", "'\\u001E'", 
-		"'\\u001F'", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''", 
-		"'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'", 
-		"'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'"
-	};
 	public static final String[] ruleNames = {
-		"T__42", "T__41", "T__40", "T__39", "T__38", "T__37", "T__36", "T__35", 
-		"T__34", "T__33", "T__32", "T__31", "T__30", "T__29", "T__28", "T__27", 
-		"T__26", "T__25", "T__24", "T__23", "T__22", "T__21", "T__20", "T__19", 
-		"T__18", "T__17", "T__16", "T__15", "T__14", "T__13", "T__12", "T__11", 
-		"T__10", "T__9", "T__8", "T__7", "T__6", "T__5", "T__4", "T__3", "T__2", 
-		"T__1", "T__0", "THIS", "IntegerLiteral", "DecimalIntegerLiteral", "HexIntegerLiteral", 
+		"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", 
+		"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", 
+		"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", 
+		"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", 
+		"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", 
+		"T__41", "T__42", "THIS", "IntegerLiteral", "DecimalIntegerLiteral", "HexIntegerLiteral", 
 		"OctalIntegerLiteral", "BinaryIntegerLiteral", "IntegerTypeSuffix", "DecimalNumeral", 
 		"Digits", "Digit", "NonZeroDigit", "DigitOrUnderscore", "Underscores", 
 		"HexNumeral", "HexDigits", "HexDigit", "HexDigitOrUnderscore", "OctalNumeral", 
@@ -55,6 +45,56 @@
 		"JavaLetterOrDigit", "WS", "ResourceReference", "PackageName", "ResourceType"
 	};
 
+	private static final String[] _LITERAL_NAMES = {
+		null, "','", "'default'", "'='", "'('", "')'", "'.'", "'['", "']'", "'+'", 
+		"'-'", "'~'", "'!'", "'*'", "'/'", "'%'", "'<<'", "'>>>'", "'>>'", "'<='", 
+		"'>='", "'>'", "'<'", "'instanceof'", "'=='", "'!='", "'&'", "'^'", "'|'", 
+		"'&&'", "'||'", "'?'", "':'", "'??'", "'class'", "'void'", "'boolean'", 
+		"'char'", "'byte'", "'short'", "'int'", "'long'", "'float'", "'double'", 
+		"'this'", null, null, null, null, null, null, "'null'"
+	};
+	private static final String[] _SYMBOLIC_NAMES = {
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, "THIS", "IntegerLiteral", 
+		"FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "SingleQuoteString", 
+		"DoubleQuoteString", "NullLiteral", "Identifier", "WS", "ResourceReference", 
+		"PackageName", "ResourceType"
+	};
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+	@NotNull
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
 
 	public BindingExpressionLexer(CharStream input) {
 		super(input);
@@ -65,9 +105,6 @@
 	public String getGrammarFileName() { return "BindingExpression.g4"; }
 
 	@Override
-	public String[] getTokenNames() { return tokenNames; }
-
-	@Override
 	public String[] getRuleNames() { return ruleNames; }
 
 	@Override
@@ -79,25 +116,31 @@
 	@Override
 	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
 		switch (ruleIndex) {
-		case 93 : return JavaLetter_sempred(_localctx, predIndex);
+		case 93:
+			return JavaLetter_sempred(_localctx, predIndex);
 
-		case 94 : return JavaLetterOrDigit_sempred(_localctx, predIndex);
-		}
-		return true;
-	}
-	private boolean JavaLetterOrDigit_sempred(RuleContext _localctx, int predIndex) {
-		switch (predIndex) {
-		case 2: return Character.isJavaIdentifierPart(_input.LA(-1));
-
-		case 3: return Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
+		case 94:
+			return JavaLetterOrDigit_sempred(_localctx, predIndex);
 		}
 		return true;
 	}
 	private boolean JavaLetter_sempred(RuleContext _localctx, int predIndex) {
 		switch (predIndex) {
-		case 0: return Character.isJavaIdentifierStart(_input.LA(-1));
+		case 0:
+			return Character.isJavaIdentifierStart(_input.LA(-1));
 
-		case 1: return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
+		case 1:
+			return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
+		}
+		return true;
+	}
+	private boolean JavaLetterOrDigit_sempred(RuleContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 2:
+			return Character.isJavaIdentifierPart(_input.LA(-1));
+
+		case 3:
+			return Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
 		}
 		return true;
 	}
@@ -114,132 +157,132 @@
 		"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
 		"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
 		"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
-		"`\t`\4a\ta\4b\tb\4c\tc\4d\td\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3"+
-		"\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b"+
-		"\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\17"+
-		"\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24"+
-		"\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\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.\5.\u0168\n.\3/\3/"+
-		"\5/\u016c\n/\3\60\3\60\5\60\u0170\n\60\3\61\3\61\5\61\u0174\n\61\3\62"+
-		"\3\62\5\62\u0178\n\62\3\63\3\63\3\64\3\64\3\64\5\64\u017f\n\64\3\64\3"+
-		"\64\3\64\5\64\u0184\n\64\5\64\u0186\n\64\3\65\3\65\7\65\u018a\n\65\f\65"+
-		"\16\65\u018d\13\65\3\65\5\65\u0190\n\65\3\66\3\66\5\66\u0194\n\66\3\67"+
-		"\3\67\38\38\58\u019a\n8\39\69\u019d\n9\r9\169\u019e\3:\3:\3:\3:\3;\3;"+
-		"\7;\u01a7\n;\f;\16;\u01aa\13;\3;\5;\u01ad\n;\3<\3<\3=\3=\5=\u01b3\n=\3"+
-		">\3>\5>\u01b7\n>\3>\3>\3?\3?\7?\u01bd\n?\f?\16?\u01c0\13?\3?\5?\u01c3"+
-		"\n?\3@\3@\3A\3A\5A\u01c9\nA\3B\3B\3B\3B\3C\3C\7C\u01d1\nC\fC\16C\u01d4"+
-		"\13C\3C\5C\u01d7\nC\3D\3D\3E\3E\5E\u01dd\nE\3F\3F\5F\u01e1\nF\3G\3G\3"+
-		"G\5G\u01e6\nG\3G\5G\u01e9\nG\3G\5G\u01ec\nG\3G\3G\3G\5G\u01f1\nG\3G\5"+
-		"G\u01f4\nG\3G\3G\3G\5G\u01f9\nG\3G\3G\3G\5G\u01fe\nG\3H\3H\3H\3I\3I\3"+
-		"J\5J\u0206\nJ\3J\3J\3K\3K\3L\3L\3M\3M\3M\5M\u0211\nM\3N\3N\5N\u0215\n"+
-		"N\3N\3N\3N\5N\u021a\nN\3N\3N\5N\u021e\nN\3O\3O\3O\3P\3P\3Q\3Q\3Q\3Q\3"+
-		"Q\3Q\3Q\3Q\3Q\5Q\u022e\nQ\3R\3R\3R\3R\3R\3R\3R\3R\5R\u0238\nR\3S\3S\3"+
-		"T\3T\7T\u023e\nT\fT\16T\u0241\13T\3T\3T\3U\3U\5U\u0247\nU\3U\3U\3V\6V"+
-		"\u024c\nV\rV\16V\u024d\3W\3W\5W\u0252\nW\3X\3X\5X\u0256\nX\3Y\3Y\3Y\3"+
-		"Y\5Y\u025c\nY\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\3Z\5Z\u0269\nZ\3[\3[\3[\3"+
-		"[\3[\3[\3[\3\\\3\\\3]\3]\3]\3]\3]\3^\3^\7^\u027b\n^\f^\16^\u027e\13^\3"+
-		"_\3_\3_\3_\3_\3_\5_\u0286\n_\3`\3`\3`\3`\3`\3`\5`\u028e\n`\3a\6a\u0291"+
-		"\na\ra\16a\u0292\3a\3a\3b\3b\3b\3b\5b\u029b\nb\3b\3b\3b\3b\3c\3c\3c\3"+
-		"c\3c\3c\3c\3c\5c\u02a9\nc\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3d\3"+
+		"`\t`\4a\ta\4b\tb\4c\tc\4d\td\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"+
+		"\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3"+
+		"\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22"+
+		"\3\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\26\3\26\3\27\3\27"+
+		"\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31"+
+		"\3\32\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\37\3\37"+
+		"\3\37\3 \3 \3!\3!\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3%\3%\3"+
+		"%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3("+
+		"\3)\3)\3)\3)\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3-"+
+		"\3-\3-\3-\3-\3.\3.\3.\3.\5.\u0168\n.\3/\3/\5/\u016c\n/\3\60\3\60\5\60"+
+		"\u0170\n\60\3\61\3\61\5\61\u0174\n\61\3\62\3\62\5\62\u0178\n\62\3\63\3"+
+		"\63\3\64\3\64\3\64\5\64\u017f\n\64\3\64\3\64\3\64\5\64\u0184\n\64\5\64"+
+		"\u0186\n\64\3\65\3\65\7\65\u018a\n\65\f\65\16\65\u018d\13\65\3\65\5\65"+
+		"\u0190\n\65\3\66\3\66\5\66\u0194\n\66\3\67\3\67\38\38\58\u019a\n8\39\6"+
+		"9\u019d\n9\r9\169\u019e\3:\3:\3:\3:\3;\3;\7;\u01a7\n;\f;\16;\u01aa\13"+
+		";\3;\5;\u01ad\n;\3<\3<\3=\3=\5=\u01b3\n=\3>\3>\5>\u01b7\n>\3>\3>\3?\3"+
+		"?\7?\u01bd\n?\f?\16?\u01c0\13?\3?\5?\u01c3\n?\3@\3@\3A\3A\5A\u01c9\nA"+
+		"\3B\3B\3B\3B\3C\3C\7C\u01d1\nC\fC\16C\u01d4\13C\3C\5C\u01d7\nC\3D\3D\3"+
+		"E\3E\5E\u01dd\nE\3F\3F\5F\u01e1\nF\3G\3G\3G\5G\u01e6\nG\3G\5G\u01e9\n"+
+		"G\3G\5G\u01ec\nG\3G\3G\3G\5G\u01f1\nG\3G\5G\u01f4\nG\3G\3G\3G\5G\u01f9"+
+		"\nG\3G\3G\3G\5G\u01fe\nG\3H\3H\3H\3I\3I\3J\5J\u0206\nJ\3J\3J\3K\3K\3L"+
+		"\3L\3M\3M\3M\5M\u0211\nM\3N\3N\5N\u0215\nN\3N\3N\3N\5N\u021a\nN\3N\3N"+
+		"\5N\u021e\nN\3O\3O\3O\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3Q\5Q\u022e\nQ\3R"+
+		"\3R\3R\3R\3R\3R\3R\3R\5R\u0238\nR\3S\3S\3T\3T\7T\u023e\nT\fT\16T\u0241"+
+		"\13T\3T\3T\3U\3U\5U\u0247\nU\3U\3U\3V\6V\u024c\nV\rV\16V\u024d\3W\3W\5"+
+		"W\u0252\nW\3X\3X\5X\u0256\nX\3Y\3Y\3Y\3Y\5Y\u025c\nY\3Z\3Z\3Z\3Z\3Z\3"+
+		"Z\3Z\3Z\3Z\3Z\3Z\5Z\u0269\nZ\3[\3[\3[\3[\3[\3[\3[\3\\\3\\\3]\3]\3]\3]"+
+		"\3]\3^\3^\7^\u027b\n^\f^\16^\u027e\13^\3_\3_\3_\3_\3_\3_\5_\u0286\n_\3"+
+		"`\3`\3`\3`\3`\3`\5`\u028e\n`\3a\6a\u0291\na\ra\16a\u0292\3a\3a\3b\3b\3"+
+		"b\3b\5b\u029b\nb\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3c\3c\5c\u02a9\nc\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\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\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\5d\u0357\n"+
-		"d\2\2\2e\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\29\u00c7\2:\3\2\30\4\2NNnn\3\2\63;\4\2ZZzz\5\2\62;CHch\3\2\62"+
-		"9\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"+
-		"\"\"\u037b\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\u00c5\3\2\2"+
-		"\2\2\u00c7\3\2\2\2\3\u00c9\3\2\2\2\5\u00ce\3\2\2\2\7\u00d2\3\2\2\2\t\u00d4"+
-		"\3\2\2\2\13\u00da\3\2\2\2\r\u00dc\3\2\2\2\17\u00e4\3\2\2\2\21\u00e6\3"+
-		"\2\2\2\23\u00e8\3\2\2\2\25\u00ea\3\2\2\2\27\u00ec\3\2\2\2\31\u00ee\3\2"+
-		"\2\2\33\u00f0\3\2\2\2\35\u00f2\3\2\2\2\37\u00f6\3\2\2\2!\u00f9\3\2\2\2"+
-		"#\u00fc\3\2\2\2%\u00fe\3\2\2\2\'\u0101\3\2\2\2)\u0106\3\2\2\2+\u010d\3"+
-		"\2\2\2-\u0115\3\2\2\2/\u011b\3\2\2\2\61\u011e\3\2\2\2\63\u0123\3\2\2\2"+
-		"\65\u0125\3\2\2\2\67\u0127\3\2\2\29\u012c\3\2\2\2;\u012e\3\2\2\2=\u0130"+
-		"\3\2\2\2?\u0132\3\2\2\2A\u0134\3\2\2\2C\u0137\3\2\2\2E\u013a\3\2\2\2G"+
-		"\u013c\3\2\2\2I\u013f\3\2\2\2K\u0142\3\2\2\2M\u0144\3\2\2\2O\u0146\3\2"+
-		"\2\2Q\u0149\3\2\2\2S\u014f\3\2\2\2U\u0151\3\2\2\2W\u015c\3\2\2\2Y\u015e"+
-		"\3\2\2\2[\u0167\3\2\2\2]\u0169\3\2\2\2_\u016d\3\2\2\2a\u0171\3\2\2\2c"+
-		"\u0175\3\2\2\2e\u0179\3\2\2\2g\u0185\3\2\2\2i\u0187\3\2\2\2k\u0193\3\2"+
-		"\2\2m\u0195\3\2\2\2o\u0199\3\2\2\2q\u019c\3\2\2\2s\u01a0\3\2\2\2u\u01a4"+
-		"\3\2\2\2w\u01ae\3\2\2\2y\u01b2\3\2\2\2{\u01b4\3\2\2\2}\u01ba\3\2\2\2\177"+
-		"\u01c4\3\2\2\2\u0081\u01c8\3\2\2\2\u0083\u01ca\3\2\2\2\u0085\u01ce\3\2"+
-		"\2\2\u0087\u01d8\3\2\2\2\u0089\u01dc\3\2\2\2\u008b\u01e0\3\2\2\2\u008d"+
-		"\u01fd\3\2\2\2\u008f\u01ff\3\2\2\2\u0091\u0202\3\2\2\2\u0093\u0205\3\2"+
-		"\2\2\u0095\u0209\3\2\2\2\u0097\u020b\3\2\2\2\u0099\u020d\3\2\2\2\u009b"+
-		"\u021d\3\2\2\2\u009d\u021f\3\2\2\2\u009f\u0222\3\2\2\2\u00a1\u022d\3\2"+
-		"\2\2\u00a3\u0237\3\2\2\2\u00a5\u0239\3\2\2\2\u00a7\u023b\3\2\2\2\u00a9"+
-		"\u0244\3\2\2\2\u00ab\u024b\3\2\2\2\u00ad\u0251\3\2\2\2\u00af\u0255\3\2"+
-		"\2\2\u00b1\u025b\3\2\2\2\u00b3\u0268\3\2\2\2\u00b5\u026a\3\2\2\2\u00b7"+
-		"\u0271\3\2\2\2\u00b9\u0273\3\2\2\2\u00bb\u0278\3\2\2\2\u00bd\u0285\3\2"+
-		"\2\2\u00bf\u028d\3\2\2\2\u00c1\u0290\3\2\2\2\u00c3\u0296\3\2\2\2\u00c5"+
-		"\u02a8\3\2\2\2\u00c7\u0356\3\2\2\2\u00c9\u00ca\7n\2\2\u00ca\u00cb\7q\2"+
-		"\2\u00cb\u00cc\7p\2\2\u00cc\u00cd\7i\2\2\u00cd\4\3\2\2\2\u00ce\u00cf\7"+
-		"@\2\2\u00cf\u00d0\7@\2\2\u00d0\u00d1\7@\2\2\u00d1\6\3\2\2\2\u00d2\u00d3"+
-		"\7_\2\2\u00d3\b\3\2\2\2\u00d4\u00d5\7u\2\2\u00d5\u00d6\7j\2\2\u00d6\u00d7"+
-		"\7q\2\2\u00d7\u00d8\7t\2\2\u00d8\u00d9\7v\2\2\u00d9\n\3\2\2\2\u00da\u00db"+
-		"\7(\2\2\u00db\f\3\2\2\2\u00dc\u00dd\7f\2\2\u00dd\u00de\7g\2\2\u00de\u00df"+
-		"\7h\2\2\u00df\u00e0\7c\2\2\u00e0\u00e1\7w\2\2\u00e1\u00e2\7n\2\2\u00e2"+
-		"\u00e3\7v\2\2\u00e3\16\3\2\2\2\u00e4\u00e5\7.\2\2\u00e5\20\3\2\2\2\u00e6"+
-		"\u00e7\7,\2\2\u00e7\22\3\2\2\2\u00e8\u00e9\7]\2\2\u00e9\24\3\2\2\2\u00ea"+
-		"\u00eb\7/\2\2\u00eb\26\3\2\2\2\u00ec\u00ed\7*\2\2\u00ed\30\3\2\2\2\u00ee"+
-		"\u00ef\7<\2\2\u00ef\32\3\2\2\2\u00f0\u00f1\7>\2\2\u00f1\34\3\2\2\2\u00f2"+
-		"\u00f3\7k\2\2\u00f3\u00f4\7p\2\2\u00f4\u00f5\7v\2\2\u00f5\36\3\2\2\2\u00f6"+
-		"\u00f7\7#\2\2\u00f7\u00f8\7?\2\2\u00f8 \3\2\2\2\u00f9\u00fa\7>\2\2\u00fa"+
-		"\u00fb\7?\2\2\u00fb\"\3\2\2\2\u00fc\u00fd\7A\2\2\u00fd$\3\2\2\2\u00fe"+
-		"\u00ff\7>\2\2\u00ff\u0100\7>\2\2\u0100&\3\2\2\2\u0101\u0102\7x\2\2\u0102"+
-		"\u0103\7q\2\2\u0103\u0104\7k\2\2\u0104\u0105\7f\2\2\u0105(\3\2\2\2\u0106"+
-		"\u0107\7f\2\2\u0107\u0108\7q\2\2\u0108\u0109\7w\2\2\u0109\u010a\7d\2\2"+
-		"\u010a\u010b\7n\2\2\u010b\u010c\7g\2\2\u010c*\3\2\2\2\u010d\u010e\7d\2"+
-		"\2\u010e\u010f\7q\2\2\u010f\u0110\7q\2\2\u0110\u0111\7n\2\2\u0111\u0112"+
-		"\7g\2\2\u0112\u0113\7c\2\2\u0113\u0114\7p\2\2\u0114,\3\2\2\2\u0115\u0116"+
-		"\7h\2\2\u0116\u0117\7n\2\2\u0117\u0118\7q\2\2\u0118\u0119\7c\2\2\u0119"+
-		"\u011a\7v\2\2\u011a.\3\2\2\2\u011b\u011c\7@\2\2\u011c\u011d\7@\2\2\u011d"+
-		"\60\3\2\2\2\u011e\u011f\7e\2\2\u011f\u0120\7j\2\2\u0120\u0121\7c\2\2\u0121"+
-		"\u0122\7t\2\2\u0122\62\3\2\2\2\u0123\u0124\7\'\2\2\u0124\64\3\2\2\2\u0125"+
-		"\u0126\7`\2\2\u0126\66\3\2\2\2\u0127\u0128\7d\2\2\u0128\u0129\7{\2\2\u0129"+
-		"\u012a\7v\2\2\u012a\u012b\7g\2\2\u012b8\3\2\2\2\u012c\u012d\7+\2\2\u012d"+
-		":\3\2\2\2\u012e\u012f\7\60\2\2\u012f<\3\2\2\2\u0130\u0131\7-\2\2\u0131"+
-		">\3\2\2\2\u0132\u0133\7?\2\2\u0133@\3\2\2\2\u0134\u0135\7(\2\2\u0135\u0136"+
-		"\7(\2\2\u0136B\3\2\2\2\u0137\u0138\7~\2\2\u0138\u0139\7~\2\2\u0139D\3"+
-		"\2\2\2\u013a\u013b\7@\2\2\u013bF\3\2\2\2\u013c\u013d\7A\2\2\u013d\u013e"+
-		"\7A\2\2\u013eH\3\2\2\2\u013f\u0140\7?\2\2\u0140\u0141\7?\2\2\u0141J\3"+
-		"\2\2\2\u0142\u0143\7\61\2\2\u0143L\3\2\2\2\u0144\u0145\7\u0080\2\2\u0145"+
-		"N\3\2\2\2\u0146\u0147\7@\2\2\u0147\u0148\7?\2\2\u0148P\3\2\2\2\u0149\u014a"+
-		"\7e\2\2\u014a\u014b\7n\2\2\u014b\u014c\7c\2\2\u014c\u014d\7u\2\2\u014d"+
-		"\u014e\7u\2\2\u014eR\3\2\2\2\u014f\u0150\7~\2\2\u0150T\3\2\2\2\u0151\u0152"+
-		"\7k\2\2\u0152\u0153\7p\2\2\u0153\u0154\7u\2\2\u0154\u0155\7v\2\2\u0155"+
-		"\u0156\7c\2\2\u0156\u0157\7p\2\2\u0157\u0158\7e\2\2\u0158\u0159\7g\2\2"+
-		"\u0159\u015a\7q\2\2\u015a\u015b\7h\2\2\u015bV\3\2\2\2\u015c\u015d\7#\2"+
-		"\2\u015dX\3\2\2\2\u015e\u015f\7v\2\2\u015f\u0160\7j\2\2\u0160\u0161\7"+
-		"k\2\2\u0161\u0162\7u\2\2\u0162Z\3\2\2\2\u0163\u0168\5]/\2\u0164\u0168"+
+		"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\5d\u0357\nd\2\2\2e\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\29\u00c7\2:\3\2\30"+
+		"\4\2NNnn\3\2\63;\4\2ZZzz\5\2\62;CHch\3\2\629\4\2DDdd\3\2\62\63\4\2GGg"+
+		"g\4\2--//\6\2FFHHffhh\4\2RRrr\4\2))^^\4\2$$^^\4\2^^bb\13\2$$))^^bbddh"+
+		"hppttvv\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\"\"\u037b\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\u00c5\3\2\2\2\2\u00c7\3\2\2\2\3\u00c9"+
+		"\3\2\2\2\5\u00cb\3\2\2\2\7\u00d3\3\2\2\2\t\u00d5\3\2\2\2\13\u00d7\3\2"+
+		"\2\2\r\u00d9\3\2\2\2\17\u00db\3\2\2\2\21\u00dd\3\2\2\2\23\u00df\3\2\2"+
+		"\2\25\u00e1\3\2\2\2\27\u00e3\3\2\2\2\31\u00e5\3\2\2\2\33\u00e7\3\2\2\2"+
+		"\35\u00e9\3\2\2\2\37\u00eb\3\2\2\2!\u00ed\3\2\2\2#\u00f0\3\2\2\2%\u00f4"+
+		"\3\2\2\2\'\u00f7\3\2\2\2)\u00fa\3\2\2\2+\u00fd\3\2\2\2-\u00ff\3\2\2\2"+
+		"/\u0101\3\2\2\2\61\u010c\3\2\2\2\63\u010f\3\2\2\2\65\u0112\3\2\2\2\67"+
+		"\u0114\3\2\2\29\u0116\3\2\2\2;\u0118\3\2\2\2=\u011b\3\2\2\2?\u011e\3\2"+
+		"\2\2A\u0120\3\2\2\2C\u0122\3\2\2\2E\u0125\3\2\2\2G\u012b\3\2\2\2I\u0130"+
+		"\3\2\2\2K\u0138\3\2\2\2M\u013d\3\2\2\2O\u0142\3\2\2\2Q\u0148\3\2\2\2S"+
+		"\u014c\3\2\2\2U\u0151\3\2\2\2W\u0157\3\2\2\2Y\u015e\3\2\2\2[\u0167\3\2"+
+		"\2\2]\u0169\3\2\2\2_\u016d\3\2\2\2a\u0171\3\2\2\2c\u0175\3\2\2\2e\u0179"+
+		"\3\2\2\2g\u0185\3\2\2\2i\u0187\3\2\2\2k\u0193\3\2\2\2m\u0195\3\2\2\2o"+
+		"\u0199\3\2\2\2q\u019c\3\2\2\2s\u01a0\3\2\2\2u\u01a4\3\2\2\2w\u01ae\3\2"+
+		"\2\2y\u01b2\3\2\2\2{\u01b4\3\2\2\2}\u01ba\3\2\2\2\177\u01c4\3\2\2\2\u0081"+
+		"\u01c8\3\2\2\2\u0083\u01ca\3\2\2\2\u0085\u01ce\3\2\2\2\u0087\u01d8\3\2"+
+		"\2\2\u0089\u01dc\3\2\2\2\u008b\u01e0\3\2\2\2\u008d\u01fd\3\2\2\2\u008f"+
+		"\u01ff\3\2\2\2\u0091\u0202\3\2\2\2\u0093\u0205\3\2\2\2\u0095\u0209\3\2"+
+		"\2\2\u0097\u020b\3\2\2\2\u0099\u020d\3\2\2\2\u009b\u021d\3\2\2\2\u009d"+
+		"\u021f\3\2\2\2\u009f\u0222\3\2\2\2\u00a1\u022d\3\2\2\2\u00a3\u0237\3\2"+
+		"\2\2\u00a5\u0239\3\2\2\2\u00a7\u023b\3\2\2\2\u00a9\u0244\3\2\2\2\u00ab"+
+		"\u024b\3\2\2\2\u00ad\u0251\3\2\2\2\u00af\u0255\3\2\2\2\u00b1\u025b\3\2"+
+		"\2\2\u00b3\u0268\3\2\2\2\u00b5\u026a\3\2\2\2\u00b7\u0271\3\2\2\2\u00b9"+
+		"\u0273\3\2\2\2\u00bb\u0278\3\2\2\2\u00bd\u0285\3\2\2\2\u00bf\u028d\3\2"+
+		"\2\2\u00c1\u0290\3\2\2\2\u00c3\u0296\3\2\2\2\u00c5\u02a8\3\2\2\2\u00c7"+
+		"\u0356\3\2\2\2\u00c9\u00ca\7.\2\2\u00ca\4\3\2\2\2\u00cb\u00cc\7f\2\2\u00cc"+
+		"\u00cd\7g\2\2\u00cd\u00ce\7h\2\2\u00ce\u00cf\7c\2\2\u00cf\u00d0\7w\2\2"+
+		"\u00d0\u00d1\7n\2\2\u00d1\u00d2\7v\2\2\u00d2\6\3\2\2\2\u00d3\u00d4\7?"+
+		"\2\2\u00d4\b\3\2\2\2\u00d5\u00d6\7*\2\2\u00d6\n\3\2\2\2\u00d7\u00d8\7"+
+		"+\2\2\u00d8\f\3\2\2\2\u00d9\u00da\7\60\2\2\u00da\16\3\2\2\2\u00db\u00dc"+
+		"\7]\2\2\u00dc\20\3\2\2\2\u00dd\u00de\7_\2\2\u00de\22\3\2\2\2\u00df\u00e0"+
+		"\7-\2\2\u00e0\24\3\2\2\2\u00e1\u00e2\7/\2\2\u00e2\26\3\2\2\2\u00e3\u00e4"+
+		"\7\u0080\2\2\u00e4\30\3\2\2\2\u00e5\u00e6\7#\2\2\u00e6\32\3\2\2\2\u00e7"+
+		"\u00e8\7,\2\2\u00e8\34\3\2\2\2\u00e9\u00ea\7\61\2\2\u00ea\36\3\2\2\2\u00eb"+
+		"\u00ec\7\'\2\2\u00ec \3\2\2\2\u00ed\u00ee\7>\2\2\u00ee\u00ef\7>\2\2\u00ef"+
+		"\"\3\2\2\2\u00f0\u00f1\7@\2\2\u00f1\u00f2\7@\2\2\u00f2\u00f3\7@\2\2\u00f3"+
+		"$\3\2\2\2\u00f4\u00f5\7@\2\2\u00f5\u00f6\7@\2\2\u00f6&\3\2\2\2\u00f7\u00f8"+
+		"\7>\2\2\u00f8\u00f9\7?\2\2\u00f9(\3\2\2\2\u00fa\u00fb\7@\2\2\u00fb\u00fc"+
+		"\7?\2\2\u00fc*\3\2\2\2\u00fd\u00fe\7@\2\2\u00fe,\3\2\2\2\u00ff\u0100\7"+
+		">\2\2\u0100.\3\2\2\2\u0101\u0102\7k\2\2\u0102\u0103\7p\2\2\u0103\u0104"+
+		"\7u\2\2\u0104\u0105\7v\2\2\u0105\u0106\7c\2\2\u0106\u0107\7p\2\2\u0107"+
+		"\u0108\7e\2\2\u0108\u0109\7g\2\2\u0109\u010a\7q\2\2\u010a\u010b\7h\2\2"+
+		"\u010b\60\3\2\2\2\u010c\u010d\7?\2\2\u010d\u010e\7?\2\2\u010e\62\3\2\2"+
+		"\2\u010f\u0110\7#\2\2\u0110\u0111\7?\2\2\u0111\64\3\2\2\2\u0112\u0113"+
+		"\7(\2\2\u0113\66\3\2\2\2\u0114\u0115\7`\2\2\u01158\3\2\2\2\u0116\u0117"+
+		"\7~\2\2\u0117:\3\2\2\2\u0118\u0119\7(\2\2\u0119\u011a\7(\2\2\u011a<\3"+
+		"\2\2\2\u011b\u011c\7~\2\2\u011c\u011d\7~\2\2\u011d>\3\2\2\2\u011e\u011f"+
+		"\7A\2\2\u011f@\3\2\2\2\u0120\u0121\7<\2\2\u0121B\3\2\2\2\u0122\u0123\7"+
+		"A\2\2\u0123\u0124\7A\2\2\u0124D\3\2\2\2\u0125\u0126\7e\2\2\u0126\u0127"+
+		"\7n\2\2\u0127\u0128\7c\2\2\u0128\u0129\7u\2\2\u0129\u012a\7u\2\2\u012a"+
+		"F\3\2\2\2\u012b\u012c\7x\2\2\u012c\u012d\7q\2\2\u012d\u012e\7k\2\2\u012e"+
+		"\u012f\7f\2\2\u012fH\3\2\2\2\u0130\u0131\7d\2\2\u0131\u0132\7q\2\2\u0132"+
+		"\u0133\7q\2\2\u0133\u0134\7n\2\2\u0134\u0135\7g\2\2\u0135\u0136\7c\2\2"+
+		"\u0136\u0137\7p\2\2\u0137J\3\2\2\2\u0138\u0139\7e\2\2\u0139\u013a\7j\2"+
+		"\2\u013a\u013b\7c\2\2\u013b\u013c\7t\2\2\u013cL\3\2\2\2\u013d\u013e\7"+
+		"d\2\2\u013e\u013f\7{\2\2\u013f\u0140\7v\2\2\u0140\u0141\7g\2\2\u0141N"+
+		"\3\2\2\2\u0142\u0143\7u\2\2\u0143\u0144\7j\2\2\u0144\u0145\7q\2\2\u0145"+
+		"\u0146\7t\2\2\u0146\u0147\7v\2\2\u0147P\3\2\2\2\u0148\u0149\7k\2\2\u0149"+
+		"\u014a\7p\2\2\u014a\u014b\7v\2\2\u014bR\3\2\2\2\u014c\u014d\7n\2\2\u014d"+
+		"\u014e\7q\2\2\u014e\u014f\7p\2\2\u014f\u0150\7i\2\2\u0150T\3\2\2\2\u0151"+
+		"\u0152\7h\2\2\u0152\u0153\7n\2\2\u0153\u0154\7q\2\2\u0154\u0155\7c\2\2"+
+		"\u0155\u0156\7v\2\2\u0156V\3\2\2\2\u0157\u0158\7f\2\2\u0158\u0159\7q\2"+
+		"\2\u0159\u015a\7w\2\2\u015a\u015b\7d\2\2\u015b\u015c\7n\2\2\u015c\u015d"+
+		"\7g\2\2\u015dX\3\2\2\2\u015e\u015f\7v\2\2\u015f\u0160\7j\2\2\u0160\u0161"+
+		"\7k\2\2\u0161\u0162\7u\2\2\u0162Z\3\2\2\2\u0163\u0168\5]/\2\u0164\u0168"+
 		"\5_\60\2\u0165\u0168\5a\61\2\u0166\u0168\5c\62\2\u0167\u0163\3\2\2\2\u0167"+
 		"\u0164\3\2\2\2\u0167\u0165\3\2\2\2\u0167\u0166\3\2\2\2\u0168\\\3\2\2\2"+
 		"\u0169\u016b\5g\64\2\u016a\u016c\5e\63\2\u016b\u016a\3\2\2\2\u016b\u016c"+
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.tokens b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.tokens
index d379280..d9d1035 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.tokens
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionLexer.tokens
@@ -1,101 +1,101 @@
-NullLiteral=51
-T__29=14
-T__28=15
-T__27=16
-T__26=17
-T__25=18
-T__24=19
-T__23=20
-T__22=21
-CharacterLiteral=48
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+T__6=7
+T__7=8
+T__8=9
+T__9=10
+T__10=11
+T__11=12
+T__12=13
+T__13=14
+T__14=15
+T__15=16
+T__16=17
+T__17=18
+T__18=19
+T__19=20
+T__20=21
 T__21=22
-T__20=23
-SingleQuoteString=49
-T__9=34
-T__8=35
-Identifier=52
-T__7=36
-T__6=37
-T__5=38
-T__4=39
-T__19=24
-T__16=27
-T__15=28
-T__18=25
-T__17=26
-T__12=31
-T__11=32
-T__14=29
-T__13=30
-T__10=33
+T__22=23
+T__23=24
+T__24=25
+T__25=26
+T__26=27
+T__27=28
+T__28=29
+T__29=30
+T__30=31
+T__31=32
+T__32=33
+T__33=34
+T__34=35
+T__35=36
+T__36=37
+T__37=38
+T__38=39
+T__39=40
+T__40=41
+T__41=42
+T__42=43
 THIS=44
-PackageName=55
-DoubleQuoteString=50
-T__42=1
-T__40=3
-T__41=2
-ResourceType=56
-T__30=13
-T__31=12
-T__32=11
-WS=53
-T__33=10
-T__34=9
-T__35=8
-T__36=7
-T__37=6
-T__38=5
-T__39=4
-T__1=42
-T__0=43
-FloatingPointLiteral=46
-T__3=40
-T__2=41
 IntegerLiteral=45
-ResourceReference=54
+FloatingPointLiteral=46
 BooleanLiteral=47
-'!'=43
-'instanceof'=42
-'|'=41
-'class'=40
-'>='=39
-'~'=38
-'/'=37
-'=='=36
-'??'=35
-'null'=51
-'>'=34
-'||'=33
-'this'=44
-'&&'=32
-'='=31
-'+'=30
-'.'=29
-')'=28
-'byte'=27
-'^'=26
-'%'=25
-'>>'=23
-'char'=24
-'float'=22
-'boolean'=21
-'double'=20
-'<<'=18
-'void'=19
-'?'=17
-'<='=16
-'!='=15
-'<'=13
-'int'=14
-':'=12
-'('=11
+CharacterLiteral=48
+SingleQuoteString=49
+DoubleQuoteString=50
+NullLiteral=51
+Identifier=52
+WS=53
+ResourceReference=54
+PackageName=55
+ResourceType=56
+','=1
+'default'=2
+'='=3
+'('=4
+')'=5
+'.'=6
+'['=7
+']'=8
+'+'=9
 '-'=10
-'['=9
-'*'=8
-','=7
-'default'=6
-'&'=5
-'short'=4
-']'=3
-'>>>'=2
-'long'=1
+'~'=11
+'!'=12
+'*'=13
+'/'=14
+'%'=15
+'<<'=16
+'>>>'=17
+'>>'=18
+'<='=19
+'>='=20
+'>'=21
+'<'=22
+'instanceof'=23
+'=='=24
+'!='=25
+'&'=26
+'^'=27
+'|'=28
+'&&'=29
+'||'=30
+'?'=31
+':'=32
+'??'=33
+'class'=34
+'void'=35
+'boolean'=36
+'char'=37
+'byte'=38
+'short'=39
+'int'=40
+'long'=41
+'float'=42
+'double'=43
+'this'=44
+'null'=51
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionListener.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionListener.java
index 80e4a78..acd4c22 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionListener.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionListener.java
@@ -1,5 +1,6 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
+import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.misc.NotNull;
 import org.antlr.v4.runtime.tree.ParseTreeListener;
 
@@ -9,28 +10,6 @@
  */
 public interface BindingExpressionListener extends ParseTreeListener {
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void enterExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void exitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
-
-	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#resources}.
-	 * @param ctx the parse tree
-	 */
-	void enterResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#resources}.
-	 * @param ctx the parse tree
-	 */
-	void exitResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
-
-	/**
 	 * Enter a parse tree produced by the {@code BracketOp}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
@@ -44,17 +23,17 @@
 	void exitBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx);
 
 	/**
-	 * Enter a parse tree produced by the {@code UnaryOp}
+	 * Enter a parse tree produced by the {@code Resource}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+	void enterResource(@NotNull BindingExpressionParser.ResourceContext ctx);
 	/**
-	 * Exit a parse tree produced by the {@code UnaryOp}
+	 * Exit a parse tree produced by the {@code Resource}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+	void exitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
 
 	/**
 	 * Enter a parse tree produced by the {@code CastOp}
@@ -70,15 +49,17 @@
 	void exitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * Enter a parse tree produced by the {@code UnaryOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
+	void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * Exit a parse tree produced by the {@code UnaryOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
+	void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
 
 	/**
 	 * Enter a parse tree produced by the {@code AndOrOp}
@@ -107,39 +88,6 @@
 	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
-	 */
-	void enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
-	 * @param ctx the parse tree
-	 */
-	void exitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
-
-	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
-	 * @param ctx the parse tree
-	 */
-	void enterStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
-	 * @param ctx the parse tree
-	 */
-	void exitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
-
-	/**
 	 * Enter a parse tree produced by the {@code Primary}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
@@ -153,39 +101,17 @@
 	void exitPrimary(@NotNull BindingExpressionParser.PrimaryContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#type}.
-	 * @param ctx the parse tree
-	 */
-	void enterType(@NotNull BindingExpressionParser.TypeContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#type}.
-	 * @param ctx the parse tree
-	 */
-	void exitType(@NotNull BindingExpressionParser.TypeContext ctx);
-
-	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
-	 * @param ctx the parse tree
-	 */
-	void enterBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
-	 * @param ctx the parse tree
-	 */
-	void exitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
-
-	/**
-	 * Enter a parse tree produced by the {@code ComparisonOp}
+	 * Enter a parse tree produced by the {@code Grouping}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+	void enterGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
 	/**
-	 * Exit a parse tree produced by the {@code ComparisonOp}
+	 * Exit a parse tree produced by the {@code Grouping}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+	void exitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
 
 	/**
 	 * Enter a parse tree produced by the {@code TernaryOp}
@@ -201,15 +127,17 @@
 	void exitTernaryOp(@NotNull BindingExpressionParser.TernaryOpContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#constantValue}.
+	 * Enter a parse tree produced by the {@code ComparisonOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
+	void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#constantValue}.
+	 * Exit a parse tree produced by the {@code ComparisonOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
+	void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
 
 	/**
 	 * Enter a parse tree produced by the {@code DotOp}
@@ -225,15 +153,30 @@
 	void exitDotOp(@NotNull BindingExpressionParser.DotOpContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#defaults}.
+	 * Enter a parse tree produced by the {@code MathOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
+	void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#defaults}.
+	 * Exit a parse tree produced by the {@code MathOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
+	void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+
+	/**
+	 * Enter a parse tree produced by the {@code QuestionQuestionOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * @param ctx the parse tree
+	 */
+	void enterQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code QuestionQuestionOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * @param ctx the parse tree
+	 */
+	void exitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
 
 	/**
 	 * Enter a parse tree produced by the {@code BitShiftOp}
@@ -275,65 +218,48 @@
 	void exitBinaryOp(@NotNull BindingExpressionParser.BinaryOpContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
 	 * @param ctx the parse tree
 	 */
-	void enterExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+	void enterBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
 	 * @param ctx the parse tree
 	 */
-	void exitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+	void exitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
 
 	/**
-	 * Enter a parse tree produced by the {@code Resource}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#defaults}.
 	 * @param ctx the parse tree
 	 */
-	void enterResource(@NotNull BindingExpressionParser.ResourceContext ctx);
+	void enterDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
 	/**
-	 * Exit a parse tree produced by the {@code Resource}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#defaults}.
 	 * @param ctx the parse tree
 	 */
-	void exitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
+	void exitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#constantValue}.
 	 * @param ctx the parse tree
 	 */
-	void enterTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+	void enterConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#constantValue}.
 	 * @param ctx the parse tree
 	 */
-	void exitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+	void exitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
 
 	/**
-	 * Enter a parse tree produced by the {@code Grouping}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void enterGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
+	void enterExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
 	/**
-	 * Exit a parse tree produced by the {@code Grouping}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 */
-	void exitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
-
-	/**
-	 * Enter a parse tree produced by the {@code MathOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
-	/**
-	 * Exit a parse tree produced by the {@code MathOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+	void exitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
 
 	/**
 	 * Enter a parse tree produced by {@link BindingExpressionParser#classExtraction}.
@@ -347,61 +273,26 @@
 	void exitClassExtraction(@NotNull BindingExpressionParser.ClassExtractionContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#expressionList}.
 	 * @param ctx the parse tree
 	 */
-	void enterArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+	void enterExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#expressionList}.
 	 * @param ctx the parse tree
 	 */
-	void exitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+	void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#literal}.
 	 * @param ctx the parse tree
 	 */
-	void enterPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
+	void enterLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#literal}.
 	 * @param ctx the parse tree
 	 */
-	void exitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
-
-	/**
-	 * Enter a parse tree produced by the {@code QuestionQuestionOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void enterQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
-	/**
-	 * Exit a parse tree produced by the {@code QuestionQuestionOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 */
-	void exitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
-
-	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
-	 * @param ctx the parse tree
-	 */
-	void enterJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
-	 * @param ctx the parse tree
-	 */
-	void exitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
-
-	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
-	 * @param ctx the parse tree
-	 */
-	void enterExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
-	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
-	 * @param ctx the parse tree
-	 */
-	void exitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
+	void exitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
 
 	/**
 	 * Enter a parse tree produced by {@link BindingExpressionParser#identifier}.
@@ -415,13 +306,123 @@
 	void exitIdentifier(@NotNull BindingExpressionParser.IdentifierContext ctx);
 
 	/**
-	 * Enter a parse tree produced by {@link BindingExpressionParser#literal}.
+	 * Enter a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
 	 * @param ctx the parse tree
 	 */
-	void enterLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
+	void enterJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
 	/**
-	 * Exit a parse tree produced by {@link BindingExpressionParser#literal}.
+	 * Exit a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
 	 * @param ctx the parse tree
 	 */
-	void exitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
+	void exitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
+	 * @param ctx the parse tree
+	 */
+	void enterStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
+	 * @param ctx the parse tree
+	 */
+	void exitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * @param ctx the parse tree
+	 */
+	void enterExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * @param ctx the parse tree
+	 */
+	void exitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * @param ctx the parse tree
+	 */
+	void enterTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * @param ctx the parse tree
+	 */
+	void exitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#type}.
+	 * @param ctx the parse tree
+	 */
+	void enterType(@NotNull BindingExpressionParser.TypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#type}.
+	 * @param ctx the parse tree
+	 */
+	void exitType(@NotNull BindingExpressionParser.TypeContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
+	 * @param ctx the parse tree
+	 */
+	void enterExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
+	 * @param ctx the parse tree
+	 */
+	void exitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * @param ctx the parse tree
+	 */
+	void enterArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * @param ctx the parse tree
+	 */
+	void exitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
+	 * @param ctx the parse tree
+	 */
+	void enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
+	 * @param ctx the parse tree
+	 */
+	void exitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * @param ctx the parse tree
+	 */
+	void enterPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * @param ctx the parse tree
+	 */
+	void exitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#resources}.
+	 * @param ctx the parse tree
+	 */
+	void enterResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#resources}.
+	 * @param ctx the parse tree
+	 */
+	void exitResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
+
+	/**
+	 * Enter a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * @param ctx the parse tree
+	 */
+	void enterResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * @param ctx the parse tree
+	 */
+	void exitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
 }
\ No newline at end of file
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionParser.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionParser.java
index 8463e9f..b469d2d 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionParser.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionParser.java
@@ -1,31 +1,25 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
 import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
 import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
 import org.antlr.v4.runtime.tree.*;
 import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
 
 public class BindingExpressionParser extends Parser {
 	public static final int
-		T__42=1, T__41=2, T__40=3, T__39=4, T__38=5, T__37=6, T__36=7, T__35=8, 
-		T__34=9, T__33=10, T__32=11, T__31=12, T__30=13, T__29=14, T__28=15, T__27=16, 
-		T__26=17, T__25=18, T__24=19, T__23=20, T__22=21, T__21=22, T__20=23, 
-		T__19=24, T__18=25, T__17=26, T__16=27, T__15=28, T__14=29, T__13=30, 
-		T__12=31, T__11=32, T__10=33, T__9=34, T__8=35, T__7=36, T__6=37, T__5=38, 
-		T__4=39, T__3=40, T__2=41, T__1=42, T__0=43, THIS=44, IntegerLiteral=45, 
+		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, 
+		T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, 
+		T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, 
+		T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, 
+		T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, 
+		T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, THIS=44, IntegerLiteral=45, 
 		FloatingPointLiteral=46, BooleanLiteral=47, CharacterLiteral=48, SingleQuoteString=49, 
 		DoubleQuoteString=50, NullLiteral=51, Identifier=52, WS=53, ResourceReference=54, 
 		PackageName=55, ResourceType=56;
-	public static final String[] tokenNames = {
-		"<INVALID>", "'long'", "'>>>'", "']'", "'short'", "'&'", "'default'", 
-		"','", "'*'", "'['", "'-'", "'('", "':'", "'<'", "'int'", "'!='", "'<='", 
-		"'?'", "'<<'", "'void'", "'double'", "'boolean'", "'float'", "'>>'", "'char'", 
-		"'%'", "'^'", "'byte'", "')'", "'.'", "'+'", "'='", "'&&'", "'||'", "'>'", 
-		"'??'", "'=='", "'/'", "'~'", "'>='", "'class'", "'|'", "'instanceof'", 
-		"'!'", "'this'", "IntegerLiteral", "FloatingPointLiteral", "BooleanLiteral", 
-		"CharacterLiteral", "SingleQuoteString", "DoubleQuoteString", "'null'", 
-		"Identifier", "WS", "ResourceReference", "PackageName", "ResourceType"
-	};
 	public static final int
 		RULE_bindingSyntax = 0, RULE_defaults = 1, RULE_constantValue = 2, RULE_expression = 3, 
 		RULE_classExtraction = 4, RULE_expressionList = 5, RULE_literal = 6, RULE_identifier = 7, 
@@ -40,11 +34,58 @@
 		"arguments", "classOrInterfaceType", "primitiveType", "resources", "resourceParameters"
 	};
 
-	@Override
-	public String getGrammarFileName() { return "BindingExpression.g4"; }
+	private static final String[] _LITERAL_NAMES = {
+		null, "','", "'default'", "'='", "'('", "')'", "'.'", "'['", "']'", "'+'", 
+		"'-'", "'~'", "'!'", "'*'", "'/'", "'%'", "'<<'", "'>>>'", "'>>'", "'<='", 
+		"'>='", "'>'", "'<'", "'instanceof'", "'=='", "'!='", "'&'", "'^'", "'|'", 
+		"'&&'", "'||'", "'?'", "':'", "'??'", "'class'", "'void'", "'boolean'", 
+		"'char'", "'byte'", "'short'", "'int'", "'long'", "'float'", "'double'", 
+		"'this'", null, null, null, null, null, null, "'null'"
+	};
+	private static final String[] _SYMBOLIC_NAMES = {
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, null, null, null, null, 
+		null, null, null, null, null, null, null, null, "THIS", "IntegerLiteral", 
+		"FloatingPointLiteral", "BooleanLiteral", "CharacterLiteral", "SingleQuoteString", 
+		"DoubleQuoteString", "NullLiteral", "Identifier", "WS", "ResourceReference", 
+		"PackageName", "ResourceType"
+	};
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
 
 	@Override
-	public String[] getTokenNames() { return tokenNames; }
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+	@NotNull
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+	@Override
+	public String getGrammarFileName() { return "BindingExpression.g4"; }
 
 	@Override
 	public String[] getRuleNames() { return ruleNames; }
@@ -57,12 +98,12 @@
 		_interp = new ParserATNSimulator(this,_ATN);
 	}
 	public static class BindingSyntaxContext extends ParserRuleContext {
-		public DefaultsContext defaults() {
-			return getRuleContext(DefaultsContext.class,0);
-		}
 		public ExpressionContext expression() {
 			return getRuleContext(ExpressionContext.class,0);
 		}
+		public DefaultsContext defaults() {
+			return getRuleContext(DefaultsContext.class,0);
+		}
 		public BindingSyntaxContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -90,12 +131,14 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(38); expression(0);
+			setState(38);
+			expression(0);
 			setState(40);
 			_la = _input.LA(1);
-			if (_la==T__36) {
+			if (_la==T__0) {
 				{
-				setState(39); defaults();
+				setState(39);
+				defaults();
 				}
 			}
 
@@ -142,10 +185,14 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(42); match(T__36);
-			setState(43); match(T__37);
-			setState(44); match(T__12);
-			setState(45); constantValue();
+			setState(42);
+			match(T__0);
+			setState(43);
+			match(T__1);
+			setState(44);
+			match(T__2);
+			setState(45);
+			constantValue();
 			}
 		}
 		catch (RecognitionException re) {
@@ -163,10 +210,10 @@
 		public LiteralContext literal() {
 			return getRuleContext(LiteralContext.class,0);
 		}
+		public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 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);
 		}
@@ -202,19 +249,22 @@
 			case NullLiteral:
 				enterOuterAlt(_localctx, 1);
 				{
-				setState(47); literal();
+				setState(47);
+				literal();
 				}
 				break;
 			case ResourceReference:
 				enterOuterAlt(_localctx, 2);
 				{
-				setState(48); match(ResourceReference);
+				setState(48);
+				match(ResourceReference);
 				}
 				break;
 			case Identifier:
 				enterOuterAlt(_localctx, 3);
 				{
-				setState(49); identifier();
+				setState(49);
+				identifier();
 				}
 				break;
 			default:
@@ -244,12 +294,12 @@
 		}
 	}
 	public static class BracketOpContext extends ExpressionContext {
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public BracketOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -330,12 +380,12 @@
 		public ExpressionContext left;
 		public Token op;
 		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public AndOrOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -355,13 +405,13 @@
 		public ExpressionContext target;
 		public Token methodName;
 		public ExpressionListContext args;
-		public ExpressionListContext expressionList() {
-			return getRuleContext(ExpressionListContext.class,0);
-		}
-		public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
 		public ExpressionContext expression() {
 			return getRuleContext(ExpressionContext.class,0);
 		}
+		public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
+		public ExpressionListContext expressionList() {
+			return getRuleContext(ExpressionListContext.class,0);
+		}
 		public MethodInvocationContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -378,15 +428,15 @@
 		}
 	}
 	public static class PrimaryContext extends ExpressionContext {
-		public ClassExtractionContext classExtraction() {
-			return getRuleContext(ClassExtractionContext.class,0);
-		}
 		public LiteralContext literal() {
 			return getRuleContext(LiteralContext.class,0);
 		}
 		public IdentifierContext identifier() {
 			return getRuleContext(IdentifierContext.class,0);
 		}
+		public ClassExtractionContext classExtraction() {
+			return getRuleContext(ClassExtractionContext.class,0);
+		}
 		public PrimaryContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -426,12 +476,12 @@
 		public Token op;
 		public ExpressionContext iftrue;
 		public ExpressionContext iffalse;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public TernaryOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -451,12 +501,12 @@
 		public ExpressionContext left;
 		public Token op;
 		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public ComparisonOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -473,10 +523,10 @@
 		}
 	}
 	public static class DotOpContext extends ExpressionContext {
-		public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
 		public ExpressionContext expression() {
 			return getRuleContext(ExpressionContext.class,0);
 		}
+		public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
 		public DotOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -496,12 +546,12 @@
 		public ExpressionContext left;
 		public Token op;
 		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public MathOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -517,41 +567,16 @@
 			else return visitor.visitChildren(this);
 		}
 	}
-	public static class BitShiftOpContext extends ExpressionContext {
-		public ExpressionContext left;
-		public Token op;
-		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
-		public List<? extends ExpressionContext> expression() {
-			return getRuleContexts(ExpressionContext.class);
-		}
-		public BitShiftOpContext(ExpressionContext ctx) { copyFrom(ctx); }
-		@Override
-		public void enterRule(ParseTreeListener listener) {
-			if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterBitShiftOp(this);
-		}
-		@Override
-		public void exitRule(ParseTreeListener listener) {
-			if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitBitShiftOp(this);
-		}
-		@Override
-		public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
-			if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitBitShiftOp(this);
-			else return visitor.visitChildren(this);
-		}
-	}
 	public static class QuestionQuestionOpContext extends ExpressionContext {
 		public ExpressionContext left;
 		public Token op;
 		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public QuestionQuestionOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -567,13 +592,38 @@
 			else return visitor.visitChildren(this);
 		}
 	}
-	public static class InstanceOfOpContext extends ExpressionContext {
-		public TypeContext type() {
-			return getRuleContext(TypeContext.class,0);
+	public static class BitShiftOpContext extends ExpressionContext {
+		public ExpressionContext left;
+		public Token op;
+		public ExpressionContext right;
+		public List<? extends ExpressionContext> expression() {
+			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
+		public BitShiftOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterBitShiftOp(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitBitShiftOp(this);
+		}
+		@Override
+		public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+			if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitBitShiftOp(this);
+			else return visitor.visitChildren(this);
+		}
+	}
+	public static class InstanceOfOpContext extends ExpressionContext {
 		public ExpressionContext expression() {
 			return getRuleContext(ExpressionContext.class,0);
 		}
+		public TypeContext type() {
+			return getRuleContext(TypeContext.class,0);
+		}
 		public InstanceOfOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -593,12 +643,12 @@
 		public ExpressionContext left;
 		public Token op;
 		public ExpressionContext right;
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public BinaryOpContext(ExpressionContext ctx) { copyFrom(ctx); }
 		@Override
 		public void enterRule(ParseTreeListener listener) {
@@ -640,10 +690,14 @@
 				_ctx = _localctx;
 				_prevctx = _localctx;
 
-				setState(53); match(T__32);
-				setState(54); type();
-				setState(55); match(T__15);
-				setState(56); expression(16);
+				setState(53);
+				match(T__3);
+				setState(54);
+				type();
+				setState(55);
+				match(T__4);
+				setState(56);
+				expression(16);
 				}
 				break;
 
@@ -655,11 +709,13 @@
 				setState(58);
 				((UnaryOpContext)_localctx).op = _input.LT(1);
 				_la = _input.LA(1);
-				if ( !(_la==T__33 || _la==T__13) ) {
+				if ( !(_la==T__8 || _la==T__9) ) {
 					((UnaryOpContext)_localctx).op = _errHandler.recoverInline(this);
+				} else {
+					consume();
 				}
-				consume();
-				setState(59); expression(15);
+				setState(59);
+				expression(15);
 				}
 				break;
 
@@ -671,11 +727,13 @@
 				setState(60);
 				((UnaryOpContext)_localctx).op = _input.LT(1);
 				_la = _input.LA(1);
-				if ( !(_la==T__5 || _la==T__0) ) {
+				if ( !(_la==T__10 || _la==T__11) ) {
 					((UnaryOpContext)_localctx).op = _errHandler.recoverInline(this);
+				} else {
+					consume();
 				}
-				consume();
-				setState(61); expression(14);
+				setState(61);
+				expression(14);
 				}
 				break;
 
@@ -684,9 +742,12 @@
 				_localctx = new GroupingContext(_localctx);
 				_ctx = _localctx;
 				_prevctx = _localctx;
-				setState(62); match(T__32);
-				setState(63); expression(0);
-				setState(64); match(T__15);
+				setState(62);
+				match(T__3);
+				setState(63);
+				expression(0);
+				setState(64);
+				match(T__4);
 				}
 				break;
 
@@ -695,7 +756,8 @@
 				_localctx = new PrimaryContext(_localctx);
 				_ctx = _localctx;
 				_prevctx = _localctx;
-				setState(66); literal();
+				setState(66);
+				literal();
 				}
 				break;
 
@@ -704,7 +766,8 @@
 				_localctx = new PrimaryContext(_localctx);
 				_ctx = _localctx;
 				_prevctx = _localctx;
-				setState(67); identifier();
+				setState(67);
+				identifier();
 				}
 				break;
 
@@ -713,7 +776,8 @@
 				_localctx = new PrimaryContext(_localctx);
 				_ctx = _localctx;
 				_prevctx = _localctx;
-				setState(68); classExtraction();
+				setState(68);
+				classExtraction();
 				}
 				break;
 
@@ -722,7 +786,8 @@
 				_localctx = new ResourceContext(_localctx);
 				_ctx = _localctx;
 				_prevctx = _localctx;
-				setState(69); resources();
+				setState(69);
+				resources();
 				}
 				break;
 			}
@@ -747,11 +812,13 @@
 						setState(73);
 						((MathOpContext)_localctx).op = _input.LT(1);
 						_la = _input.LA(1);
-						if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__18) | (1L << T__6))) != 0)) ) {
+						if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__12) | (1L << T__13) | (1L << T__14))) != 0)) ) {
 							((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
+						} else {
+							consume();
 						}
-						consume();
-						setState(74); ((MathOpContext)_localctx).right = expression(14);
+						setState(74);
+						((MathOpContext)_localctx).right = expression(14);
 						}
 						break;
 
@@ -765,11 +832,13 @@
 						setState(76);
 						((MathOpContext)_localctx).op = _input.LT(1);
 						_la = _input.LA(1);
-						if ( !(_la==T__33 || _la==T__13) ) {
+						if ( !(_la==T__8 || _la==T__9) ) {
 							((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
+						} else {
+							consume();
 						}
-						consume();
-						setState(77); ((MathOpContext)_localctx).right = expression(13);
+						setState(77);
+						((MathOpContext)_localctx).right = expression(13);
 						}
 						break;
 
@@ -783,11 +852,13 @@
 						setState(79);
 						((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)) ) {
+						if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__15) | (1L << T__16) | (1L << T__17))) != 0)) ) {
 							((BitShiftOpContext)_localctx).op = _errHandler.recoverInline(this);
+						} else {
+							consume();
 						}
-						consume();
-						setState(80); ((BitShiftOpContext)_localctx).right = expression(12);
+						setState(80);
+						((BitShiftOpContext)_localctx).right = expression(12);
 						}
 						break;
 
@@ -801,11 +872,13 @@
 						setState(82);
 						((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)) ) {
+						if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21))) != 0)) ) {
 							((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
+						} else {
+							consume();
 						}
-						consume();
-						setState(83); ((ComparisonOpContext)_localctx).right = expression(11);
+						setState(83);
+						((ComparisonOpContext)_localctx).right = expression(11);
 						}
 						break;
 
@@ -819,11 +892,13 @@
 						setState(85);
 						((ComparisonOpContext)_localctx).op = _input.LT(1);
 						_la = _input.LA(1);
-						if ( !(_la==T__28 || _la==T__7) ) {
+						if ( !(_la==T__23 || _la==T__24) ) {
 							((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
+						} else {
+							consume();
 						}
-						consume();
-						setState(86); ((ComparisonOpContext)_localctx).right = expression(9);
+						setState(86);
+						((ComparisonOpContext)_localctx).right = expression(9);
 						}
 						break;
 
@@ -834,8 +909,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(87);
 						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
-						setState(88); ((BinaryOpContext)_localctx).op = match(T__38);
-						setState(89); ((BinaryOpContext)_localctx).right = expression(8);
+						setState(88);
+						((BinaryOpContext)_localctx).op = match(T__25);
+						setState(89);
+						((BinaryOpContext)_localctx).right = expression(8);
 						}
 						break;
 
@@ -846,8 +923,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(90);
 						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
-						setState(91); ((BinaryOpContext)_localctx).op = match(T__17);
-						setState(92); ((BinaryOpContext)_localctx).right = expression(7);
+						setState(91);
+						((BinaryOpContext)_localctx).op = match(T__26);
+						setState(92);
+						((BinaryOpContext)_localctx).right = expression(7);
 						}
 						break;
 
@@ -858,8 +937,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(93);
 						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
-						setState(94); ((BinaryOpContext)_localctx).op = match(T__2);
-						setState(95); ((BinaryOpContext)_localctx).right = expression(6);
+						setState(94);
+						((BinaryOpContext)_localctx).op = match(T__27);
+						setState(95);
+						((BinaryOpContext)_localctx).right = expression(6);
 						}
 						break;
 
@@ -870,8 +951,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(96);
 						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
-						setState(97); ((AndOrOpContext)_localctx).op = match(T__11);
-						setState(98); ((AndOrOpContext)_localctx).right = expression(5);
+						setState(97);
+						((AndOrOpContext)_localctx).op = match(T__28);
+						setState(98);
+						((AndOrOpContext)_localctx).right = expression(5);
 						}
 						break;
 
@@ -882,8 +965,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(99);
 						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
-						setState(100); ((AndOrOpContext)_localctx).op = match(T__10);
-						setState(101); ((AndOrOpContext)_localctx).right = expression(4);
+						setState(100);
+						((AndOrOpContext)_localctx).op = match(T__29);
+						setState(101);
+						((AndOrOpContext)_localctx).right = expression(4);
 						}
 						break;
 
@@ -894,10 +979,14 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(102);
 						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
-						setState(103); ((TernaryOpContext)_localctx).op = match(T__26);
-						setState(104); ((TernaryOpContext)_localctx).iftrue = expression(0);
-						setState(105); match(T__31);
-						setState(106); ((TernaryOpContext)_localctx).iffalse = expression(3);
+						setState(103);
+						((TernaryOpContext)_localctx).op = match(T__30);
+						setState(104);
+						((TernaryOpContext)_localctx).iftrue = expression(0);
+						setState(105);
+						match(T__31);
+						setState(106);
+						((TernaryOpContext)_localctx).iffalse = expression(2);
 						}
 						break;
 
@@ -908,8 +997,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(108);
 						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
-						setState(109); ((QuestionQuestionOpContext)_localctx).op = match(T__8);
-						setState(110); ((QuestionQuestionOpContext)_localctx).right = expression(2);
+						setState(109);
+						((QuestionQuestionOpContext)_localctx).op = match(T__32);
+						setState(110);
+						((QuestionQuestionOpContext)_localctx).right = expression(2);
 						}
 						break;
 
@@ -919,8 +1010,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(111);
 						if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
-						setState(112); match(T__14);
-						setState(113); match(Identifier);
+						setState(112);
+						match(T__5);
+						setState(113);
+						match(Identifier);
 						}
 						break;
 
@@ -930,9 +1023,12 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(114);
 						if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
-						setState(115); match(T__34);
-						setState(116); expression(0);
-						setState(117); match(T__40);
+						setState(115);
+						match(T__6);
+						setState(116);
+						expression(0);
+						setState(117);
+						match(T__7);
 						}
 						break;
 
@@ -943,18 +1039,23 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(119);
 						if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
-						setState(120); match(T__14);
-						setState(121); ((MethodInvocationContext)_localctx).methodName = match(Identifier);
-						setState(122); match(T__32);
+						setState(120);
+						match(T__5);
+						setState(121);
+						((MethodInvocationContext)_localctx).methodName = match(Identifier);
+						setState(122);
+						match(T__3);
 						setState(124);
 						_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)) {
+						if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
 							{
-							setState(123); ((MethodInvocationContext)_localctx).args = expressionList();
+							setState(123);
+							((MethodInvocationContext)_localctx).args = expressionList();
 							}
 						}
 
-						setState(126); match(T__15);
+						setState(126);
+						match(T__4);
 						}
 						break;
 
@@ -964,8 +1065,10 @@
 						pushNewRecursionContext(_localctx, _startState, RULE_expression);
 						setState(127);
 						if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
-						setState(128); match(T__1);
-						setState(129); type();
+						setState(128);
+						match(T__22);
+						setState(129);
+						type();
 						}
 						break;
 					}
@@ -1018,28 +1121,34 @@
 		try {
 			setState(142);
 			switch (_input.LA(1)) {
-			case T__42:
+			case T__35:
+			case T__36:
+			case T__37:
+			case T__38:
 			case T__39:
-			case T__29:
-			case T__23:
-			case T__22:
-			case T__21:
-			case T__19:
-			case T__16:
+			case T__40:
+			case T__41:
+			case T__42:
 			case Identifier:
 				enterOuterAlt(_localctx, 1);
 				{
-				setState(135); type();
-				setState(136); match(T__14);
-				setState(137); match(T__3);
+				setState(135);
+				type();
+				setState(136);
+				match(T__5);
+				setState(137);
+				match(T__33);
 				}
 				break;
-			case T__24:
+			case T__34:
 				enterOuterAlt(_localctx, 2);
 				{
-				setState(139); match(T__24);
-				setState(140); match(T__14);
-				setState(141); match(T__3);
+				setState(139);
+				match(T__34);
+				setState(140);
+				match(T__5);
+				setState(141);
+				match(T__33);
 				}
 				break;
 			default:
@@ -1058,12 +1167,12 @@
 	}
 
 	public static class ExpressionListContext extends ParserRuleContext {
-		public ExpressionContext expression(int i) {
-			return getRuleContext(ExpressionContext.class,i);
-		}
 		public List<? extends ExpressionContext> expression() {
 			return getRuleContexts(ExpressionContext.class);
 		}
+		public ExpressionContext expression(int i) {
+			return getRuleContext(ExpressionContext.class,i);
+		}
 		public ExpressionListContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1091,15 +1200,18 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(144); expression(0);
+			setState(144);
+			expression(0);
 			setState(149);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			while (_la==T__36) {
+			while (_la==T__0) {
 				{
 				{
-				setState(145); match(T__36);
-				setState(146); expression(0);
+				setState(145);
+				match(T__0);
+				setState(146);
+				expression(0);
 				}
 				}
 				setState(151);
@@ -1120,12 +1232,12 @@
 	}
 
 	public static class LiteralContext extends ParserRuleContext {
-		public StringLiteralContext stringLiteral() {
-			return getRuleContext(StringLiteralContext.class,0);
-		}
 		public JavaLiteralContext javaLiteral() {
 			return getRuleContext(JavaLiteralContext.class,0);
 		}
+		public StringLiteralContext stringLiteral() {
+			return getRuleContext(StringLiteralContext.class,0);
+		}
 		public LiteralContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1159,14 +1271,16 @@
 			case NullLiteral:
 				enterOuterAlt(_localctx, 1);
 				{
-				setState(152); javaLiteral();
+				setState(152);
+				javaLiteral();
 				}
 				break;
 			case SingleQuoteString:
 			case DoubleQuoteString:
 				enterOuterAlt(_localctx, 2);
 				{
-				setState(153); stringLiteral();
+				setState(153);
+				stringLiteral();
 				}
 				break;
 			default:
@@ -1212,7 +1326,8 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(156); match(Identifier);
+			setState(156);
+			match(Identifier);
 			}
 		}
 		catch (RecognitionException re) {
@@ -1227,11 +1342,11 @@
 	}
 
 	public static class JavaLiteralContext extends ParserRuleContext {
-		public TerminalNode NullLiteral() { return getToken(BindingExpressionParser.NullLiteral, 0); }
-		public TerminalNode CharacterLiteral() { return getToken(BindingExpressionParser.CharacterLiteral, 0); }
 		public TerminalNode IntegerLiteral() { return getToken(BindingExpressionParser.IntegerLiteral, 0); }
 		public TerminalNode FloatingPointLiteral() { return getToken(BindingExpressionParser.FloatingPointLiteral, 0); }
 		public TerminalNode BooleanLiteral() { return getToken(BindingExpressionParser.BooleanLiteral, 0); }
+		public TerminalNode NullLiteral() { return getToken(BindingExpressionParser.NullLiteral, 0); }
+		public TerminalNode CharacterLiteral() { return getToken(BindingExpressionParser.CharacterLiteral, 0); }
 		public JavaLiteralContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1263,8 +1378,9 @@
 			_la = _input.LA(1);
 			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << NullLiteral))) != 0)) ) {
 			_errHandler.recoverInline(this);
+			} else {
+				consume();
 			}
-			consume();
 			}
 		}
 		catch (RecognitionException re) {
@@ -1312,8 +1428,9 @@
 			_la = _input.LA(1);
 			if ( !(_la==SingleQuoteString || _la==DoubleQuoteString) ) {
 			_errHandler.recoverInline(this);
+			} else {
+				consume();
 			}
-			consume();
 			}
 		}
 		catch (RecognitionException re) {
@@ -1328,12 +1445,12 @@
 	}
 
 	public static class ExplicitGenericInvocationContext extends ParserRuleContext {
-		public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() {
-			return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0);
-		}
 		public TypeArgumentsContext typeArguments() {
 			return getRuleContext(TypeArgumentsContext.class,0);
 		}
+		public ExplicitGenericInvocationSuffixContext explicitGenericInvocationSuffix() {
+			return getRuleContext(ExplicitGenericInvocationSuffixContext.class,0);
+		}
 		public ExplicitGenericInvocationContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1360,8 +1477,10 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(162); typeArguments();
-			setState(163); explicitGenericInvocationSuffix();
+			setState(162);
+			typeArguments();
+			setState(163);
+			explicitGenericInvocationSuffix();
 			}
 		}
 		catch (RecognitionException re) {
@@ -1376,12 +1495,12 @@
 	}
 
 	public static class TypeArgumentsContext extends ParserRuleContext {
-		public TypeContext type(int i) {
-			return getRuleContext(TypeContext.class,i);
-		}
 		public List<? extends TypeContext> type() {
 			return getRuleContexts(TypeContext.class);
 		}
+		public TypeContext type(int i) {
+			return getRuleContext(TypeContext.class,i);
+		}
 		public TypeArgumentsContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1409,23 +1528,28 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(165); match(T__30);
-			setState(166); type();
+			setState(165);
+			match(T__21);
+			setState(166);
+			type();
 			setState(171);
 			_errHandler.sync(this);
 			_la = _input.LA(1);
-			while (_la==T__36) {
+			while (_la==T__0) {
 				{
 				{
-				setState(167); match(T__36);
-				setState(168); type();
+				setState(167);
+				match(T__0);
+				setState(168);
+				type();
 				}
 				}
 				setState(173);
 				_errHandler.sync(this);
 				_la = _input.LA(1);
 			}
-			setState(174); match(T__9);
+			setState(174);
+			match(T__20);
 			}
 		}
 		catch (RecognitionException re) {
@@ -1440,12 +1564,12 @@
 	}
 
 	public static class TypeContext extends ParserRuleContext {
-		public PrimitiveTypeContext primitiveType() {
-			return getRuleContext(PrimitiveTypeContext.class,0);
-		}
 		public ClassOrInterfaceTypeContext classOrInterfaceType() {
 			return getRuleContext(ClassOrInterfaceTypeContext.class,0);
 		}
+		public PrimitiveTypeContext primitiveType() {
+			return getRuleContext(PrimitiveTypeContext.class,0);
+		}
 		public TypeContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1476,7 +1600,8 @@
 			case Identifier:
 				enterOuterAlt(_localctx, 1);
 				{
-				setState(176); classOrInterfaceType();
+				setState(176);
+				classOrInterfaceType();
 				setState(181);
 				_errHandler.sync(this);
 				_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
@@ -1484,8 +1609,10 @@
 					if ( _alt==1 ) {
 						{
 						{
-						setState(177); match(T__34);
-						setState(178); match(T__40);
+						setState(177);
+						match(T__6);
+						setState(178);
+						match(T__7);
 						}
 						} 
 					}
@@ -1495,17 +1622,18 @@
 				}
 				}
 				break;
-			case T__42:
+			case T__35:
+			case T__36:
+			case T__37:
+			case T__38:
 			case T__39:
-			case T__29:
-			case T__23:
-			case T__22:
-			case T__21:
-			case T__19:
-			case T__16:
+			case T__40:
+			case T__41:
+			case T__42:
 				enterOuterAlt(_localctx, 2);
 				{
-				setState(184); primitiveType();
+				setState(184);
+				primitiveType();
 				setState(189);
 				_errHandler.sync(this);
 				_alt = getInterpreter().adaptivePredict(_input,11,_ctx);
@@ -1513,8 +1641,10 @@
 					if ( _alt==1 ) {
 						{
 						{
-						setState(185); match(T__34);
-						setState(186); match(T__40);
+						setState(185);
+						match(T__6);
+						setState(186);
+						match(T__7);
 						}
 						} 
 					}
@@ -1570,8 +1700,10 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(194); match(Identifier);
-			setState(195); arguments();
+			setState(194);
+			match(Identifier);
+			setState(195);
+			arguments();
 			}
 		}
 		catch (RecognitionException re) {
@@ -1616,16 +1748,19 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(197); match(T__32);
+			setState(197);
+			match(T__3);
 			setState(199);
 			_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)) {
+			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
 				{
-				setState(198); expressionList();
+				setState(198);
+				expressionList();
 				}
 			}
 
-			setState(201); match(T__15);
+			setState(201);
+			match(T__4);
 			}
 		}
 		catch (RecognitionException re) {
@@ -1640,18 +1775,18 @@
 	}
 
 	public static class ClassOrInterfaceTypeContext extends ParserRuleContext {
-		public TypeArgumentsContext typeArguments(int i) {
-			return getRuleContext(TypeArgumentsContext.class,i);
+		public IdentifierContext identifier() {
+			return getRuleContext(IdentifierContext.class,0);
 		}
-		public TerminalNode Identifier(int i) {
-			return getToken(BindingExpressionParser.Identifier, i);
-		}
-		public List<? extends TerminalNode> Identifier() { return getTokens(BindingExpressionParser.Identifier); }
 		public List<? extends TypeArgumentsContext> typeArguments() {
 			return getRuleContexts(TypeArgumentsContext.class);
 		}
-		public IdentifierContext identifier() {
-			return getRuleContext(IdentifierContext.class,0);
+		public TypeArgumentsContext typeArguments(int i) {
+			return getRuleContext(TypeArgumentsContext.class,i);
+		}
+		public List<? extends TerminalNode> Identifier() { return getTokens(BindingExpressionParser.Identifier); }
+		public TerminalNode Identifier(int i) {
+			return getToken(BindingExpressionParser.Identifier, i);
 		}
 		public ClassOrInterfaceTypeContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
@@ -1680,12 +1815,14 @@
 			int _alt;
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(203); identifier();
+			setState(203);
+			identifier();
 			setState(205);
 			switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
 			case 1:
 				{
-				setState(204); typeArguments();
+				setState(204);
+				typeArguments();
 				}
 				break;
 			}
@@ -1696,13 +1833,16 @@
 				if ( _alt==1 ) {
 					{
 					{
-					setState(207); match(T__14);
-					setState(208); match(Identifier);
+					setState(207);
+					match(T__5);
+					setState(208);
+					match(Identifier);
 					setState(210);
 					switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
 					case 1:
 						{
-						setState(209); typeArguments();
+						setState(209);
+						typeArguments();
 						}
 						break;
 					}
@@ -1756,10 +1896,11 @@
 			{
 			setState(217);
 			_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)) ) {
+			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42))) != 0)) ) {
 			_errHandler.recoverInline(this);
+			} else {
+				consume();
 			}
-			consume();
 			}
 		}
 		catch (RecognitionException re) {
@@ -1774,10 +1915,10 @@
 	}
 
 	public static class ResourcesContext extends ParserRuleContext {
+		public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 0); }
 		public ResourceParametersContext resourceParameters() {
 			return getRuleContext(ResourceParametersContext.class,0);
 		}
-		public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 0); }
 		public ResourcesContext(ParserRuleContext parent, int invokingState) {
 			super(parent, invokingState);
 		}
@@ -1804,12 +1945,14 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(219); match(ResourceReference);
+			setState(219);
+			match(ResourceReference);
 			setState(221);
 			switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
 			case 1:
 				{
-				setState(220); resourceParameters();
+				setState(220);
+				resourceParameters();
 				}
 				break;
 			}
@@ -1856,9 +1999,12 @@
 		try {
 			enterOuterAlt(_localctx, 1);
 			{
-			setState(223); match(T__32);
-			setState(224); expressionList();
-			setState(225); match(T__15);
+			setState(223);
+			match(T__3);
+			setState(224);
+			expressionList();
+			setState(225);
+			match(T__4);
 			}
 		}
 		catch (RecognitionException re) {
@@ -1874,43 +2020,60 @@
 
 	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
 		switch (ruleIndex) {
-		case 3: 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 0: return precpred(_ctx, 13);
+		case 0:
+			return precpred(_ctx, 13);
 
-		case 1: return precpred(_ctx, 12);
+		case 1:
+			return precpred(_ctx, 12);
 
-		case 2: return precpred(_ctx, 11);
+		case 2:
+			return precpred(_ctx, 11);
 
-		case 3: return precpred(_ctx, 10);
+		case 3:
+			return precpred(_ctx, 10);
 
-		case 4: return precpred(_ctx, 8);
+		case 4:
+			return precpred(_ctx, 8);
 
-		case 5: return precpred(_ctx, 7);
+		case 5:
+			return precpred(_ctx, 7);
 
-		case 6: return precpred(_ctx, 6);
+		case 6:
+			return precpred(_ctx, 6);
 
-		case 7: return precpred(_ctx, 5);
+		case 7:
+			return precpred(_ctx, 5);
 
-		case 8: return precpred(_ctx, 4);
+		case 8:
+			return precpred(_ctx, 4);
 
-		case 9: return precpred(_ctx, 3);
+		case 9:
+			return precpred(_ctx, 3);
 
-		case 10: return precpred(_ctx, 2);
+		case 10:
+			return precpred(_ctx, 2);
 
-		case 11: return precpred(_ctx, 1);
+		case 11:
+			return precpred(_ctx, 1);
 
-		case 12: return precpred(_ctx, 19);
+		case 12:
+			return precpred(_ctx, 19);
 
-		case 13: return precpred(_ctx, 18);
+		case 13:
+			return precpred(_ctx, 18);
 
-		case 14: return precpred(_ctx, 17);
+		case 14:
+			return precpred(_ctx, 17);
 
-		case 15: return precpred(_ctx, 9);
+		case 15:
+			return precpred(_ctx, 9);
 		}
 		return true;
 	}
@@ -1934,66 +2097,65 @@
 		"\21\3\21\3\21\3\21\5\21\u00d5\n\21\7\21\u00d7\n\21\f\21\16\21\u00da\13"+
 		"\21\3\22\3\22\3\23\3\23\5\23\u00e0\n\23\3\24\3\24\3\24\3\24\3\24\2\2\3"+
 		"\b\25\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\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\u00f9\2(\3\2\2\2\4,\3\2\2\2\6\64\3\2"+
-		"\2\2\bH\3\2\2\2\n\u0090\3\2\2\2\f\u0092\3\2\2\2\16\u009c\3\2\2\2\20\u009e"+
-		"\3\2\2\2\22\u00a0\3\2\2\2\24\u00a2\3\2\2\2\26\u00a4\3\2\2\2\30\u00a7\3"+
-		"\2\2\2\32\u00c2\3\2\2\2\34\u00c4\3\2\2\2\36\u00c7\3\2\2\2 \u00cd\3\2\2"+
-		"\2\"\u00db\3\2\2\2$\u00dd\3\2\2\2&\u00e1\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/\60\5\6\4"+
-		"\2\60\5\3\2\2\2\61\65\5\16\b\2\62\65\78\2\2\63\65\5\20\t\2\64\61\3\2\2"+
-		"\2\64\62\3\2\2\2\64\63\3\2\2\2\65\7\3\2\2\2\66\67\b\5\1\2\678\7\r\2\2"+
-		"89\5\32\16\29:\7\36\2\2:;\5\b\5\22;I\3\2\2\2<=\t\2\2\2=I\5\b\5\21>?\t"+
-		"\3\2\2?I\5\b\5\20@A\7\r\2\2AB\5\b\5\2BC\7\36\2\2CI\3\2\2\2DI\5\16\b\2"+
-		"EI\5\20\t\2FI\5\n\6\2GI\5$\23\2H\66\3\2\2\2H<\3\2\2\2H>\3\2\2\2H@\3\2"+
-		"\2\2HD\3\2\2\2HE\3\2\2\2HF\3\2\2\2HG\3\2\2\2I\u0086\3\2\2\2JK\f\17\2\2"+
-		"KL\t\4\2\2L\u0085\5\b\5\20MN\f\16\2\2NO\t\2\2\2O\u0085\5\b\5\17PQ\f\r"+
-		"\2\2QR\t\5\2\2R\u0085\5\b\5\16ST\f\f\2\2TU\t\6\2\2U\u0085\5\b\5\rVW\f"+
-		"\n\2\2WX\t\7\2\2X\u0085\5\b\5\13YZ\f\t\2\2Z[\7\7\2\2[\u0085\5\b\5\n\\"+
-		"]\f\b\2\2]^\7\34\2\2^\u0085\5\b\5\t_`\f\7\2\2`a\7+\2\2a\u0085\5\b\5\b"+
-		"bc\f\6\2\2cd\7\"\2\2d\u0085\5\b\5\7ef\f\5\2\2fg\7#\2\2g\u0085\5\b\5\6"+
-		"hi\f\4\2\2ij\7\23\2\2jk\5\b\5\2kl\7\16\2\2lm\5\b\5\5m\u0085\3\2\2\2no"+
-		"\f\3\2\2op\7%\2\2p\u0085\5\b\5\4qr\f\25\2\2rs\7\37\2\2s\u0085\7\66\2\2"+
-		"tu\f\24\2\2uv\7\13\2\2vw\5\b\5\2wx\7\5\2\2x\u0085\3\2\2\2yz\f\23\2\2z"+
-		"{\7\37\2\2{|\7\66\2\2|~\7\r\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2\177"+
-		"\u0080\3\2\2\2\u0080\u0085\7\36\2\2\u0081\u0082\f\13\2\2\u0082\u0083\7"+
-		",\2\2\u0083\u0085\5\32\16\2\u0084J\3\2\2\2\u0084M\3\2\2\2\u0084P\3\2\2"+
-		"\2\u0084S\3\2\2\2\u0084V\3\2\2\2\u0084Y\3\2\2\2\u0084\\\3\2\2\2\u0084"+
+		"\36\2 \2\"\2$\2&\2\2\13\3\2\13\f\3\2\r\16\3\2\17\21\3\2\22\24\3\2\25\30"+
+		"\3\2\32\33\4\2/\62\65\65\3\2\63\64\3\2&-\u00f9\2(\3\2\2\2\4,\3\2\2\2\6"+
+		"\64\3\2\2\2\bH\3\2\2\2\n\u0090\3\2\2\2\f\u0092\3\2\2\2\16\u009c\3\2\2"+
+		"\2\20\u009e\3\2\2\2\22\u00a0\3\2\2\2\24\u00a2\3\2\2\2\26\u00a4\3\2\2\2"+
+		"\30\u00a7\3\2\2\2\32\u00c2\3\2\2\2\34\u00c4\3\2\2\2\36\u00c7\3\2\2\2 "+
+		"\u00cd\3\2\2\2\"\u00db\3\2\2\2$\u00dd\3\2\2\2&\u00e1\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\3\2\2-.\7\4\2\2./\7\5\2"+
+		"\2/\60\5\6\4\2\60\5\3\2\2\2\61\65\5\16\b\2\62\65\78\2\2\63\65\5\20\t\2"+
+		"\64\61\3\2\2\2\64\62\3\2\2\2\64\63\3\2\2\2\65\7\3\2\2\2\66\67\b\5\1\2"+
+		"\678\7\6\2\289\5\32\16\29:\7\7\2\2:;\5\b\5\22;I\3\2\2\2<=\t\2\2\2=I\5"+
+		"\b\5\21>?\t\3\2\2?I\5\b\5\20@A\7\6\2\2AB\5\b\5\2BC\7\7\2\2CI\3\2\2\2D"+
+		"I\5\16\b\2EI\5\20\t\2FI\5\n\6\2GI\5$\23\2H\66\3\2\2\2H<\3\2\2\2H>\3\2"+
+		"\2\2H@\3\2\2\2HD\3\2\2\2HE\3\2\2\2HF\3\2\2\2HG\3\2\2\2I\u0086\3\2\2\2"+
+		"JK\f\17\2\2KL\t\4\2\2L\u0085\5\b\5\20MN\f\16\2\2NO\t\2\2\2O\u0085\5\b"+
+		"\5\17PQ\f\r\2\2QR\t\5\2\2R\u0085\5\b\5\16ST\f\f\2\2TU\t\6\2\2U\u0085\5"+
+		"\b\5\rVW\f\n\2\2WX\t\7\2\2X\u0085\5\b\5\13YZ\f\t\2\2Z[\7\34\2\2[\u0085"+
+		"\5\b\5\n\\]\f\b\2\2]^\7\35\2\2^\u0085\5\b\5\t_`\f\7\2\2`a\7\36\2\2a\u0085"+
+		"\5\b\5\bbc\f\6\2\2cd\7\37\2\2d\u0085\5\b\5\7ef\f\5\2\2fg\7 \2\2g\u0085"+
+		"\5\b\5\6hi\f\4\2\2ij\7!\2\2jk\5\b\5\2kl\7\"\2\2lm\5\b\5\4m\u0085\3\2\2"+
+		"\2no\f\3\2\2op\7#\2\2p\u0085\5\b\5\4qr\f\25\2\2rs\7\b\2\2s\u0085\7\66"+
+		"\2\2tu\f\24\2\2uv\7\t\2\2vw\5\b\5\2wx\7\n\2\2x\u0085\3\2\2\2yz\f\23\2"+
+		"\2z{\7\b\2\2{|\7\66\2\2|~\7\6\2\2}\177\5\f\7\2~}\3\2\2\2~\177\3\2\2\2"+
+		"\177\u0080\3\2\2\2\u0080\u0085\7\7\2\2\u0081\u0082\f\13\2\2\u0082\u0083"+
+		"\7\31\2\2\u0083\u0085\5\32\16\2\u0084J\3\2\2\2\u0084M\3\2\2\2\u0084P\3"+
+		"\2\2\2\u0084S\3\2\2\2\u0084V\3\2\2\2\u0084Y\3\2\2\2\u0084\\\3\2\2\2\u0084"+
 		"_\3\2\2\2\u0084b\3\2\2\2\u0084e\3\2\2\2\u0084h\3\2\2\2\u0084n\3\2\2\2"+
 		"\u0084q\3\2\2\2\u0084t\3\2\2\2\u0084y\3\2\2\2\u0084\u0081\3\2\2\2\u0085"+
 		"\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\t\3\2\2\2"+
-		"\u0088\u0086\3\2\2\2\u0089\u008a\5\32\16\2\u008a\u008b\7\37\2\2\u008b"+
-		"\u008c\7*\2\2\u008c\u0091\3\2\2\2\u008d\u008e\7\25\2\2\u008e\u008f\7\37"+
-		"\2\2\u008f\u0091\7*\2\2\u0090\u0089\3\2\2\2\u0090\u008d\3\2\2\2\u0091"+
-		"\13\3\2\2\2\u0092\u0097\5\b\5\2\u0093\u0094\7\t\2\2\u0094\u0096\5\b\5"+
-		"\2\u0095\u0093\3\2\2\2\u0096\u0099\3\2\2\2\u0097\u0095\3\2\2\2\u0097\u0098"+
-		"\3\2\2\2\u0098\r\3\2\2\2\u0099\u0097\3\2\2\2\u009a\u009d\5\22\n\2\u009b"+
-		"\u009d\5\24\13\2\u009c\u009a\3\2\2\2\u009c\u009b\3\2\2\2\u009d\17\3\2"+
-		"\2\2\u009e\u009f\7\66\2\2\u009f\21\3\2\2\2\u00a0\u00a1\t\b\2\2\u00a1\23"+
-		"\3\2\2\2\u00a2\u00a3\t\t\2\2\u00a3\25\3\2\2\2\u00a4\u00a5\5\30\r\2\u00a5"+
-		"\u00a6\5\34\17\2\u00a6\27\3\2\2\2\u00a7\u00a8\7\17\2\2\u00a8\u00ad\5\32"+
-		"\16\2\u00a9\u00aa\7\t\2\2\u00aa\u00ac\5\32\16\2\u00ab\u00a9\3\2\2\2\u00ac"+
-		"\u00af\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00b0\3\2"+
-		"\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b1\7$\2\2\u00b1\31\3\2\2\2\u00b2\u00b7"+
-		"\5 \21\2\u00b3\u00b4\7\13\2\2\u00b4\u00b6\7\5\2\2\u00b5\u00b3\3\2\2\2"+
-		"\u00b6\u00b9\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00c3"+
-		"\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba\u00bf\5\"\22\2\u00bb\u00bc\7\13\2\2"+
-		"\u00bc\u00be\7\5\2\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\u00c3\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c2"+
-		"\u00b2\3\2\2\2\u00c2\u00ba\3\2\2\2\u00c3\33\3\2\2\2\u00c4\u00c5\7\66\2"+
-		"\2\u00c5\u00c6\5\36\20\2\u00c6\35\3\2\2\2\u00c7\u00c9\7\r\2\2\u00c8\u00ca"+
-		"\5\f\7\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb"+
-		"\u00cc\7\36\2\2\u00cc\37\3\2\2\2\u00cd\u00cf\5\20\t\2\u00ce\u00d0\5\30"+
-		"\r\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d8\3\2\2\2\u00d1"+
-		"\u00d2\7\37\2\2\u00d2\u00d4\7\66\2\2\u00d3\u00d5\5\30\r\2\u00d4\u00d3"+
-		"\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d7\3\2\2\2\u00d6\u00d1\3\2\2\2\u00d7"+
-		"\u00da\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9!\3\2\2\2"+
-		"\u00da\u00d8\3\2\2\2\u00db\u00dc\t\n\2\2\u00dc#\3\2\2\2\u00dd\u00df\7"+
-		"8\2\2\u00de\u00e0\5&\24\2\u00df\u00de\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0"+
-		"%\3\2\2\2\u00e1\u00e2\7\r\2\2\u00e2\u00e3\5\f\7\2\u00e3\u00e4\7\36\2\2"+
-		"\u00e4\'\3\2\2\2\24*\64H~\u0084\u0086\u0090\u0097\u009c\u00ad\u00b7\u00bf"+
-		"\u00c2\u00c9\u00cf\u00d4\u00d8\u00df";
+		"\u0088\u0086\3\2\2\2\u0089\u008a\5\32\16\2\u008a\u008b\7\b\2\2\u008b\u008c"+
+		"\7$\2\2\u008c\u0091\3\2\2\2\u008d\u008e\7%\2\2\u008e\u008f\7\b\2\2\u008f"+
+		"\u0091\7$\2\2\u0090\u0089\3\2\2\2\u0090\u008d\3\2\2\2\u0091\13\3\2\2\2"+
+		"\u0092\u0097\5\b\5\2\u0093\u0094\7\3\2\2\u0094\u0096\5\b\5\2\u0095\u0093"+
+		"\3\2\2\2\u0096\u0099\3\2\2\2\u0097\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098"+
+		"\r\3\2\2\2\u0099\u0097\3\2\2\2\u009a\u009d\5\22\n\2\u009b\u009d\5\24\13"+
+		"\2\u009c\u009a\3\2\2\2\u009c\u009b\3\2\2\2\u009d\17\3\2\2\2\u009e\u009f"+
+		"\7\66\2\2\u009f\21\3\2\2\2\u00a0\u00a1\t\b\2\2\u00a1\23\3\2\2\2\u00a2"+
+		"\u00a3\t\t\2\2\u00a3\25\3\2\2\2\u00a4\u00a5\5\30\r\2\u00a5\u00a6\5\34"+
+		"\17\2\u00a6\27\3\2\2\2\u00a7\u00a8\7\30\2\2\u00a8\u00ad\5\32\16\2\u00a9"+
+		"\u00aa\7\3\2\2\u00aa\u00ac\5\32\16\2\u00ab\u00a9\3\2\2\2\u00ac\u00af\3"+
+		"\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00b0\3\2\2\2\u00af"+
+		"\u00ad\3\2\2\2\u00b0\u00b1\7\27\2\2\u00b1\31\3\2\2\2\u00b2\u00b7\5 \21"+
+		"\2\u00b3\u00b4\7\t\2\2\u00b4\u00b6\7\n\2\2\u00b5\u00b3\3\2\2\2\u00b6\u00b9"+
+		"\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00c3\3\2\2\2\u00b9"+
+		"\u00b7\3\2\2\2\u00ba\u00bf\5\"\22\2\u00bb\u00bc\7\t\2\2\u00bc\u00be\7"+
+		"\n\2\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\u00c3\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c2\u00b2\3\2"+
+		"\2\2\u00c2\u00ba\3\2\2\2\u00c3\33\3\2\2\2\u00c4\u00c5\7\66\2\2\u00c5\u00c6"+
+		"\5\36\20\2\u00c6\35\3\2\2\2\u00c7\u00c9\7\6\2\2\u00c8\u00ca\5\f\7\2\u00c9"+
+		"\u00c8\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\7\7"+
+		"\2\2\u00cc\37\3\2\2\2\u00cd\u00cf\5\20\t\2\u00ce\u00d0\5\30\r\2\u00cf"+
+		"\u00ce\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d8\3\2\2\2\u00d1\u00d2\7\b"+
+		"\2\2\u00d2\u00d4\7\66\2\2\u00d3\u00d5\5\30\r\2\u00d4\u00d3\3\2\2\2\u00d4"+
+		"\u00d5\3\2\2\2\u00d5\u00d7\3\2\2\2\u00d6\u00d1\3\2\2\2\u00d7\u00da\3\2"+
+		"\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9!\3\2\2\2\u00da\u00d8"+
+		"\3\2\2\2\u00db\u00dc\t\n\2\2\u00dc#\3\2\2\2\u00dd\u00df\78\2\2\u00de\u00e0"+
+		"\5&\24\2\u00df\u00de\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0%\3\2\2\2\u00e1"+
+		"\u00e2\7\6\2\2\u00e2\u00e3\5\f\7\2\u00e3\u00e4\7\7\2\2\u00e4\'\3\2\2\2"+
+		"\24*\64H~\u0084\u0086\u0090\u0097\u009c\u00ad\u00b7\u00bf\u00c2\u00c9"+
+		"\u00cf\u00d4\u00d8\u00df";
 	public static final ATN _ATN =
 		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 	static {
diff --git a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionVisitor.java b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionVisitor.java
index 1f80a34..dfcf31d 100644
--- a/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionVisitor.java
+++ b/compilerCommon/src/main/grammar-gen/android/databinding/parser/BindingExpressionVisitor.java
@@ -1,5 +1,6 @@
-// Generated from BindingExpression.g4 by ANTLR 4.4
+// Generated from BindingExpression.g4 by ANTLR 4.5
 package android.databinding.parser;
+import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.misc.NotNull;
 import org.antlr.v4.runtime.tree.ParseTreeVisitor;
 
@@ -12,20 +13,6 @@
  */
 public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Result> {
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
-
-	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#resources}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
-
-	/**
 	 * Visit a parse tree produced by the {@code BracketOp}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
@@ -34,12 +21,12 @@
 	Result visitBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx);
 
 	/**
-	 * Visit a parse tree produced by the {@code UnaryOp}
+	 * Visit a parse tree produced by the {@code Resource}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+	Result visitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
 
 	/**
 	 * Visit a parse tree produced by the {@code CastOp}
@@ -50,11 +37,12 @@
 	Result visitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * Visit a parse tree produced by the {@code UnaryOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
+	Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
 
 	/**
 	 * Visit a parse tree produced by the {@code AndOrOp}
@@ -73,27 +61,6 @@
 	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
-	 */
-	Result visitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
-
-	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
-
-	/**
 	 * Visit a parse tree produced by the {@code Primary}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
@@ -102,26 +69,12 @@
 	Result visitPrimary(@NotNull BindingExpressionParser.PrimaryContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#type}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitType(@NotNull BindingExpressionParser.TypeContext ctx);
-
-	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
-
-	/**
-	 * Visit a parse tree produced by the {@code ComparisonOp}
+	 * Visit a parse tree produced by the {@code Grouping}
 	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+	Result visitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
 
 	/**
 	 * Visit a parse tree produced by the {@code TernaryOp}
@@ -132,11 +85,12 @@
 	Result visitTernaryOp(@NotNull BindingExpressionParser.TernaryOpContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#constantValue}.
+	 * Visit a parse tree produced by the {@code ComparisonOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
+	Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
 
 	/**
 	 * Visit a parse tree produced by the {@code DotOp}
@@ -147,11 +101,20 @@
 	Result visitDotOp(@NotNull BindingExpressionParser.DotOpContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#defaults}.
+	 * Visit a parse tree produced by the {@code MathOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
+	Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+
+	/**
+	 * Visit a parse tree produced by the {@code QuestionQuestionOp}
+	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
 
 	/**
 	 * Visit a parse tree produced by the {@code BitShiftOp}
@@ -178,42 +141,32 @@
 	Result visitBinaryOp(@NotNull BindingExpressionParser.BinaryOpContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#bindingSyntax}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+	Result visitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
 
 	/**
-	 * Visit a parse tree produced by the {@code Resource}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#defaults}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitResource(@NotNull BindingExpressionParser.ResourceContext ctx);
+	Result visitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#constantValue}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+	Result visitConstantValue(@NotNull BindingExpressionParser.ConstantValueContext ctx);
 
 	/**
-	 * Visit a parse tree produced by the {@code Grouping}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#expression}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitGrouping(@NotNull BindingExpressionParser.GroupingContext ctx);
-
-	/**
-	 * Visit a parse tree produced by the {@code MathOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+	Result visitExpression(@NotNull BindingExpressionParser.ExpressionContext ctx);
 
 	/**
 	 * Visit a parse tree produced by {@link BindingExpressionParser#classExtraction}.
@@ -223,40 +176,18 @@
 	Result visitClassExtraction(@NotNull BindingExpressionParser.ClassExtractionContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#expressionList}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+	Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#literal}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
-
-	/**
-	 * Visit a parse tree produced by the {@code QuestionQuestionOp}
-	 * labeled alternative in {@link BindingExpressionParser#expression}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitQuestionQuestionOp(@NotNull BindingExpressionParser.QuestionQuestionOpContext ctx);
-
-	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
-
-	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
-	 * @param ctx the parse tree
-	 * @return the visitor result
-	 */
-	Result visitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
+	Result visitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
 
 	/**
 	 * Visit a parse tree produced by {@link BindingExpressionParser#identifier}.
@@ -266,9 +197,79 @@
 	Result visitIdentifier(@NotNull BindingExpressionParser.IdentifierContext ctx);
 
 	/**
-	 * Visit a parse tree produced by {@link BindingExpressionParser#literal}.
+	 * Visit a parse tree produced by {@link BindingExpressionParser#javaLiteral}.
 	 * @param ctx the parse tree
 	 * @return the visitor result
 	 */
-	Result visitLiteral(@NotNull BindingExpressionParser.LiteralContext ctx);
+	Result visitJavaLiteral(@NotNull BindingExpressionParser.JavaLiteralContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#stringLiteral}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitStringLiteral(@NotNull BindingExpressionParser.StringLiteralContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocation}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitExplicitGenericInvocation(@NotNull BindingExpressionParser.ExplicitGenericInvocationContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#typeArguments}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitTypeArguments(@NotNull BindingExpressionParser.TypeArgumentsContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#type}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitType(@NotNull BindingExpressionParser.TypeContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#explicitGenericInvocationSuffix}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitExplicitGenericInvocationSuffix(@NotNull BindingExpressionParser.ExplicitGenericInvocationSuffixContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#arguments}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitArguments(@NotNull BindingExpressionParser.ArgumentsContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#primitiveType}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitPrimitiveType(@NotNull BindingExpressionParser.PrimitiveTypeContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#resources}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitResources(@NotNull BindingExpressionParser.ResourcesContext ctx);
+
+	/**
+	 * Visit a parse tree produced by {@link BindingExpressionParser#resourceParameters}.
+	 * @param ctx the parse tree
+	 * @return the visitor result
+	 */
+	Result visitResourceParameters(@NotNull BindingExpressionParser.ResourceParametersContext ctx);
 }
\ No newline at end of file