make expressions nestable
This commit is contained in:
@@ -44,14 +44,21 @@ return_statement
|
||||
;
|
||||
|
||||
expression
|
||||
: atom MULT atom #multiplicationExpression
|
||||
| atom op=(ADD | SUB) atom #additiveExpression
|
||||
| atom MOD atom #moduloExpression
|
||||
| SUB atom #unaryNegateExpression
|
||||
| atom #atomExpression
|
||||
: atom #atomExpression
|
||||
| OPAR lhs=expression ADD rhs=expression CPAR #additionExpression
|
||||
| OPAR lhs=expression SUB rhs=expression CPAR #substractionExpression
|
||||
| OPAR lhs=expression MUL rhs=expression CPAR #multiplicationExpression
|
||||
| OPAR lhs=expression DIV rhs=expression CPAR #divisionExpression
|
||||
| OPAR lhs=expression MOD rhs=expression CPAR #moduloExpression
|
||||
| SUB expression #negateExpression
|
||||
| functionCall #functionCallExpression
|
||||
;
|
||||
|
||||
atom
|
||||
: INTEGER_LITERAL #intAtom
|
||||
| IDENT # variable
|
||||
;
|
||||
|
||||
functionCall
|
||||
: IDENT OPAR arguments CPAR
|
||||
;
|
||||
@@ -60,11 +67,6 @@ arguments
|
||||
: (expression (COMMA expression)*)?
|
||||
;
|
||||
|
||||
atom
|
||||
: INTEGER_LITERAL #intAtom
|
||||
| IDENT # variable
|
||||
;
|
||||
|
||||
PRINT: 'print';
|
||||
IF: 'if';
|
||||
ELSE: 'else';
|
||||
@@ -79,10 +81,11 @@ CPAR: ')';
|
||||
COMMA: ',';
|
||||
EQUAL: '=';
|
||||
|
||||
MULT: '*';
|
||||
MUL: '*';
|
||||
ADD: '+';
|
||||
SUB: '-';
|
||||
MOD: '%';
|
||||
DIV: '/';
|
||||
|
||||
INTEGER_LITERAL
|
||||
: [0-9]+
|
||||
|
||||
Reference in New Issue
Block a user