The first draft of the grammar file of beetl 2

original
2013/10/21 11:21
Number of readings 752

After a weekend of hard work, we finally made the syntax file of beetl2.0. Thanks to antlr4, it is not so difficult to write and maintain the syntax file.

 parser  grammar BeetlParser; options { tokenVocab=BeetlLexer; } // starting point for parsing a java file prog :    statement* EOF ; block :    LEFT_BRACE statement* RIGHT_BRACE ; // STATMENT statement :   block |   textStatment |    constantsTextStatment |   PARAS   |   If parExpression statement (Else statement)? |    For LEFT_PAR forControl RIGHT_PAR statement |    While parExpression statement |    Switch parExpression switchBlock |    Select g_switchStatment |   Try NOT? block (Catch   LEFT_PAR Identifier RIGHT_PAR  block   )?   |    Return expression? END |   Break END |   Continue END  |    Var varDeclareList END  |    Directive  directiveExp |   assignMent END |   functionTagCall |    statementExpression END   ; directiveExp:  Identifier (StringLiteral)?  END; g_switchStatment :	 (LEFT_PAR base=expression RIGHT_PAR)?  LEFT_BRACE g_caseStatment* g_defaultStatment? RIGHT_BRACE ; g_caseStatment  :	Case expression (COMMA expression)* COLON statement ; g_defaultStatment :	Default COLON statement; 	 varDeclareList :  assignMent (COMMA assignMent)*  ; 	 assignMent	 :	Identifier   |	Identifier ASSIN expression  |	Identifier ASSIN  block ; switchBlock :    LEFT_BRACE switchBlockStatementGroup* switchLabel* RIGHT_BRACE ; switchBlockStatementGroup :    switchLabel+ statement* ; switchLabel :    Case expression COLON    |   Default COLON ; forControl :     Var?   Identifier FOR_IN expression ; // EXPRESSIONS parExpression :    LEFT_PAR expression RIGHT_PAR ; expressionList :   expression (COMMA expression)* ; statementExpression :   expression ; TextStatement://Expression output LEFT_TOKEN textVar RIGHT_TOKEN |       LEFT_TOKEN NOT LEFT_PAR textVar RIGHT_PAR RIGHT_TOKEN ; textVar	 :	b=expression  (COMMA textformat)? ; textformat: fm=functionNs (ASSIN StringLiteral) | StringLiteral  ; constantsTextStatment : LEFT_TEXT_TOKEN integerLiteral RIGHT_TOKEN;//Constant output, representing array search constantExpression :   expression ; expression :   literal      |   AT nativeCall    |   functionCall |   varRef |   json |   expression (INCREASE | DECREASE)  |   (ADD|MIN) expression |    (INCREASE|DECREASE) expression |   NOT expression |   expression (MUlTIP|DIV|MOD) expression |   expression (ADD|MIN) expression |   expression (LESS ASSIN | LARGE ASSIN |LARGE |LESS) expression |   expression (EQUAL | NOT_EQUAL) expression |    expression AND expression |    expression OR expression |    expression QUESTOIN expression? COLON expression?  |    expression NOT expression? //SAFE OUTPUT |   LEFT_PAR expression RIGHT_PAR ; varRef:Identifier ( varAttribute)* ; varAttribute :PERIOD Identifier | VIRTUAL Identifier |LEFT_SQBR expression RIGHT_SQBR ; functionCall: functionNs LEFT_PAR expressionList? RIGHT_PAR (varAttribute)* ;  functionTagCall:functionNs  LEFT_PAR expressionList? RIGHT_PAR  block ; functionNs:Identifier (PERIOD Identifier)*; // NATIVE nativeCall: nativeVarRefChain (nativeMethod|nativeArray| PERIOD nativeVarRefChain)*; nativeMethod:  LEFT_PAR (expression (COMMA expression) *)?  RIGHT_PAR ; nativeArray: LEFT_SQBR expression RIGHT_SQBR; nativeVarRefChain:Identifier (PERIOD Identifier)*;         json	:	LEFT_SQBR (expression  (',' expression)*)?  RIGHT_SQBR |	LEFT_BRACE (jsonKeyValue (',' jsonKeyValue)*)?  RIGHT_BRACE ; jsonKeyValue :	StringLiteral ':' expression   |	Identifier ':' expression  ; literal :   integerLiteral |    FloatingPointLiteral |   CharacterLiteral |   StringLiteral |   booleanLiteral |   NULL ; integerLiteral :   HexLiteral |   OctalLiteral |   DecimalLiteral ; booleanLiteral :   TRUE |   FALSE ; arguments :    LEFT_PAR expressionList? RIGHT_PAR ;


Expand to read the full text
Loading
Click to lead the topic 📣 Post and join the discussion 🔥
Reward
zero comment
one Collection
one fabulous
 Back to top
Top