make expressions nestable

This commit is contained in:
2019-12-16 21:44:37 +01:00
parent de7625750e
commit 629f67b39c

View File

@@ -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]+