Skip to content

Commit 52181a6

Browse files
authored
Merge pull request #998 from diffblue/smvlang-keywords
SMV: add all missing keywords
2 parents fd24964 + 037db55 commit 52181a6

File tree

2 files changed

+222
-94
lines changed

2 files changed

+222
-94
lines changed

src/smvlang/parser.y

Lines changed: 114 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -146,46 +146,115 @@ static void new_module(YYSTYPE &module)
146146

147147
%}
148148

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"
177250

251+
%token DOTDOT_Token ".."
178252
%token IMPLIES_Token "->"
179253
%token EQUIV_Token "<->"
180254
%token IF_Token "?"
181-
%token XOR_Token "XOR"
182255
%token OR_Token "|"
183256
%token AND_Token "&"
184257
%token NOT_Token "!"
185-
%token MOD_Token "mod"
186-
%token UNION_Token "union"
187-
%token IN_Token "in"
188-
%token NOTIN_Token "notin"
189258
%token DOT_Token "."
190259
%token PLUS_Token "+"
191260
%token MINUS_Token "-"
@@ -198,35 +267,28 @@ static void new_module(YYSTYPE &module)
198267

199268
%token INC_Token
200269
%token DEC_Token
201-
%token NEXT_Token "next"
202-
%token CASE_Token "case"
203-
%token ESAC_Token "esac"
204270
%token BECOMES_Token ":="
205271
%token ADD_Token
206272
%token SUB_Token
207-
%token SWITCH_Token "switch"
208-
%token init_Token "init"
209273

210274
%token STRING_Token "string"
211275
%token QSTRING_Token "quoted string"
212276
%token QUOTE_Token "'"
213277
%token NUMBER_Token "number"
214-
%token FALSE_Token "false"
215-
%token TRUE_Token "true"
216278

217279
/* operator precedence, low to high */
218280
%right IMPLIES_Token
219281
%left EQUIV_Token
220282
%left IF_Token
221-
%left XOR_Token
283+
%left xor_Token
222284
%left OR_Token
223285
%left AND_Token
224286
%left NOT_Token
225287
%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
226288
%left EQUAL_Token NOTEQUAL_Token LT_Token GT_Token LE_Token GE_Token
227-
%left UNION_Token
289+
%left union_Token
228290
%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 */
230292
%left PLUS_Token MINUS_Token
231293
%left TIMES_Token DIVIDE_Token
232294
%left UMINUS /* supplies precedence for unary minus */
@@ -318,7 +380,7 @@ module_argument_list_opt: /* empty */
318380
| module_argument_list
319381
;
320382

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
322384
{
323385
init($$, ID_array);
324386
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
334396
stack_type($$).set(ID_offset, start);
335397
stack_type($$).add_subtype()=stack_type($6);
336398
}
337-
| BOOLEAN_Token { init($$, ID_bool); }
399+
| boolean_Token { init($$, ID_bool); }
338400
| '{' enum_list '}' { $$=$2; }
339401
| NUMBER_Token DOTDOT_Token NUMBER_Token
340402
{
@@ -469,7 +531,7 @@ assignment_var: variable_name
469531
;
470532

471533
assignment_head: init_Token { init($$, ID_init); }
472-
| NEXT_Token { init($$, ID_smv_next); }
534+
| next_Token { init($$, ID_smv_next); }
473535
;
474536

475537
defines: define
@@ -516,7 +578,7 @@ formula : term
516578
;
517579

518580
term : variable_name
519-
| NEXT_Token '(' term ')' { init($$, ID_smv_next); mto($$, $3); }
581+
| next_Token '(' term ')' { init($$, ID_smv_next); mto($$, $3); }
520582
| '(' formula ')' { $$=$2; }
521583
| '{' formula_list '}' { $$=$2; stack_expr($$).id("smv_nondet_choice"); }
522584
| INC_Token '(' term ')' { init($$, "inc"); mto($$, $3); }
@@ -526,20 +588,20 @@ term : variable_name
526588
| NUMBER_Token { init($$, ID_constant); stack_expr($$).set(ID_value, stack_expr($1).id()); stack_expr($$).type()=integer_typet(); }
527589
| TRUE_Token { init($$, ID_constant); stack_expr($$).set(ID_value, ID_true); stack_expr($$).type()=typet(ID_bool); }
528590
| 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; }
530592
| term IF_Token term ':' term %prec IF_Token
531593
{ 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); }
533595
| MINUS_Token term %prec UMINUS
534596
{ 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); }
536598
| term TIMES_Token term { binary($$, $1, ID_mult, $3); }
537599
| term DIVIDE_Token term { binary($$, $1, ID_div, $3); }
538600
| term PLUS_Token term { binary($$, $1, ID_plus, $3); }
539601
| term MINUS_Token term { binary($$, $1, ID_minus, $3); }
540602
| term EQUIV_Token term { binary($$, $1, ID_smv_iff, $3); }
541603
| 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); }
543605
| term OR_Token term { j_binary($$, $1, ID_or, $3); }
544606
| term AND_Token term { j_binary($$, $1, ID_and, $3); }
545607
| NOT_Token term { init($$, ID_not); mto($$, $2); }
@@ -564,7 +626,7 @@ term : variable_name
564626
| term LE_Token term { binary($$, $1, ID_le, $3); }
565627
| term GT_Token term { binary($$, $1, ID_gt, $3); }
566628
| 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); }
568630
| term IN_Token term { binary($$, $1, ID_smv_setin, $3); }
569631
| term NOTIN_Token term { binary($$, $1, ID_smv_setnotin, $3); }
570632
;

0 commit comments

Comments
 (0)