antlr/tool/playground/JavaLexer.g

205 lines
4.8 KiB
Plaintext

lexer grammar JavaLexer;
@members {
protected boolean enumIsKeyword = true;
protected boolean assertIsKeyword = true;
}
T__25 : 'package' ;
T__26 : ';' ;
T__27 : 'import' ;
T__28 : 'static' ;
T__29 : '.' ;
T__30 : '*' ;
T__31 : 'public' ;
T__32 : 'protected' ;
T__33 : 'private' ;
T__34 : 'abstract' ;
T__35 : 'final' ;
T__36 : 'strictfp' ;
T__37 : 'class' ;
T__38 : 'extends' ;
T__39 : 'implements' ;
T__40 : '<' ;
T__41 : ',' ;
T__42 : '>' ;
T__43 : '&' ;
T__44 : '{' ;
T__45 : '}' ;
T__46 : 'interface' ;
T__47 : 'void' ;
T__48 : '[' ;
T__49 : ']' ;
T__50 : 'throws' ;
T__51 : '=' ;
T__52 : 'native' ;
T__53 : 'synchronized' ;
T__54 : 'transient' ;
T__55 : 'volatile' ;
T__56 : 'boolean' ;
T__57 : 'char' ;
T__58 : 'byte' ;
T__59 : 'short' ;
T__60 : 'int' ;
T__61 : 'long' ;
T__62 : 'float' ;
T__63 : 'double' ;
T__64 : '?' ;
T__65 : 'super' ;
T__66 : '(' ;
T__67 : ')' ;
T__68 : '...' ;
T__69 : 'this' ;
T__70 : 'null' ;
T__71 : 'true' ;
T__72 : 'false' ;
T__73 : '@' ;
T__74 : 'default' ;
T__75 : ':' ;
T__76 : 'if' ;
T__77 : 'else' ;
T__78 : 'for' ;
T__79 : 'while' ;
T__80 : 'do' ;
T__81 : 'try' ;
T__82 : 'finally' ;
T__83 : 'switch' ;
T__84 : 'return' ;
T__85 : 'throw' ;
T__86 : 'break' ;
T__87 : 'continue' ;
T__88 : 'catch' ;
T__89 : 'case' ;
T__90 : '+=' ;
T__91 : '-=' ;
T__92 : '*=' ;
T__93 : '/=' ;
T__94 : '&=' ;
T__95 : '|=' ;
T__96 : '^=' ;
T__97 : '%=' ;
T__98 : '||' ;
T__99 : '&&' ;
T__100 : '|' ;
T__101 : '^' ;
T__102 : '==' ;
T__103 : '!=' ;
T__104 : 'instanceof' ;
T__105 : '+' ;
T__106 : '-' ;
T__107 : '/' ;
T__108 : '%' ;
T__109 : '++' ;
T__110 : '--' ;
T__111 : '~' ;
T__112 : '!' ;
T__113 : 'new' ;
// $ANTLR src "JavaCombined.g" 911
HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 913
DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 915
OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 917
fragment
HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;// $ANTLR src "JavaCombined.g" 920
fragment
IntegerTypeSuffix : ('l'|'L') ;// $ANTLR src "JavaCombined.g" 923
FloatingPointLiteral
: ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix?
| '.' ('0'..'9')+ Exponent? FloatTypeSuffix?
| ('0'..'9')+ Exponent FloatTypeSuffix?
| ('0'..'9')+ FloatTypeSuffix
| ('0x' | '0X') (HexDigit )*
('.' (HexDigit)*)?
( 'p' | 'P' )
( '+' | '-' )?
( '0' .. '9' )+
FloatTypeSuffix?
;// $ANTLR src "JavaCombined.g" 930
fragment
Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;// $ANTLR src "JavaCombined.g" 933
fragment
FloatTypeSuffix : ('f'|'F'|'d'|'D') ;// $ANTLR src "JavaCombined.g" 936
CharacterLiteral
: '\'' ( EscapeSequence | ~('\''|'\\') ) '\''
;// $ANTLR src "JavaCombined.g" 940
StringLiteral
: '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;// $ANTLR src "JavaCombined.g" 944
fragment
EscapeSequence
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
| UnicodeEscape
| OctalEscape
;// $ANTLR src "JavaCombined.g" 951
fragment
OctalEscape
: '\\' ('0'..'3') ('0'..'7') ('0'..'7')
| '\\' ('0'..'7') ('0'..'7')
| '\\' ('0'..'7')
;// $ANTLR src "JavaCombined.g" 958
fragment
UnicodeEscape
: '\\' 'u' HexDigit HexDigit HexDigit HexDigit
;// $ANTLR src "JavaCombined.g" 963
ENUM: 'enum' {if (!enumIsKeyword) $type=Identifier;}
;// $ANTLR src "JavaCombined.g" 966
ASSERT
: 'assert' {if (!assertIsKeyword) $type=Identifier;}
;// $ANTLR src "JavaCombined.g" 970
Identifier
: Letter (Letter|JavaIDDigit)*
;// $ANTLR src "JavaCombined.g" 974
/**I found this char range in JavaCC's grammar, but Letter and Digit overlap.
Still works, but...
*/
fragment
Letter
: '\u0024' |
'\u0041'..'\u005a' |
'\u005f' |
'\u0061'..'\u007a' |
'\u00c0'..'\u00d6' |
'\u00d8'..'\u00f6' |
'\u00f8'..'\u00ff' |
'\u0100'..'\u1fff' |
'\u3040'..'\u318f' |
'\u3300'..'\u337f' |
'\u3400'..'\u3d2d' |
'\u4e00'..'\u9fff' |
'\uf900'..'\ufaff'
;// $ANTLR src "JavaCombined.g" 994
fragment
JavaIDDigit
: '\u0030'..'\u0039' |
'\u0660'..'\u0669' |
'\u06f0'..'\u06f9' |
'\u0966'..'\u096f' |
'\u09e6'..'\u09ef' |
'\u0a66'..'\u0a6f' |
'\u0ae6'..'\u0aef' |
'\u0b66'..'\u0b6f' |
'\u0be7'..'\u0bef' |
'\u0c66'..'\u0c6f' |
'\u0ce6'..'\u0cef' |
'\u0d66'..'\u0d6f' |
'\u0e50'..'\u0e59' |
'\u0ed0'..'\u0ed9' |
'\u1040'..'\u1049'
;// $ANTLR src "JavaCombined.g" 1013
WS : (' '|'\r'|'\t'|'\u000C'|'\n')+ {skip();}
;
LINE_COMMENT
: '//' ~('\n'|'\r')* '\r'? '\n' {skip();}
;
COMMENT_START
: '/*' {pushMode(COMMENT_MODE); more();}
;
mode COMMENT_MODE;
COMMENT : '*/' {skip(); popMode();} ;
COMMENT_INSIDE : . {more();} ;