@@ -146,46 +146,115 @@ static void new_module(YYSTYPE &module)
146
146
147
147
%}
148
148
149
- %token AG_Token " AG"
150
- %token AX_Token " AX"
151
- %token AF_Token " AF"
152
- %token EG_Token " EG"
153
- %token EX_Token " EX"
154
- %token EF_Token " EF"
155
-
156
- %token G_Token " G"
157
- %token X_Token " X"
158
- %token F_Token " F"
159
- %token R_Token " R"
160
- %token U_Token " U"
161
-
162
- %token INIT_Token " INIT"
163
- %token TRANS_Token " TRANS"
164
- %token SPEC_Token " SPEC"
165
- %token LTLSPEC_Token " LTLSPEC"
166
- %token VAR_Token " VAR"
167
- %token DEFINE_Token " DEFINE"
168
- %token ASSIGN_Token " ASSIGN"
169
- %token INVAR_Token " INVAR"
170
- %token FAIRNESS_Token " FAIRNESS"
171
- %token MODULE_Token " MODULE"
172
- %token ARRAY_Token " array"
173
- %token OF_Token " of"
174
- %token DOTDOT_Token " .."
175
- %token BOOLEAN_Token " boolean"
176
- %token EXTERN_Token " EXTERN"
149
+ /* Keywords from page 7 */
150
+ /* https://nusmv.fbk.eu/userman/v27/nusmv.pdf */
151
+ %token MODULE_Token " MODULE"
152
+ %token DEFINE_Token " DEFINE"
153
+ %token MDEFINE_Token " MDEFINE"
154
+ %token CONSTANTS_Token " CONSTANTS"
155
+ %token VAR_Token " VAR"
156
+ %token IVAR_Token " IVAR"
157
+ %token FROZENVAR_Token " FROZENVAR"
158
+ %token INIT_Token " INIT"
159
+ %token TRANS_Token " TRANS"
160
+ %token INVAR_Token " INVAR"
161
+ %token SPEC_Token " SPEC"
162
+ %token CTLSPEC_Token " CTLSPEC"
163
+ %token LTLSPEC_Token " LTLSPEC"
164
+ %token PSLSPEC_Token " PSLSPEC"
165
+ %token COMPUTE_Token " COMPUTE"
166
+ %token NAME_Token " NAME"
167
+ %token INVARSPEC_Token " INVARSPEC"
168
+ %token FAIRNESS_Token " FAIRNESS"
169
+ %token JUSTICE_Token " JUSTICE"
170
+ %token COMPASSION_Token " COMPASSION"
171
+ %token ISA_Token " ISA"
172
+ %token ASSIGN_Token " ASSIGN"
173
+ %token CONSTRAINT_Token " CONSTRAINT"
174
+ %token SIMPWFF_Token " SIMPWFF"
175
+ %token CTLWFF_Token " CTLWFF"
176
+ %token LTLWFF_Token " LTLWFF"
177
+ %token PSLWFF_Token " PSLWFF"
178
+ %token COMPWFF_Token " COMPWFF"
179
+ %token IN_Token " IN"
180
+ %token MIN_Token " MIN"
181
+ %token MAX_Token " MAX"
182
+ %token MIRROR_Token " MIRROR"
183
+ %token PRED_Token " PRED"
184
+ %token PREDICATES_Token " PREDICATES"
185
+
186
+ %token process_Token " process"
187
+ %token array_Token " array"
188
+ %token of_Token " of"
189
+ %token boolean_Token " boolean"
190
+ %token integer_Token " integer"
191
+ %token real_Token " real"
192
+ %token word_Token " word"
193
+ %token word1_Token " word1"
194
+ %token bool_Token " bool"
195
+ %token signed_Token " signed"
196
+ %token unsigned_Token " unsigned"
197
+ %token extend_Token " extend"
198
+ %token resize_Token " resize"
199
+ %token sizeof_Token " sizeof"
200
+ %token uwconst_Token " uwconst"
201
+ %token swconst_Token " swconst"
202
+
203
+ %token EX_Token " EX"
204
+ %token AX_Token " AX"
205
+ %token EF_Token " EF"
206
+ %token AF_Token " AF"
207
+ %token EG_Token " EG"
208
+ %token AG_Token " AG"
209
+ %token E_Token " E"
210
+ %token F_Token " F"
211
+ %token O_Token " O"
212
+ %token G_Token " G"
213
+ %token H_Token " H"
214
+ %token X_Token " X"
215
+ %token Y_Token " Y"
216
+ %token Z_Token " Z"
217
+ %token A_Token " A"
218
+ %token U_Token " U"
219
+ %token S_Token " S"
220
+ %token V_Token " V"
221
+ %token T_Token " T"
222
+ %token BU_Token " BU"
223
+ %token EBF_Token " EBF"
224
+ %token ABF_Token " ABF"
225
+ %token EBG_Token " EBG"
226
+ %token ABG_Token " ABG"
227
+
228
+ %token case_Token " case"
229
+ %token esac_Token " esac"
230
+ %token mod_Token " mod"
231
+ %token next_Token " next"
232
+ %token init_Token " init"
233
+ %token union_Token " union"
234
+ %token in_Token " in"
235
+ %token xor_Token " xor"
236
+ %token xnor_Token " xnor"
237
+ %token self_Token " self"
238
+ %token TRUE_Token " TRUE"
239
+ %token FALSE_Token " FALSE"
240
+ %token count_Token " count"
241
+ %token abs_Token " abs"
242
+ %token max_Token " max"
243
+ %token min_Token " min"
244
+
245
+ /* Not in the NuSMV manual */
246
+ %token EXTERN_Token " EXTERN"
247
+ %token switch_Token " switch"
248
+ %token notin_Token " notin"
249
+ %token R_Token " R"
177
250
251
+ %token DOTDOT_Token " .."
178
252
%token IMPLIES_Token " ->"
179
253
%token EQUIV_Token " <->"
180
254
%token IF_Token " ?"
181
- %token XOR_Token " XOR"
182
255
%token OR_Token " |"
183
256
%token AND_Token " &"
184
257
%token NOT_Token " !"
185
- %token MOD_Token " mod"
186
- %token UNION_Token " union"
187
- %token IN_Token " in"
188
- %token NOTIN_Token " notin"
189
258
%token DOT_Token " ."
190
259
%token PLUS_Token " +"
191
260
%token MINUS_Token " -"
@@ -198,35 +267,28 @@ static void new_module(YYSTYPE &module)
198
267
199
268
%token INC_Token
200
269
%token DEC_Token
201
- %token NEXT_Token " next"
202
- %token CASE_Token " case"
203
- %token ESAC_Token " esac"
204
270
%token BECOMES_Token " :="
205
271
%token ADD_Token
206
272
%token SUB_Token
207
- %token SWITCH_Token " switch"
208
- %token init_Token " init"
209
273
210
274
%token STRING_Token " string"
211
275
%token QSTRING_Token " quoted string"
212
276
%token QUOTE_Token " '"
213
277
%token NUMBER_Token " number"
214
- %token FALSE_Token " false"
215
- %token TRUE_Token " true"
216
278
217
279
/* operator precedence, low to high */
218
280
%right IMPLIES_Token
219
281
%left EQUIV_Token
220
282
%left IF_Token
221
- %left XOR_Token
283
+ %left xor_Token
222
284
%left OR_Token
223
285
%left AND_Token
224
286
%left NOT_Token
225
287
%left EX_Token AX_Token EF_Token AF_Token EG_Token AG_Token E_Token A_Token U_Token R_Token F_Token G_Token X_Token
226
288
%left EQUAL_Token NOTEQUAL_Token LT_Token GT_Token LE_Token GE_Token
227
- %left UNION_Token
289
+ %left union_Token
228
290
%left IN_Token NOTIN_Token
229
- %left MOD_Token /* Precedence from CMU SMV, different from NuSMV */
291
+ %left mod_Token /* Precedence from CMU SMV, different from NuSMV */
230
292
%left PLUS_Token MINUS_Token
231
293
%left TIMES_Token DIVIDE_Token
232
294
%left UMINUS /* supplies precedence for unary minus */
@@ -318,7 +380,7 @@ module_argument_list_opt: /* empty */
318
380
| module_argument_list
319
381
;
320
382
321
- type : ARRAY_Token NUMBER_Token DOTDOT_Token NUMBER_Token OF_Token type
383
+ type : array_Token NUMBER_Token DOTDOT_Token NUMBER_Token of_Token type
322
384
{
323
385
init ($$, ID_array);
324
386
int start=atoi(stack_expr($2 ).id().c_str());
@@ -334,7 +396,7 @@ type : ARRAY_Token NUMBER_Token DOTDOT_Token NUMBER_Token OF_Token type
334
396
stack_type ($$).set(ID_offset, start);
335
397
stack_type ($$).add_subtype()=stack_type($6 );
336
398
}
337
- | BOOLEAN_Token { init($$ , ID_bool); }
399
+ | boolean_Token { init($$ , ID_bool); }
338
400
| ' {' enum_list ' }' { $$ =$2 ; }
339
401
| NUMBER_Token DOTDOT_Token NUMBER_Token
340
402
{
@@ -469,7 +531,7 @@ assignment_var: variable_name
469
531
;
470
532
471
533
assignment_head: init_Token { init ($$, ID_init); }
472
- | NEXT_Token { init ($$, ID_smv_next); }
534
+ | next_Token { init ($$, ID_smv_next); }
473
535
;
474
536
475
537
defines: define
@@ -516,7 +578,7 @@ formula : term
516
578
;
517
579
518
580
term : variable_name
519
- | NEXT_Token ' (' term ' )' { init ($$, ID_smv_next); mto ($$, $3 ); }
581
+ | next_Token ' (' term ' )' { init ($$, ID_smv_next); mto ($$, $3 ); }
520
582
| ' (' formula ' )' { $$=$2 ; }
521
583
| ' {' formula_list ' }' { $$=$2 ; stack_expr ($$).id (" smv_nondet_choice" ); }
522
584
| INC_Token ' (' term ' )' { init ($$, " inc" ); mto ($$, $3 ); }
@@ -526,20 +588,20 @@ term : variable_name
526
588
| NUMBER_Token { init ($$, ID_constant); stack_expr ($$).set (ID_value, stack_expr ($1 ).id ()); stack_expr ($$).type ()=integer_typet (); }
527
589
| TRUE_Token { init ($$, ID_constant); stack_expr ($$).set (ID_value, ID_true); stack_expr ($$).type ()=typet (ID_bool); }
528
590
| FALSE_Token { init ($$, ID_constant); stack_expr ($$).set (ID_value, ID_false); stack_expr ($$).type ()=typet (ID_bool); }
529
- | CASE_Token cases ESAC_Token { $$=$2 ; }
591
+ | case_Token cases esac_Token { $$=$2 ; }
530
592
| term IF_Token term ' :' term %prec IF_Token
531
593
{ init ($$, ID_if); mto ($$, $1 ); mto ($$, $3 ); mto ($$, $5 ); }
532
- | SWITCH_Token ' (' variable_name ' )' ' {' switches ' }' { init ($$, ID_switch); mto ($$, $3 ); mto ($$, $6 ); }
594
+ | switch_Token ' (' variable_name ' )' ' {' switches ' }' { init ($$, ID_switch); mto ($$, $3 ); mto ($$, $6 ); }
533
595
| MINUS_Token term %prec UMINUS
534
596
{ init ($$, ID_unary_minus); mto ($$, $2 ); }
535
- | term MOD_Token term { binary ($$, $1 , ID_mod, $3 ); }
597
+ | term mod_Token term { binary ($$, $1 , ID_mod, $3 ); }
536
598
| term TIMES_Token term { binary ($$, $1 , ID_mult, $3 ); }
537
599
| term DIVIDE_Token term { binary ($$, $1 , ID_div, $3 ); }
538
600
| term PLUS_Token term { binary ($$, $1 , ID_plus, $3 ); }
539
601
| term MINUS_Token term { binary ($$, $1 , ID_minus, $3 ); }
540
602
| term EQUIV_Token term { binary ($$, $1 , ID_smv_iff, $3 ); }
541
603
| term IMPLIES_Token term { binary ($$, $1 , ID_implies, $3 ); }
542
- | term XOR_Token term { j_binary ($$, $1 , ID_xor, $3 ); }
604
+ | term xor_Token term { j_binary ($$, $1 , ID_xor, $3 ); }
543
605
| term OR_Token term { j_binary ($$, $1 , ID_or, $3 ); }
544
606
| term AND_Token term { j_binary ($$, $1 , ID_and, $3 ); }
545
607
| NOT_Token term { init ($$, ID_not); mto ($$, $2 ); }
@@ -564,7 +626,7 @@ term : variable_name
564
626
| term LE_Token term { binary ($$, $1 , ID_le, $3 ); }
565
627
| term GT_Token term { binary ($$, $1 , ID_gt, $3 ); }
566
628
| term GE_Token term { binary ($$, $1 , ID_ge, $3 ); }
567
- | term UNION_Token term { binary ($$, $1 , ID_smv_union, $3 ); }
629
+ | term union_Token term { binary ($$, $1 , ID_smv_union, $3 ); }
568
630
| term IN_Token term { binary ($$, $1 , ID_smv_setin, $3 ); }
569
631
| term NOTIN_Token term { binary ($$, $1 , ID_smv_setnotin, $3 ); }
570
632
;
0 commit comments