@@ -264,6 +264,8 @@ static void new_module(YYSTYPE &module)
264
264
%token LT_Token " <"
265
265
%token GT_Token " >"
266
266
%token NOTEQUAL_Token " !="
267
+ %token LTLT_Token " <<"
268
+ %token GTGT_Token " >>"
267
269
268
270
%token INC_Token
269
271
%token DEC_Token
@@ -289,8 +291,10 @@ static void new_module(YYSTYPE &module)
289
291
%left union_Token
290
292
%left IN_Token NOTIN_Token
291
293
%left mod_Token /* Precedence from CMU SMV, different from NuSMV */
294
+ %left LTLT_Token GTGT_Token
292
295
%left PLUS_Token MINUS_Token
293
296
%left TIMES_Token DIVIDE_Token
297
+ %left COLONCOLON_Token
294
298
%left UMINUS /* supplies precedence for unary minus */
295
299
%left DOT_Token
296
300
@@ -476,6 +480,21 @@ simple_type_specifier:
476
480
stack_type ($$).add_subtype ()=stack_type ($6 );
477
481
}
478
482
| boolean_Token { init ($$, ID_bool); }
483
+ | word_Token ' [' NUMBER_Token ' ]'
484
+ {
485
+ init ($$, ID_unsignedbv);
486
+ stack_type ($$).set (ID_width, stack_expr ($3 ).id ());
487
+ }
488
+ | signed_Token word_Token ' [' NUMBER_Token ' ]'
489
+ {
490
+ init ($$, ID_signedbv);
491
+ stack_type ($$).set (ID_width, stack_expr ($4 ).id ());
492
+ }
493
+ | unsigned_Token word_Token ' [' NUMBER_Token ' ]'
494
+ {
495
+ init ($$, ID_unsignedbv);
496
+ stack_type ($$).set (ID_width, stack_expr ($4 ).id ());
497
+ }
479
498
| ' {' enum_list ' }' { $$=$2 ; }
480
499
| NUMBER_Token DOTDOT_Token NUMBER_Token
481
500
{
@@ -669,6 +688,9 @@ term : variable_name
669
688
| MINUS_Token term %prec UMINUS
670
689
{ init ($$, ID_unary_minus); mto ($$, $2 ); }
671
690
| term mod_Token term { binary ($$, $1 , ID_mod, $3 ); }
691
+ | term GTGT_Token term { binary ($$, $1 , ID_shr, $3 ); }
692
+ | term LTLT_Token term { binary ($$, $1 , ID_shl, $3 ); }
693
+ | term COLONCOLON_Token term { binary ($$, $1 , ID_concatenation, $3 ); }
672
694
| term TIMES_Token term { binary ($$, $1 , ID_mult, $3 ); }
673
695
| term DIVIDE_Token term { binary ($$, $1 , ID_div, $3 ); }
674
696
| term PLUS_Token term { binary ($$, $1 , ID_plus, $3 ); }
@@ -680,6 +702,23 @@ term : variable_name
680
702
| term OR_Token term { j_binary ($$, $1 , ID_or, $3 ); }
681
703
| term AND_Token term { j_binary ($$, $1 , ID_and, $3 ); }
682
704
| NOT_Token term { init ($$, ID_not); mto ($$, $2 ); }
705
+ | term EQUAL_Token term { binary ($$, $1 , ID_equal, $3 ); }
706
+ | term NOTEQUAL_Token term { binary ($$, $1 , ID_notequal, $3 ); }
707
+ | term LT_Token term { binary ($$, $1 , ID_lt, $3 ); }
708
+ | term LE_Token term { binary ($$, $1 , ID_le, $3 ); }
709
+ | term GT_Token term { binary ($$, $1 , ID_gt, $3 ); }
710
+ | term GE_Token term { binary ($$, $1 , ID_ge, $3 ); }
711
+ | term union_Token term { binary ($$, $1 , ID_smv_union, $3 ); }
712
+ | term IN_Token term { binary ($$, $1 , ID_smv_setin, $3 ); }
713
+ | term NOTIN_Token term { binary ($$, $1 , ID_smv_setnotin, $3 ); }
714
+ | extend_Token ' (' term ' ,' term ' )' { binary ($$, $3 , ID_smv_extend, $5 ); }
715
+ | resize_Token ' (' term ' ,' term ' )' { binary ($$, $3 , ID_smv_resize, $5 ); }
716
+ | signed_Token ' (' term ' )' { init ($$, ID_smv_signed_cast); mto ($$, $3 ); }
717
+ | sizeof_Token ' (' term ' )' { init ($$, ID_smv_sizeof); mto ($$, $3 ); }
718
+ | swconst_Token ' (' term ' ,' term ' )' { binary ($$, $3 , ID_smv_swconst, $5 ); }
719
+ | unsigned_Token ' (' term ' )' { init ($$, ID_smv_unsigned_cast); mto ($$, $3 ); }
720
+ | uwconst_Token ' (' term ' ,' term ' )' { binary ($$, $3 , ID_smv_uwconst, $5 ); }
721
+ /* CTL */
683
722
| AX_Token term { init ($$, ID_AX); mto ($$, $2 ); }
684
723
| AF_Token term { init ($$, ID_AF); mto ($$, $2 ); }
685
724
| AG_Token term { init ($$, ID_AG); mto ($$, $2 ); }
@@ -690,21 +729,13 @@ term : variable_name
690
729
| A_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_AR, $5 ); }
691
730
| E_Token ' [' term U_Token term ' ]' { binary ($$, $3 , ID_EU, $5 ); }
692
731
| E_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_ER, $5 ); }
732
+ /* LTL */
693
733
| F_Token term { init ($$, ID_F); mto ($$, $2 ); }
694
734
| G_Token term { init ($$, ID_G); mto ($$, $2 ); }
695
735
| X_Token term { init ($$, ID_X); mto ($$, $2 ); }
696
736
| term U_Token term { binary ($$, $1 , ID_U, $3 ); }
697
737
| term R_Token term { binary ($$, $1 , ID_R, $3 ); }
698
738
| term V_Token term { binary ($$, $1 , ID_R, $3 ); }
699
- | term EQUAL_Token term { binary ($$, $1 , ID_equal, $3 ); }
700
- | term NOTEQUAL_Token term { binary ($$, $1 , ID_notequal, $3 ); }
701
- | term LT_Token term { binary ($$, $1 , ID_lt, $3 ); }
702
- | term LE_Token term { binary ($$, $1 , ID_le, $3 ); }
703
- | term GT_Token term { binary ($$, $1 , ID_gt, $3 ); }
704
- | term GE_Token term { binary ($$, $1 , ID_ge, $3 ); }
705
- | term union_Token term { binary ($$, $1 , ID_smv_union, $3 ); }
706
- | term IN_Token term { binary ($$, $1 , ID_smv_setin, $3 ); }
707
- | term NOTIN_Token term { binary ($$, $1 , ID_smv_setnotin, $3 ); }
708
739
/* LTL PAST */
709
740
| Y_Token term { $$ = $1 ; stack_expr ($$).id (ID_smv_Y); mto ($$, $2 ); }
710
741
| Z_Token term { $$ = $1 ; stack_expr ($$).id (ID_smv_Z); mto ($$, $2 ); }
0 commit comments