-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLiLang.g4
101 lines (81 loc) · 2.57 KB
/
LiLang.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
grammar LiLang;
VAR : 'var' ;
FUNCTION : 'function' ;
RETURN : 'return' ;
IF : 'if' ;
ELSE : 'else' ;
SWITCH : 'switch' ;
CASE : 'case' ;
DEFAULT : 'default' ;
INT : 'int' ;
LIST : 'list' ;
ADD : 'add' ;
REMOVE : 'remove' ;
GET : 'get' ;
SIZE : 'size' ;
PRINT : 'print' ;
WS : [ \t\r\n]+ -> skip ;
COMMENT : '//' ~[\r\n]* -> skip ;
NUMBER : [0-9]+ ;
IDENTIFIER : [a-zA-Z_][a-zA-Z_0-9]* ;
STRING : '"' .*? '"' ;
PLUS : '+' ;
MINUS : '-' ;
MULT : '*' ;
DIV : '/' ;
ASSIGN : '=' ;
LPAREN : '(' ;
RPAREN : ')' ;
LBRACE : '{' ;
RBRACE : '}' ;
COLON : ':' ;
SEMICOLON : ';' ;
COMMA : ',' ;
AMPERSAND : '&' ;
SLBRACE : '[' ;
LLBRACE : ']' ;
LT : '<' ;
GT : '>' ;
program : statement* ;
statement : variableDeclaration
| functionDeclaration
| assignment
| expressionStatement
| block
| ifStatement
| switchStatement
| returnStatement
| listOperation
| printCall
;
variableDeclaration : VAR IDENTIFIER COLON type SEMICOLON ;
functionDeclaration : FUNCTION IDENTIFIER LPAREN paramList? RPAREN type block ;
printCall : PRINT LPAREN expression RPAREN SEMICOLON ;
paramList : param (COMMA param)* ;
param : IDENTIFIER COLON type (AMPERSAND)? ;
type : INT
| LIST LT type GT
;
assignment : IDENTIFIER ASSIGN expression SEMICOLON ;
expressionStatement : expression SEMICOLON ;
block : LBRACE statement* RBRACE ;
ifStatement : IF LPAREN expression RPAREN block (ELSE block)? ;
switchStatement : SWITCH expression LBRACE caseStatement* RBRACE ;
caseStatement : CASE expression COLON statement* ;
listOperation : IDENTIFIER '.' method LPAREN expression? RPAREN SEMICOLON ;
method : ADD
| REMOVE
| GET
| SIZE
;
returnStatement : RETURN expression SEMICOLON ;
expression : expression PLUS expression
| expression MINUS expression
| expression MULT expression
| expression DIV expression
| functionCall
| NUMBER
| IDENTIFIER
| LPAREN expression RPAREN ;
functionCall : IDENTIFIER LPAREN argList? RPAREN ;
argList : expression (COMMA expression)* ;