Skip to content

Commit 725870a

Browse files
committed
Having a more efficient set-up by forcing the grammar to be LL(*)
1 parent 96f2c86 commit 725870a

25 files changed

Lines changed: 4238 additions & 4062 deletions

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ IF(CMAKE_BUILD_TYPE MATCHES Debug)
2222
set(CMAKE_CXX_FLAGS_DEBUG "-g")
2323
else()
2424
message(WARNING "Compiling in optimized mode. Level=3")
25-
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
25+
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
2626
ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
2727

2828
include_directories(submodules/args)

antlr4/scriptv2/script.g4

Lines changed: 114 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
To be stated with a more specific and sound language.
66
*/
77

8+
89
grammar script;
910
//gsm_gsql: directives*;
1011
//
@@ -31,158 +32,160 @@ grammar script;
3132
// | gexpr #subexpr
3233
// ;
3334

34-
script : (expr ';')* expr
35+
script : inner_block
3536
;
3637

37-
tuple_pair: EscapedString '>>' expr;
38-
39-
expr : '(' expr ')' #paren
40-
| expr '+' expr #add
41-
| expr '-' expr #sub
42-
| expr '/' expr #div
43-
| expr '%' expr #mod
44-
| expr '*' expr #mult
45-
| expr '++' expr #concat
46-
| expr '@' expr #append
47-
| expr '&&' expr #and
48-
| expr '||' expr #or
49-
| '|' expr '|' #abs
50-
| expr '==' expr #eq
51-
| expr '!=' expr #neq
52-
| expr '<=' expr #leq
53-
| expr '>=' expr #geq
54-
| expr '>' expr #gt
55-
| expr '<' expr #lt
56-
| expr ':=' expr #assign
57-
| '(' expr expr ')' #apply
58-
| 'var(' expr ')' #var
59-
| 'eval(' expr ')' #eval
60-
| NOT expr #not
61-
| expr '=>' expr #imply
62-
| IF expr THEN expr ELSE expr #ifte
63-
| 'sub(' expr ',' expr ':' expr ')' #substring
64-
| expr '[' expr ']' #at
65-
| expr '[[' expr ']]' #project
66-
| expr '[' expr ']:=' expr #put
67-
| expr 'in' expr #contains
68-
| REMOVE expr FROM expr #remove
69-
| NUMBER #atom_number
70-
| BOOL #atom_bool
71-
| EscapedString #atom_string
72-
| BOT #null
73-
| STRINGT #type_string
74-
| BOOLT #type_bool
75-
| INTT #type_int
76-
| DOUBLET #type_double
77-
| expr AND_TYPE expr #type_and
78-
| expr OR_TYPE expr #type_or
79-
| LISTT expr #type_list
80-
| 't<' (tuple_pair ';')* tuple_pair ARPAREN #type_tuple
81-
| ANYT #type_any
82-
| VOID #type_bot
83-
| LABELT EscapedString #type_label
84-
| ObjT expr expr #type_lex
85-
| LPAREN (expr ';')* expr RPAREN #atom_array
38+
expr_block : '{' inner_block '}';
39+
inner_block: expr (';' inner_block)?;
40+
41+
in_tuple_pair : EscapedString '' expr (',' in_tuple_pair)?;
42+
43+
//tuple_pair: EscapedString '>>' expr;
44+
45+
operand: NUMBER #atom_number
46+
| BOOL #atom_bool
47+
| EscapedString #atom_string
48+
| BOT #null
49+
| STRINGT #type_string
50+
| BOOLT #type_bool
51+
| INTT #type_int
52+
| DOUBLET #type_double
53+
| ANYT #type_any
54+
| VOID #type_bot
55+
| '(' expr ')' #paren
56+
| '|' expr '|' #abs
57+
| '' expr '' #var
58+
| '' expr '' #eval
59+
| '' in_tuple_pair '' #type_tuple
60+
| '' expr '' #floor
61+
| '' expr '' #ceil
62+
| 'a' expr_block #atom_array
63+
| LABELT EscapedString #type_label
8664
| START #kind
87-
| ALPAREN (tuple_pair ';')* tuple_pair ARPAREN #atom_tuple
88-
| FUN VARNAME '->' LPAREN (expr ';')* expr RPAREN #function
8965
| VARNAME #variable
90-
| 'map(' expr ':' expr ')' #map
91-
| 'select(' expr ':' expr ')' #select
92-
| 'filter(' expr ':' expr ')' #filter
93-
| 'rfold(' expr ',' expr ':' expr ')' #rfold
94-
| 'lfold(' expr ',' expr ':' expr ')' #lfold
95-
| LOG expr expr #log
96-
| POW expr expr #pow
97-
| SIN expr #sin
98-
| COS expr #cos
99-
| TAN expr #tan
100-
| '|_' expr '_|' #floor
101-
| '|-' expr '-|' #ceil
102-
| PHI expr expr #phi
103-
| ELL expr #ell
104-
| XI expr #xi
105-
| INJ expr #inj
106-
| OBJ expr #obj
107-
| FLAT expr #flat
108-
| CROSS expr expr #cross
109-
| SELFX expr #selfcross
110-
| VARPHI expr #varphi
111-
| TYPEOF expr #typeof
112-
| SIGMA expr 'where' expr #sigma_type
113-
| expr SUBTYPE expr #subtype_of
114-
| ASSERT expr #ensure
115-
| expr ENFORCE expr #enforce
116-
| COERCE expr 'as' expr #coerce
66+
;
67+
68+
term :operand #term_operand
69+
| NOT operand #not
70+
| LISTT operand #type_list
71+
| SIN operand #sin
72+
| COS operand #cos
73+
| TAN operand #tan
74+
| ELL operand #ell
75+
| XI operand #xi
76+
| INJ operand #inj
77+
| OBJ operand #obj
78+
| FLAT operand #flat
79+
| SELFX operand #selfcross
80+
| VARPHI operand #varphi
81+
| TYPEOF operand #typeof
82+
| ASSERT operand #ensure
83+
;
84+
85+
cp : 'cp' term term;
86+
87+
expr : term #exprterm
88+
| '+' term expr #add
89+
| '-' term expr #sub
90+
| '÷' term expr #div
91+
| '%' term expr #mod
92+
| '·' term expr #mult
93+
| '^' term expr #concat
94+
| '@' term expr #append
95+
| '' term expr #and
96+
| '' term expr #or
97+
| '=' term expr #eq
98+
| '' term expr #neq
99+
| '' term expr #leq
100+
| '' term expr #geq
101+
| '>' term expr #gt
102+
| '<' term expr #lt
103+
| '' term expr #assign
104+
| '.' term expr #apply
105+
| '' term expr #imply
106+
| 'e' cp expr #ifte
107+
| 'ς' cp expr #substring
108+
| '[' term expr ']' #at
109+
| '' term expr '' #project
110+
| '' cp expr #put
111+
| '' term expr #contains
112+
| 'γ' term expr #remove
113+
| AND_TYPE term expr #type_and
114+
| OR_TYPE term expr #type_or
115+
| ObjT term expr #type_lex
116+
| ALPAREN in_tuple_pair ARPAREN #atom_tuple
117+
| FUN VARNAME '' expr_block #function
118+
| '°' term expr #map
119+
| 'σ' term expr #select
120+
| 'mod' term expr #filter
121+
| 'r' cp expr #rfold
122+
| 'l' cp expr #lfold
123+
| LOG term expr #log
124+
| POW term expr #pow
125+
| PHI term expr #phi
126+
| CROSS term expr #cross
127+
| SIGMA term expr #sigma_type
128+
|SUBTYPE term expr #subtype_of
129+
| ENFORCE term expr #enforce
130+
| COERCE term expr #coerce
117131
;
118132

119133
VOID: 'void';
120-
BOT : 'null'|'';
134+
BOT : '';
121135
COERCE : 'coerce';
122136
ObjT: 'ObjT';
123137
TYPEOF: 'typeof';
124-
SIGMA: 'sigma';
138+
SIGMA: '𝛴';
125139
ASSERT: 'assert';
126140
STRINGT: 'string';
127141
LABELT: 'label';
128142
DOUBLET: 'double';
129-
ANYT: 'any'|'';
143+
ANYT: '';
130144
BOOLT: 'bool';
131145
INTT: 'int';
132146
START: 'star';
133147
KIND: 'kind';
134148
LISTT: 'listof';
135-
SUBTYPE: '<:';
136-
ALPAREN : '<';
137-
ARPAREN : '>';
149+
SUBTYPE: '';
150+
ALPAREN : '';
151+
ARPAREN : '';
138152
LPAREN : '{';
139153
RPAREN : '}';
140154
BOOL : 'tt'
141155
| 'ff'
142156
;
143-
AND_TYPE : '/\\';
144-
OR_TYPE : '\\/';
157+
AND_TYPE : '';
158+
OR_TYPE : '';
145159
FUN : 'fun';
146-
NOT : 'not';
147-
IF : 'if';
148-
THEN : 'then';
149-
ELSE : 'else';
150-
REMOVE : 'remove';
151-
FROM : 'from';
160+
NOT : '¬';
161+
//REMOVE : 'remove';
162+
//FROM : 'from';
152163
LOG : 'log';
153164
POW : 'pow';
154165
SIN : 'sin';
155166
COS : 'cos';
156167
TAN : 'tan';
157-
PHI : 'phi';
158-
ELL : 'ell';
159-
XI : 'xi';
168+
PHI : '𝜙';
169+
ELL : '';
170+
XI : '𝜉';
160171
INJ : 'inj';
161-
OBJ : 'OBJ';
172+
OBJ : 'J';
162173
FLAT : 'flat';
163174
SELFX : 'selfx';
164-
VARPHI : 'varphi';
165-
CROSS : 'cross';
166-
SCRIPT : 'script';
167-
GSQL : 'gsql';
168-
CREATEDB : 'CREATEDB';
175+
VARPHI : '𝜑';
176+
CROSS : '';
169177
VARNAME : [a-z]+ ;
170-
CREATE : 'CREATE';
171-
ELECT : 'ELECT';
172-
MAP : 'MAP';
173-
DISJOINT : 'DISJOINT';
174-
FOLD : 'FOLD';
175178
ENFORCE: 'enforce_subtype';
176179
EscapedString : '"' (~[\\"] | '\\' [\\"])* '"';
177-
NUMBER : [+-]? DecimalFloatingConstant | [+-]? DIGIT;
178-
INTEGER : [+-]? DIGIT;
180+
NUMBER : [-]? DecimalFloatingConstant | [-]? DIGIT;
181+
INTEGER : [-]? DIGIT;
179182
SPACE : [ \t\r\n]+ -> skip;
180183
COMMENT
181184
: '/*' .*? '*/' -> skip
182185
;
183186

184187
LINE_COMMENT
185-
: '//' ~[\r\n]* -> skip
188+
: '#' ~[\r\n]* -> skip
186189
;
187190

188191
fragment
@@ -201,7 +204,7 @@ FractionalConstant
201204

202205
fragment
203206
ExponentPart
204-
: [eE] [+-]? DIGIT
207+
: [eE] [-]? DIGIT
205208
;
206209

207210
fragment DIGIT : [0-9]+;

0 commit comments

Comments
 (0)