First draft of beetl 2 grammar

original
2013/10/21 12:38
Reading 462

Thanks to antlr4 for making things easier

 lexer grammar BeetlLexer; If:'if'; For:'for'; Else:'else'; While:'while'; Switch:'switch'; Select:'select'; Return:'return'; Break:'break'; Continue:'continue'; Var:'var';     Directive:'DIRECTIVE'|'directive'; Case:'case'; Default:'default'; Try:'try'; Catch:'catch';    LEFT_BRACE:'{'; RIGHT_BRACE:'}'; LEFT_PAR:'('; RIGHT_PAR:')'; LEFT_SQBR:'['; RIGHT_SQBR:']'; INCREASE:'++'; DECREASE:'--'; VIRTUAL:'.~'; ADD:'+'; MIN:'-'; MUlTIP:'*'; DIV:'/'; MOD:'%'; EQUAL:'=='; NOT_EQUAL:'!='; ASSIN:'='; LARGE:'>'; LESS:'<'; NOT:'!'; AND:'&&'; OR:'||'; QUESTOIN:'?'; AT:'@'; NULL:'null'; TRUE:'true'; FALSE:'false'; END:';'; COMMA:','; COLON:':'; PERIOD:'.'; FOR_IN:'in'; LEFT_TOKEN:'<<'; RIGHT_TOKEN:'>>'; LEFT_TEXT_TOKEN	:'<$'; // LEXER HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ; DecimalLiteral : ('0' | '1'..' 9' '0'..' 9'*) IntegerTypeSuffix? ; OctalLiteral : '0' ('0'..' 7')+ IntegerTypeSuffix? ; fragment HexDigit : ('0'..' 9'|'a'..' f'|'A'..'F') ; fragment IntegerTypeSuffix : ('l'|'L') ; 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? ; fragment Exponent : ('e'|'E') ('+'|'-')?  ('0'..'9')+ ; fragment FloatTypeSuffix : ('f'|'F'|'d'|'D') ; CharacterLiteral :   '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' ; StringLiteral :  '"' ( EscapeSequence | ~('\\'|'"') )* '"' ; fragment EscapeSequence :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') |   UnicodeEscape |   OctalEscape ; fragment OctalEscape :   '\\' ('0'..'3') ('0'..'7') ('0'..'7') |   '\\' ('0'..'7') ('0'..'7') |   '\\' ('0'..'7') ; fragment UnicodeEscape :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit ; Identifier :   Letter (Letter|JavaIDDigit)* ; /**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' ; 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' ; COMMENT_OPEN :   '/*'    ->mode(ISLAND),channel(HIDDEN)  ; mode ISLAND; PARAS:'@' Identifier ':' Identifier ('.'  Identifier)*  ; WS1  :    [ \r\t\u000C\n]+ -> channel(HIDDEN); COMMENT_END: '*/'  -> mode(DEFAULT_MODE),channel(HIDDEN) ; WS  :    [ \r\t\u000C\n]+ -> channel(HIDDEN) ; LINE_COMMENT : '//' ~[\r\n]* '\r'? ' \n' -> channel(HIDDEN) ;
Expand to read the full text
Loading
Click to lead the topic 📣 Post and join the discussion 🔥
Reward
zero comment
zero Collection
zero fabulous
 Back to top
Top