diff --git a/.vscode/settings.json b/.vscode/settings.json index b266fd8..9bd06c2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { - "java.configuration.updateBuildConfiguration": "interactive", - "cSpell.words": [ - "symb" - ], + "java.configuration.updateBuildConfiguration": "automatic", "java.debug.settings.onBuildFailureProceed": true } \ No newline at end of file diff --git a/latte/pom.xml b/latte/pom.xml index 4ccd60e..a623f2a 100644 --- a/latte/pom.xml +++ b/latte/pom.xml @@ -96,10 +96,14 @@ ${version.spoon} + + org.antlr + antlr4-runtime + 4.13.2 + - maven-clean-plugin @@ -137,7 +141,18 @@ maven-project-info-reports-plugin 3.0.0 + + org.antlr + antlr4-maven-plugin + 4.13.2 + + + + antlr4 + + + + - diff --git a/latte/src/main/antlr4/rj/grammar/RJ.g4 b/latte/src/main/antlr4/rj/grammar/RJ.g4 new file mode 100644 index 0000000..094dd9f --- /dev/null +++ b/latte/src/main/antlr4/rj/grammar/RJ.g4 @@ -0,0 +1,81 @@ +grammar RJ; + +prog: expression EOF; + +expression: logicalOrExp; + +logicalOrExp + : logicalAndExp (OR logicalAndExp)* + ; + +logicalAndExp + : equalityExp (AND equalityExp)* + ; + +equalityExp + : relationalExp ((EQ | NEQ) relationalExp)? + ; + +relationalExp + : additiveExp ((LT | GT | LE | GE) additiveExp)? + ; + +additiveExp + : unaryExp ((PLUS | MINUS) unaryExp)* + ; + +unaryExp + : (NOT | MINUS) unaryExp + | primary + ; + +primary + : literal + | RESULT + | oldExp + | fieldAccess + | ID + | LPAREN expression RPAREN + ; + +oldExp + : OLD LPAREN fieldAccess RPAREN + ; + +fieldAccess + : ID DOT ID + ; + +literal + : BOOL + | STRING + | INT + | REAL + ; + +OLD: 'old'; +RESULT: 'result'; + +AND: '&&'; +OR: '||'; +EQ: '=='; +LE: '<='; +LT: '<'; +GE: '>='; +GT: '>'; +PLUS: '+'; +MINUS: '-'; +NEQ: '!='; +NOT: '!'; + +LPAREN: '('; +RPAREN: ')'; +DOT: '.'; + +BOOL: 'true' | 'false'; +ID: '#'* [a-zA-Z_][a-zA-Z0-9_#]*; +STRING: '"' (~["])* '"'; +INT: [0-9]+ ('_' [0-9]+)*; +REAL: ([0-9]+ '.' [0-9]+) | ('.' [0-9]+); + +WS: [ \t\n\r]+ -> channel(HIDDEN);