From d5f1b9a23ac78685e3e2d2db2972456f53596827 Mon Sep 17 00:00:00 2001 From: Thibaud Date: Thu, 5 Apr 2018 20:02:25 +0200 Subject: [PATCH] Adding grammar file and pom.xml --- Demo.g4 | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pom.xml | 30 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 Demo.g4 create mode 100644 pom.xml diff --git a/Demo.g4 b/Demo.g4 new file mode 100644 index 0000000..9c0b969 --- /dev/null +++ b/Demo.g4 @@ -0,0 +1,59 @@ +grammar Demo; + +program: programPart+; + +programPart: statement #MainStatement + | functionDefinition #ProgPartFunctionDefinition + ; + +statement : println ';' + | print ';' + | varDeclaration ';' + | assignment ';' + | branch + ; + +branch : 'if' '(' condition=expression ')' onTrue=block 'else' onFalse=block ; + +block : '{' statementList '}' ; + +expression: left=expression '/' right=expression #Div + | left=expression '*' right=expression #Mult + | left=expression '-' right=expression #Minus + | left=expression '+' right=expression #Plus + | left=expression operator=('<' | '<=' | '>' | '>=') right=expression #Relational + | left=expression operator='&&' right=expression #And + | left=expression operator='||' right=expression #Or + | number=NUMBER #Number + | txt=STRING #String + | varName=IDENTIFIER #Variable + | functionCall #FuncCallExpression + ; + +varDeclaration: 'int' varName=IDENTIFIER ; + +assignment: varName=IDENTIFIER '=' expr=expression ; + +println: 'println(' argument=expression ')' ; + +print: 'print(' argument=expression ')' ; + +functionDefinition: 'int' funcName=IDENTIFIER '(' params=parameters')' '{' statements=statementList 'return' retValue=expression ';' '}' ; + +statementList : (statement)* ; + +parameters: + | declarations+=varDeclaration (',' declarations+=varDeclaration)* + ; + +functionCall: funcName=IDENTIFIER '(' args=expressionList ')'; + +expressionList: + | expressions+=expression (',' expressions+=expression)* + ; + +// Terminals +IDENTIFIER: [A-Za-z][A-Za-z0-9]*; +NUMBER: [0-9]+; +WHITESPACE: [ \t\n\r]+ -> skip; +STRING: '"' .*? '"'; diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ef5f5e4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + + 1.8 + 1.8 + + + org.example + antlr-compiler + pom + 1.0-SNAPSHOT + + parser + compiler + + + + + + org.antlr + antlr4 + 4.7.1 + + + + \ No newline at end of file