Skip to content

Commit d25b571

Browse files
committed
SMV: rewrite assignment grammar rules
This rewrites the SMV grammar for assignments and define to match the NuSMV 2.7 manual.
1 parent cf17427 commit d25b571

File tree

1 file changed

+20
-23
lines changed

1 file changed

+20
-23
lines changed

src/smvlang/parser.y

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ simple_var_list:
401401
;
402402

403403
define_declaration:
404-
DEFINE_Token defines
404+
DEFINE_Token define_body
405405
| DEFINE_Token
406406
;
407407

@@ -648,36 +648,27 @@ assignments: assignment
648648
| assignments assignment
649649
;
650650

651-
assignment : assignment_head '(' assignment_var ')' BECOMES_Token formula ';'
651+
assignment : init_Token '(' complex_identifier ')' BECOMES_Token simple_expr ';'
652652
{
653-
if(stack_expr($1).id()==ID_smv_next)
654-
{
655-
PARSER.module->add_assign_next(
656-
unary_exprt{ID_smv_next, std::move(stack_expr($3))},
657-
std::move(stack_expr($6)));
658-
}
659-
else
660-
PARSER.module->add_assign_init(std::move(stack_expr($3)), std::move(stack_expr($6)));
653+
PARSER.module->add_assign_init(std::move(stack_expr($3)), std::move(stack_expr($6)));
661654
}
662-
| assignment_var BECOMES_Token formula ';'
655+
| next_Token '(' complex_identifier ')' BECOMES_Token next_expr ';'
656+
{
657+
PARSER.module->add_assign_next(
658+
unary_exprt{ID_smv_next, std::move(stack_expr($3))},
659+
std::move(stack_expr($6)));
660+
}
661+
| complex_identifier BECOMES_Token formula ';'
663662
{
664663
PARSER.module->add_assign_current(std::move(stack_expr($1)), std::move(stack_expr($3)));
665664
}
666665
;
667666

668-
assignment_var: variable_identifier
669-
;
670-
671-
assignment_head:
672-
init_Token { init($$, ID_init); }
673-
| next_Token { init($$, ID_smv_next); }
674-
;
675-
676-
defines: define
677-
| defines define
667+
define_body: define
668+
| define_body define
678669
;
679670

680-
define : assignment_var BECOMES_Token formula ';'
671+
define : complex_identifier BECOMES_Token next_expr ';'
681672
{
682673
PARSER.module->add_define(std::move(stack_expr($1)), std::move(stack_expr($3)));
683674
}
@@ -724,6 +715,12 @@ word_constant:
724715
}
725716
;
726717

718+
next_expr : basic_expr
719+
;
720+
721+
simple_expr: basic_expr
722+
;
723+
727724
basic_expr : constant
728725
| identifier
729726
{
@@ -743,7 +740,7 @@ basic_expr : constant
743740
// This rule is part of "complex_identifier" in the NuSMV manual.
744741
init($$, ID_smv_self);
745742
}
746-
| basic_expr '(' basic_expr ')'
743+
| basic_expr '(' simple_expr ')'
747744
{
748745
// Not in the NuSMV grammar.
749746
binary($$, $1, ID_index, $3);

0 commit comments

Comments
 (0)