Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- grammar BasicLang;
- parse
- : block EOF
- ;
- block
- : (statement | functionDecl | functionForAttr)* (Return expression )?
- ;
- statement
- : assignment
- | functionCall ';'
- | ifStatement
- | forStatement
- | whileStatement
- ;
- assignment
- : Identifier indexes? '=' expression
- ;
- functionCall
- : Identifier '(' exprList? ')' #identifierFunctionCall
- | Write '(' exprList ')' #WriteFunctionCall
- | Print '(' expression? ')' #PrintFunctionCall
- | Assert '(' expression ')' #assertFunctionCall
- | Size '(' expression ')' #sizeFunctionCall
- | Mode '(' expression ')' #ModeCall
- ;
- ifStatement
- : ifStat elseIfStat* elseStat? End
- ;
- ifStat
- : If expression Colon block
- ;
- elseIfStat
- : Else expression Colon block
- ;
- elseStat
- : ElseIf Colon block
- ;
- functionDecl
- : Identifier OParen idList? CParen Colon block End
- ;
- functionForAttr
- : Identifier '=' functionDecl End
- ;
- forStatement
- : For OParen Identifier '=' expression Comma expression CParen Colon block End
- ;
- whileStatement
- : While expression Colon block End
- ;
- idList
- : Identifier (',' Identifier)*
- ;
- exprList
- : expression (',' expression)*
- ;
- expression
- : '-' expression #unaryMinusExpression
- | '!' expression #notExpression
- | expression '^' expression #powerExpression
- | expression '*' expression #multiplyExpression
- | expression '/' expression #divideExpression
- | expression '%' expression #modulusExpression
- | expression '+' expression #addExpression
- | expression '-' expression #subtractExpression
- | expression '>=' expression #gtEqExpression
- | expression '<=' expression #ltEqExpression
- | expression '>' expression #gtExpression
- | expression '<' expression #ltExpression
- | expression '==' expression #eqExpression
- | expression '!=' expression #notEqExpression
- | expression '&&' expression #andExpression
- | expression '||' expression #orExpression
- | expression '?' expression ':' expression #ternaryExpression
- | expression In expression #inExpression
- | Number #numberExpression
- | Bool #boolExpression
- | Null #nullExpression
- | functionCall indexes? #functionCallExpression
- | list indexes? #listExpression
- | Identifier indexes? #identifierExpression
- | String indexes? #stringExpression
- | '(' expression ')' indexes? #expressionExpression
- | Input '(' String? ')' #inputExpression
- ;
- list
- : '[' exprList? ']'
- ;
- indexes
- : ('[' expression ']')+
- ;
- Write : 'write';
- Print : 'print';
- Input : 'input';
- Assert : 'assert';
- Size : 'size';
- Mode : 'mode';
- Def : 'def';
- If : 'if';
- ElseIf : 'else if';
- Else : 'else';
- Return : 'return';
- For : 'for';
- While : 'while';
- To : 'to';
- End : '}';
- In : 'in';
- Null : 'null';
- Or : '||';
- And : '&&';
- Equals : '==';
- NEquals : '!=';
- GTEquals : '>=';
- LTEquals : '<=';
- Pow : '^';
- Excl : '!';
- GT : '>';
- LT : '<';
- Add : '+';
- Subtract : '-';
- Multiply : '*';
- Divide : '/';
- Modulus : '%';
- OBracket : '[';
- CBracket : ']';
- OParen : '(';
- CParen : ')';
- SColon : ';';
- Assign : '=';
- Comma : ',';
- QMark : '?';
- Colon : '{';
- Bool
- : 'true'
- | 'false'
- ;
- Number
- : Int ('.' Digit*)?
- ;
- Identifier
- : [a-zA-Z_] [a-zA-Z_0-9]*
- ;
- String
- : ["] [a-zA-Z0-9 \t]* ["]
- | ['] [a-zA-Z0-9 \t]* [']
- ;
- Comment
- : ('//' ~[\r\n]* | '/**' .*? '*/') -> skip
- ;
- Space
- : [ \t\r\n\u000C] -> skip
- ;
- fragment Int
- : [1-9] Digit*
- | '0'
- ;
- fragment Digit
- : [0-9]
- ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement