-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsymonlang.g4
executable file
·126 lines (105 loc) · 3.03 KB
/
symonlang.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
grammar symonlang;
// PARSER HERE
expression
: constant
| function
| expression operator expression
;
function
: FUNCTION_NAME BOPEN argumentList BCLOSE
;
constant
: stringLiteral
| integerLiteral
| floatLiteral
| boolLiteral
;
operator
: PLUS
| MINUS
| DIV
| MUL
| MOD
| LOGICAND
| LOGICOR
| EQ
| NEQ
| LTE
| LT
| GT
| GTE
;
argumentList
: ( expression (',' expression )* )?
;
stringLiteral
: STRING_LIT
;
integerLiteral
: MINUS? INT_LIT
;
floatLiteral
: MINUS? REAL_LIT
;
boolLiteral
: TRUE | FALSE
;
// LEXER HERE
fragment A : [aA] ;
fragment B : [bB] ;
fragment C : [cC] ;
fragment D : [dD] ;
fragment E : [eE] ;
fragment F : [fF] ;
fragment G : [gG] ;
fragment H : [hH] ;
fragment I : [iI] ;
fragment J : [jJ] ;
fragment K : [kK] ;
fragment L : [lL] ;
fragment M : [mM] ;
fragment N : [nN] ;
fragment O : [oO] ;
fragment P : [pP] ;
fragment Q : [qQ] ;
fragment R : [rR] ;
fragment S : [sS] ;
fragment T : [tT] ;
fragment U : [uU] ;
fragment V : [vV] ;
fragment W : [wW] ;
fragment X : [xX] ;
fragment Y : [yY] ;
fragment Z : [zZ] ;
fragment DEC_DIGIT : [0-9];
fragment DEC_DIGITS : DEC_DIGIT+;
PLUS : '+' ;
MINUS : '-' ;
DIV : '/' ;
MUL : '*' ;
MOD : '%' ;
LOGICAND : '&&' ;
LOGICOR : '||' ;
EQ : '==';
NEQ : '!=';
LTE : '<=';
LT : '<';
GT : '>';
GTE : '>=';
DOT : '.' ;
BOPEN : '(' ;
BCLOSE : ')' ;
STRING_LIT : '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
INT_LIT : '0'
| [1-9] DEC_DIGITS?
;
DECIMAL_EXPONENT : E (PLUS|MINUS)? DEC_DIGITS;
REAL_LIT : INT_LIT DOT DEC_DIGITS DECIMAL_EXPONENT?
| INT_LIT DECIMAL_EXPONENT
| DOT DEC_DIGITS DECIMAL_EXPONENT?
;
TRUE : T R U E ;
FALSE : F A L S E ;
FUNCTION_NAME : [a-zA-Z] [a-zA-Z0-9]*;
// IGNORED TOKENS
SPACE : [ \t\r\n]+ -> skip;