55 To be stated with a more specific and sound language.
66 */
77
8+
89grammar 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
119133VOID : ' void' ;
120- BOT : ' null ' | ' ┴' ;
134+ BOT : ' ┴' ;
121135COERCE : ' coerce' ;
122136ObjT : ' ObjT' ;
123137TYPEOF : ' typeof' ;
124- SIGMA : ' sigma ' ;
138+ SIGMA : ' 𝛴 ' ;
125139ASSERT : ' assert' ;
126140STRINGT : ' string' ;
127141LABELT : ' label' ;
128142DOUBLET : ' double' ;
129- ANYT : ' any ' | ' ┬' ;
143+ ANYT : ' ┬' ;
130144BOOLT : ' bool' ;
131145INTT : ' int' ;
132146START : ' star' ;
133147KIND : ' kind' ;
134148LISTT : ' listof' ;
135- SUBTYPE : ' <: ' ;
136- ALPAREN : ' < ' ;
137- ARPAREN : ' > ' ;
149+ SUBTYPE : ' ⦑ ' ;
150+ ALPAREN : ' ⎨ ' ;
151+ ARPAREN : ' ⎬ ' ;
138152LPAREN : ' {' ;
139153RPAREN : ' }' ;
140154BOOL : ' tt'
141155 | ' ff'
142156 ;
143- AND_TYPE : ' / \\ ' ;
144- OR_TYPE : ' \\ / ' ;
157+ AND_TYPE : ' ⋏ ' ;
158+ OR_TYPE : ' ⋎ ' ;
145159FUN : ' 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';
152163LOG : ' log' ;
153164POW : ' pow' ;
154165SIN : ' sin' ;
155166COS : ' cos' ;
156167TAN : ' tan' ;
157- PHI : ' phi ' ;
158- ELL : ' ell ' ;
159- XI : ' xi ' ;
168+ PHI : ' 𝜙 ' ;
169+ ELL : ' ℓ ' ;
170+ XI : ' 𝜉 ' ;
160171INJ : ' inj' ;
161- OBJ : ' OBJ ' ;
172+ OBJ : ' J ' ;
162173FLAT : ' flat' ;
163174SELFX : ' selfx' ;
164- VARPHI : ' varphi' ;
165- CROSS : ' cross' ;
166- SCRIPT : ' script' ;
167- GSQL : ' gsql' ;
168- CREATEDB : ' CREATEDB' ;
175+ VARPHI : ' 𝜑' ;
176+ CROSS : ' ⨯' ;
169177VARNAME : [a-z]+ ;
170- CREATE : ' CREATE' ;
171- ELECT : ' ELECT' ;
172- MAP : ' MAP' ;
173- DISJOINT : ' DISJOINT' ;
174- FOLD : ' FOLD' ;
175178ENFORCE : ' enforce_subtype' ;
176179EscapedString : ' "' (~[\\" ] | '\\ ' [\\ " ])* ' "' ;
177- NUMBER : [+ -]? DecimalFloatingConstant | [+ -]? DIGIT ;
178- INTEGER : [+ -]? DIGIT ;
180+ NUMBER : [-]? DecimalFloatingConstant | [-]? DIGIT ;
181+ INTEGER : [-]? DIGIT ;
179182SPACE : [ \t\r\n]+ -> skip;
180183COMMENT
181184 : ' /*' .*? ' */' -> skip
182185;
183186
184187LINE_COMMENT
185- : ' // ' ~[\r\n]* -> skip
188+ : ' # ' ~[\r\n]* -> skip
186189;
187190
188191fragment
@@ -201,7 +204,7 @@ FractionalConstant
201204
202205fragment
203206ExponentPart
204- : [eE] [+ -]? DIGIT
207+ : [eE] [-]? DIGIT
205208 ;
206209
207210fragment DIGIT : [0-9]+;
0 commit comments