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);