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