1c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount/* 21143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount [The "BSD licence"] 31143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount Copyright (c) 2013 Terence Parr, Sam Harwell 41143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount All rights reserved. 51143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount Redistribution and use in source and binary forms, with or without 61143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount modification, are permitted provided that the following conditions 71143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount are met: 81143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount 1. Redistributions of source code must retain the above copyright 91143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount notice, this list of conditions and the following disclaimer. 101143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount 2. Redistributions in binary form must reproduce the above copyright 111143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount notice, this list of conditions and the following disclaimer in the 121143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount documentation and/or other materials provided with the distribution. 131143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount 3. The name of the author may not be used to endorse or promote products 141143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount derived from this software without specific prior written permission. 151143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 161143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 171143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 181143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 191143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 201143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 211143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 221143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 231143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 241143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 251143e9f52ceb27b1fe0b4733845b7a3550bfa6f4George Mount*/ 26c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountgrammar BindingExpression; 27c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 28c09acd410cdf8399b43f5e4a77313337a0c9a178George MountbindingSyntax 29c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : expression defaults? 30c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 31c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 32c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountdefaults 33c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : ',' 'default' '=' constantValue 34c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 35c09acd410cdf8399b43f5e4a77313337a0c9a178George MountconstantValue 36c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : literal 37c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | ResourceReference 38c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | identifier 39c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 40c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 41c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountexpression 42c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '(' expression ')' # Grouping 43c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// this isn't allowed yet. 44c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// | THIS # Primary 45c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | literal # Primary 46c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | identifier # Primary 47c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | classExtraction # Primary 48ae7cb82316e351c488ee3b9c7226602321f34301George Mount | resources # Resource 49d071769a3dc21fa36b55eb727d1f54474fb76b00George Mount// | typeArguments (explicitGenericInvocationSuffix | 'this' arguments) # GenericCall 50c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | expression '.' Identifier # DotOp 51c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// | expression '.' 'this' # ThisReference 52d071769a3dc21fa36b55eb727d1f54474fb76b00George Mount// | expression '.' explicitGenericInvocation # ExplicitGenericInvocationOp 53c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | expression '[' expression ']' # BracketOp 54d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar | target=expression '.' methodName=Identifier '(' args=expressionList? ')' # MethodInvocation 55c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '(' type ')' expression # CastOp 56d071769a3dc21fa36b55eb727d1f54474fb76b00George Mount | op=('+'|'-') expression # UnaryOp 57d071769a3dc21fa36b55eb727d1f54474fb76b00George Mount | op=('~'|'!') expression # UnaryOp 5835e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op=('*'|'/'|'%') right=expression # MathOp 5935e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op=('+'|'-') right=expression # MathOp 6035e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op=('<<' | '>>>' | '>>') right=expression # BitShiftOp 6135e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op=('<=' | '>=' | '>' | '<') right=expression # ComparisonOp 62c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | expression 'instanceof' type # InstanceOfOp 6335e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op=('==' | '!=') right=expression # ComparisonOp 6435e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='&' right=expression # BinaryOp 6535e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='^' right=expression # BinaryOp 6635e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='|' right=expression # BinaryOp 6735e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='&&' right=expression # AndOrOp 6835e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='||' right=expression # AndOrOp 698d89ffbe003c2b51522e56ae64b48d5398c9837bGeorge Mount | <assoc=right>left=expression op='?' iftrue=expression ':' iffalse=expression # TernaryOp 7035e303ef39a4fe83175b69486a6bbd444ef6ccd5Yigit Boyar | left=expression op='??' right=expression # QuestionQuestionOp 71c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 72c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 73c09acd410cdf8399b43f5e4a77313337a0c9a178George MountTHIS 74c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'this' 75c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 76c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 77c09acd410cdf8399b43f5e4a77313337a0c9a178George MountclassExtraction 78c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : type '.' 'class' 79c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'void' '.' 'class' 80c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 81c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 82c09acd410cdf8399b43f5e4a77313337a0c9a178George MountexpressionList 83c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : expression (',' expression)* 84c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 85c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 86c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountliteral 87c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : javaLiteral 88c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | stringLiteral 89c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 90c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 91c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountidentifier 92c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Identifier 93c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 94c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 95c09acd410cdf8399b43f5e4a77313337a0c9a178George MountjavaLiteral 96c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : IntegerLiteral 97c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | FloatingPointLiteral 98c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | BooleanLiteral 99c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | NullLiteral 100c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | CharacterLiteral 101c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 102c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 103c09acd410cdf8399b43f5e4a77313337a0c9a178George MountstringLiteral 104c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : SingleQuoteString 105c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | DoubleQuoteString 106c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 107c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 108c09acd410cdf8399b43f5e4a77313337a0c9a178George MountexplicitGenericInvocation 109c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : typeArguments explicitGenericInvocationSuffix 110c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 111c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 112c09acd410cdf8399b43f5e4a77313337a0c9a178George MounttypeArguments 113c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '<' type (',' type)* '>' 114c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 115c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 116c09acd410cdf8399b43f5e4a77313337a0c9a178George Mounttype 117c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : classOrInterfaceType ('[' ']')* 118c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | primitiveType ('[' ']')* 119c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 120c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 121c09acd410cdf8399b43f5e4a77313337a0c9a178George MountexplicitGenericInvocationSuffix 122c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Identifier arguments 123c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 124c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 125c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountarguments 126c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '(' expressionList? ')' 127c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 128c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 129c09acd410cdf8399b43f5e4a77313337a0c9a178George MountclassOrInterfaceType 130c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : identifier typeArguments? ('.' Identifier typeArguments? )* 131c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 132c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 133c09acd410cdf8399b43f5e4a77313337a0c9a178George MountprimitiveType 134c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'boolean' 135c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'char' 136c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'byte' 137c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'short' 138c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'int' 139c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'long' 140c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'float' 141c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'double' 142c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 143c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 144ae7cb82316e351c488ee3b9c7226602321f34301George Mountresources 145ae7cb82316e351c488ee3b9c7226602321f34301George Mount : ResourceReference resourceParameters? 146ae7cb82316e351c488ee3b9c7226602321f34301George Mount ; 147ae7cb82316e351c488ee3b9c7226602321f34301George Mount 148ae7cb82316e351c488ee3b9c7226602321f34301George MountresourceParameters 149ae7cb82316e351c488ee3b9c7226602321f34301George Mount : '(' expressionList ')' 150ae7cb82316e351c488ee3b9c7226602321f34301George Mount ; 151ae7cb82316e351c488ee3b9c7226602321f34301George Mount 152c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// LEXER 153c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 154c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.1 Integer Literals 155c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 156c09acd410cdf8399b43f5e4a77313337a0c9a178George MountIntegerLiteral 157c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : DecimalIntegerLiteral 158c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | HexIntegerLiteral 159c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | OctalIntegerLiteral 160c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | BinaryIntegerLiteral 161c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 162c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 163c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 164c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDecimalIntegerLiteral 165c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : DecimalNumeral IntegerTypeSuffix? 166c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 167c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 168c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 169c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexIntegerLiteral 170c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : HexNumeral IntegerTypeSuffix? 171c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 172c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 173c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 174c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalIntegerLiteral 175c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : OctalNumeral IntegerTypeSuffix? 176c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 177c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 178c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 179c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryIntegerLiteral 180c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : BinaryNumeral IntegerTypeSuffix? 181c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 182c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 183c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 184c09acd410cdf8399b43f5e4a77313337a0c9a178George MountIntegerTypeSuffix 185c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [lL] 186c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 187c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 188c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 189c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDecimalNumeral 190c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '0' 191c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | NonZeroDigit (Digits? | Underscores Digits) 192c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 193c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 194c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 195c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDigits 196c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Digit (DigitOrUnderscore* Digit)? 197c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 198c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 199c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 200c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDigit 201c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '0' 202c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | NonZeroDigit 203c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 204c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 205c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 206c09acd410cdf8399b43f5e4a77313337a0c9a178George MountNonZeroDigit 207c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [1-9] 208c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 209c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 210c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 211c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDigitOrUnderscore 212c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Digit 213c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '_' 214c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 215c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 216c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 217c09acd410cdf8399b43f5e4a77313337a0c9a178George MountUnderscores 218c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '_'+ 219c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 220c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 221c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 222c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexNumeral 223c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '0' [xX] HexDigits 224c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 225c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 226c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 227c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexDigits 228c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : HexDigit (HexDigitOrUnderscore* HexDigit)? 229c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 230c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 231c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 232c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexDigit 233c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [0-9a-fA-F] 234c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 235c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 236c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 237c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexDigitOrUnderscore 238c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : HexDigit 239c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '_' 240c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 241c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 242c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 243c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalNumeral 244c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '0' Underscores? OctalDigits 245c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 246c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 247c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 248c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalDigits 249c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : OctalDigit (OctalDigitOrUnderscore* OctalDigit)? 250c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 251c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 252c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 253c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalDigit 254c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [0-7] 255c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 256c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 257c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 258c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalDigitOrUnderscore 259c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : OctalDigit 260c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '_' 261c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 262c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 263c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 264c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryNumeral 265c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '0' [bB] BinaryDigits 266c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 267c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 268c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 269c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryDigits 270c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : BinaryDigit (BinaryDigitOrUnderscore* BinaryDigit)? 271c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 272c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 273c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 274c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryDigit 275c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [01] 276c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 277c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 278c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 279c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryDigitOrUnderscore 280c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : BinaryDigit 281c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '_' 282c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 283c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 284c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.2 Floating-Point Literals 285c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 286c09acd410cdf8399b43f5e4a77313337a0c9a178George MountFloatingPointLiteral 287c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : DecimalFloatingPointLiteral 288c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | HexadecimalFloatingPointLiteral 289c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 290c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 291c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 292c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDecimalFloatingPointLiteral 293c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Digits '.' Digits? ExponentPart? FloatTypeSuffix? 294c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '.' Digits ExponentPart? FloatTypeSuffix? 295c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | Digits ExponentPart FloatTypeSuffix? 296c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | Digits FloatTypeSuffix 297c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 298c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 299c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 300c09acd410cdf8399b43f5e4a77313337a0c9a178George MountExponentPart 301c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : ExponentIndicator SignedInteger 302c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 303c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 304c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 305c09acd410cdf8399b43f5e4a77313337a0c9a178George MountExponentIndicator 306c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [eE] 307c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 308c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 309c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 310c09acd410cdf8399b43f5e4a77313337a0c9a178George MountSignedInteger 311c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : Sign? Digits 312c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 313c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 314c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 315c09acd410cdf8399b43f5e4a77313337a0c9a178George MountSign 316c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [+-] 317c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 318c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 319c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 320c09acd410cdf8399b43f5e4a77313337a0c9a178George MountFloatTypeSuffix 321c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [fFdD] 322c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 323c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 324c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 325c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexadecimalFloatingPointLiteral 326c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : HexSignificand BinaryExponent FloatTypeSuffix? 327c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 328c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 329c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 330c09acd410cdf8399b43f5e4a77313337a0c9a178George MountHexSignificand 331c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : HexNumeral '.'? 332c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '0' [xX] HexDigits? '.' HexDigits 333c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 334c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 335c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 336c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryExponent 337c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : BinaryExponentIndicator SignedInteger 338c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 339c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 340c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 341c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBinaryExponentIndicator 342c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [pP] 343c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 344c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 345c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.3 Boolean Literals 346c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 347c09acd410cdf8399b43f5e4a77313337a0c9a178George MountBooleanLiteral 348c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'true' 349c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'false' 350c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 351c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 352c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.4 Character Literals 353c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 354c09acd410cdf8399b43f5e4a77313337a0c9a178George MountCharacterLiteral 355c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '\'' SingleCharacter '\'' 356c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '\'' EscapeSequence '\'' 357c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 358c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 359c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 360c09acd410cdf8399b43f5e4a77313337a0c9a178George MountSingleCharacter 361c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : ~['\\] 362c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 363c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.5 String Literals 364c09acd410cdf8399b43f5e4a77313337a0c9a178George MountSingleQuoteString 3657920e17f7b501d5792e7e3250e9dbb69eca86adeGeorge Mount : '`' SingleQuoteStringCharacter* '`' 366c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 367c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 368c09acd410cdf8399b43f5e4a77313337a0c9a178George MountDoubleQuoteString 369c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '"' StringCharacters? '"' 370c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 371c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 372c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 373c09acd410cdf8399b43f5e4a77313337a0c9a178George MountStringCharacters 374c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : StringCharacter+ 375c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 376c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 377c09acd410cdf8399b43f5e4a77313337a0c9a178George MountStringCharacter 378c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : ~["\\] 379c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | EscapeSequence 380c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 381c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 382c09acd410cdf8399b43f5e4a77313337a0c9a178George MountSingleQuoteStringCharacter 383c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : ~[`\\] 384c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | EscapeSequence 385c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 386c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 387c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.6 Escape Sequences for Character and String Literals 388c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 389c09acd410cdf8399b43f5e4a77313337a0c9a178George MountEscapeSequence 390c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '\\' [btnfr"'`\\] 391c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | OctalEscape 392c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | UnicodeEscape 393c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 394c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 395c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 396c09acd410cdf8399b43f5e4a77313337a0c9a178George MountOctalEscape 397c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '\\' OctalDigit 398c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '\\' OctalDigit OctalDigit 399c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | '\\' ZeroToThree OctalDigit OctalDigit 400c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 401c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 402c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 403c09acd410cdf8399b43f5e4a77313337a0c9a178George MountUnicodeEscape 404c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : '\\' 'u' HexDigit HexDigit HexDigit HexDigit 405c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 406c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 407c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 408c09acd410cdf8399b43f5e4a77313337a0c9a178George MountZeroToThree 409c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [0-3] 410c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 411c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 412c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.10.7 The Null Literal 413c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 414c09acd410cdf8399b43f5e4a77313337a0c9a178George MountNullLiteral 415c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'null' 416c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 417c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 418c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// §3.8 Identifiers (must appear after all keywords in the grammar) 419c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 420c09acd410cdf8399b43f5e4a77313337a0c9a178George MountIdentifier 421c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : JavaLetter JavaLetterOrDigit* 422c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 423c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 424c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 425c09acd410cdf8399b43f5e4a77313337a0c9a178George MountJavaLetter 426c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [a-zA-Z$_] // these are the "java letters" below 0xFF 427c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | // covers all characters above 0xFF which are not a surrogate 428c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ~[\u0000-\u00FF\uD800-\uDBFF] 429c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount {Character.isJavaIdentifierStart(_input.LA(-1))}? 430c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF 431c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount [\uD800-\uDBFF] [\uDC00-\uDFFF] 432c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount {Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}? 433c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 434c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 435c09acd410cdf8399b43f5e4a77313337a0c9a178George Mountfragment 436c09acd410cdf8399b43f5e4a77313337a0c9a178George MountJavaLetterOrDigit 437c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : [a-zA-Z0-9$_] // these are the "java letters or digits" below 0xFF 438c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | // covers all characters above 0xFF which are not a surrogate 439c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ~[\u0000-\u00FF\uD800-\uDBFF] 440c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount {Character.isJavaIdentifierPart(_input.LA(-1))}? 441c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF 442c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount [\uD800-\uDBFF] [\uDC00-\uDFFF] 443c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount {Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}? 444c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 445c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 446c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// 447c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// Whitespace and comments 448c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// 449c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 450c09acd410cdf8399b43f5e4a77313337a0c9a178George MountWS : [ \t\r\n\u000C]+ -> skip 451c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 452c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 453c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// 454c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// Resource references 455c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount// 456c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 457c09acd410cdf8399b43f5e4a77313337a0c9a178George MountResourceReference 458ae7cb82316e351c488ee3b9c7226602321f34301George Mount : '@' (PackageName ':')? ResourceType '/' Identifier 459c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 460c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 461c09acd410cdf8399b43f5e4a77313337a0c9a178George MountPackageName 462c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'android' 463c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | Identifier 464c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 465c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount 466c09acd410cdf8399b43f5e4a77313337a0c9a178George MountResourceType 467c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount : 'anim' 468c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'animator' 469c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'bool' 470c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'color' 471c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'colorStateList' 472c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'dimen' 473c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'dimenOffset' 474c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'dimenSize' 475c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'drawable' 476c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'fraction' 477c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'id' 478c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'integer' 479c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'intArray' 480c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'interpolator' 481c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'layout' 482c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'plurals' 483c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'stateListAnimator' 484c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'string' 485c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'stringArray' 486c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount | 'transition' 487c752a5f795baf6df435ef60881316cb748df407cGeorge Mount | 'typedArray' 488c09acd410cdf8399b43f5e4a77313337a0c9a178George Mount ; 489