-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSynthtaxParser.g4
73 lines (49 loc) · 1.47 KB
/
SynthtaxParser.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
parser grammar SynthtaxParser;
options { tokenVocab=SynthtaxLexer; }
prog : cppHeader? function+ EOF ;
cppHeader : HEADER ;
function : funcDeclaration funcBody ;
funcDeclaration : TYPE ID OPENPAREN formalParameters? CLOSEPAREN ;
formalParameters : (ID COLON TYPE ) (COMMA ID COLON TYPE)* ;
funcBody : OPENBRACKET statement* CLOSEBRACKET ;
statement
: varDeclaration
| expressionStatement
| ifStatement
| whileStatement
| returnStatement
| assignmentStatement
| printStatement
| printLnStatement
| SEMICOLON
;
varDeclaration : TYPE (assignmentStatement | ID);
expressionStatement : expression ;
ifStatement
: IF OPENPAREN expression CLOSEPAREN block ELSE block
| IF OPENPAREN expression CLOSEPAREN block
;
whileStatement : WHILE OPENPAREN expression CLOSEPAREN block ;
returnStatement : RETURN expression ;
assignmentStatement : ID ASSIGN expression ;
printStatement : PRINT expression;
printLnStatement : PRINTLN expression;
block : OPENBRACKET statement* CLOSEBRACKET ;
expression : lessExpression(EQUALITY lessExpression)* ;
lessExpression : addSubExpression(LESS addSubExpression)* ;
addSubExpression
: mulDivExpression(ADD mulDivExpression)*
| mulDivExpression(SUB mulDivExpression)*
;
mulDivExpression
: atom(MUL atom)*
| atom(DIV atom)*
;
atom
: OPENPAREN expression CLOSEPAREN
| ID OPENPAREN expressionList? CLOSEPAREN // function call
| ID
| literal
;
expressionList : expression (COMMA expression)* ;
literal : STRING | INT | FLOAT | CHAR | BOOL;