@@ -85,49 +85,40 @@ Function: init
85
85
86
86
// / binary TODO[docu]
87
87
static void binary (YYSTYPE & x_result, YYSTYPE & y_lhs, const irep_idt &id,
88
- YYSTYPE &z_rhs, const typet &t )
88
+ YYSTYPE &z_rhs)
89
89
{
90
90
init (x_result, id);
91
- stack_expr (x_result).type () = t;
92
91
auto &lhs = stack_expr (y_lhs);
93
92
auto &rhs = stack_expr (z_rhs);
94
93
stack_expr (x_result).add_to_operands (std::move (lhs), std::move (rhs));
95
94
}
96
95
97
- // / binary TODO[docu]
98
- static void binary_arith (YYSTYPE & x_result, YYSTYPE & y_lhs,
99
- const irep_idt &id, YYSTYPE &z_rhs)
100
- {
101
- init (x_result, id);
102
- auto &lhs = stack_expr (y_lhs);
103
- DATA_INVARIANT (lhs.type ().id () != ID_nil, " arith expr without lhs type" );
104
- stack_expr (x_result).type () = lhs.type ();
105
- auto &rhs = stack_expr (z_rhs);
106
- stack_expr (x_result).add_to_operands (std::move (lhs), std::move (rhs));
107
- }
108
-
109
- /* ******************************************************************\
96
+ /* ******************************************************************\
110
97
111
- Function: j_binary
98
+ Function: j_binary
112
99
113
- Inputs:
100
+ Inputs:
114
101
115
- Outputs:
102
+ Outputs:
116
103
117
- Purpose:
104
+ Purpose:
118
105
119
- \*******************************************************************/
106
+ \*******************************************************************/
120
107
121
- static void j_binary (YYSTYPE & dest, YYSTYPE & op1, const irep_idt &id,
122
- YYSTYPE &op2, const typet &t) {
123
- if (stack_expr (op1).id () == id) {
124
- dest = op1;
125
- mto (dest, op2);
126
- } else if (stack_expr (op2).id () == id) {
127
- dest = op2;
128
- mto (dest, op1);
129
- } else
130
- binary (dest, op1, id, op2, t);
108
+ static void j_binary (YYSTYPE & dest, YYSTYPE & op1, const irep_idt &id, YYSTYPE &op2)
109
+ {
110
+ if (stack_expr (op1).id () == id)
111
+ {
112
+ dest = op1;
113
+ mto (dest, op2);
114
+ }
115
+ else if (stack_expr (op2).id () == id)
116
+ {
117
+ dest = op2;
118
+ mto (dest, op1);
119
+ }
120
+ else
121
+ binary (dest, op1, id, op2);
131
122
}
132
123
133
124
/* ******************************************************************\
@@ -431,7 +422,7 @@ assignments: assignment
431
422
432
423
assignment : assignment_head ' (' assignment_var ' )' BECOMES_Token formula ' ;'
433
424
{
434
- binary ($$, $3 , ID_equal, $6 , bool_typet{} );
425
+ binary ($$, $3 , ID_equal, $6 );
435
426
436
427
if (stack_expr ($1 ).id ()==ID_smv_next)
437
428
{
@@ -486,7 +477,7 @@ define : assignment_var BECOMES_Token formula ';'
486
477
DATA_INVARIANT (false , " unexpected variable class" );
487
478
}
488
479
489
- binary ($$, $1 , ID_equal, $3 , bool_typet{} );
480
+ binary ($$, $1 , ID_equal, $3 );
490
481
PARSER.module ->add_define (stack_expr ($$));
491
482
}
492
483
;
@@ -500,7 +491,7 @@ term : variable_name
500
491
| ' {' formula_list ' }' { $$=$2 ; stack_expr ($$).id (" smv_nondet_choice" ); }
501
492
| INC_Token ' (' term ' )' { init ($$, " inc" ); mto ($$, $3 ); }
502
493
| DEC_Token ' (' term ' )' { init ($$, " dec" ); mto ($$, $3 ); }
503
- | ADD_Token ' (' term ' ,' term ' )' { j_binary ($$, $3 , ID_plus, $5 , stack_expr ($ 5 ). type () ); }
494
+ | ADD_Token ' (' term ' ,' term ' )' { j_binary ($$, $3 , ID_plus, $5 ); }
504
495
| SUB_Token ' (' term ' ,' term ' )' { init ($$, ID_minus); mto ($$, $3 ); mto ($$, $5 ); }
505
496
| NUMBER_Token { init ($$, ID_constant); stack_expr ($$).set (ID_value, stack_expr ($1 ).id ()); stack_expr ($$).type ()=integer_typet (); }
506
497
| TRUE_Token { init ($$, ID_constant); stack_expr ($$).set (ID_value, ID_true); stack_expr ($$).type ()=typet (ID_bool); }
@@ -511,41 +502,41 @@ term : variable_name
511
502
| SWITCH_Token ' (' variable_name ' )' ' {' switches ' }' { init ($$, ID_switch); mto ($$, $3 ); mto ($$, $6 ); }
512
503
| MINUS_Token term %prec UMINUS
513
504
{ init ($$, ID_unary_minus); mto ($$, $2 ); }
514
- | term MOD_Token term { binary_arith ($$, $1 , ID_mod, $3 ); }
515
- | term TIMES_Token term { binary_arith ($$, $1 , ID_mult, $3 ); }
516
- | term DIVIDE_Token term { binary_arith ($$, $1 , ID_div, $3 ); }
517
- | term PLUS_Token term { binary_arith ($$, $1 , ID_plus, $3 ); }
518
- | term MINUS_Token term { binary_arith ($$, $1 , ID_minus, $3 ); }
519
- | term EQUIV_Token term { binary ($$, $1 , ID_smv_iff, $3 , bool_typet{} ); }
520
- | term IMPLIES_Token term { binary ($$, $1 , ID_implies, $3 , bool_typet{} ); }
521
- | term XOR_Token term { j_binary ($$, $1 , ID_xor, $3 , bool_typet{} ); }
522
- | term OR_Token term { j_binary ($$, $1 , ID_or, $3 , bool_typet{} ); }
523
- | term AND_Token term { j_binary ($$, $1 , ID_and, $3 , bool_typet{} ); }
505
+ | term MOD_Token term { binary ($$, $1 , ID_mod, $3 ); }
506
+ | term TIMES_Token term { binary ($$, $1 , ID_mult, $3 ); }
507
+ | term DIVIDE_Token term { binary ($$, $1 , ID_div, $3 ); }
508
+ | term PLUS_Token term { binary ($$, $1 , ID_plus, $3 ); }
509
+ | term MINUS_Token term { binary ($$, $1 , ID_minus, $3 ); }
510
+ | term EQUIV_Token term { binary ($$, $1 , ID_smv_iff, $3 ); }
511
+ | term IMPLIES_Token term { binary ($$, $1 , ID_implies, $3 ); }
512
+ | term XOR_Token term { j_binary ($$, $1 , ID_xor, $3 ); }
513
+ | term OR_Token term { j_binary ($$, $1 , ID_or, $3 ); }
514
+ | term AND_Token term { j_binary ($$, $1 , ID_and, $3 ); }
524
515
| NOT_Token term { init ($$, ID_not); mto ($$, $2 ); }
525
516
| AX_Token term { init ($$, ID_AX); mto ($$, $2 ); }
526
517
| AF_Token term { init ($$, ID_AF); mto ($$, $2 ); }
527
518
| AG_Token term { init ($$, ID_AG); mto ($$, $2 ); }
528
519
| EX_Token term { init ($$, ID_EX); mto ($$, $2 ); }
529
520
| EF_Token term { init ($$, ID_EF); mto ($$, $2 ); }
530
521
| EG_Token term { init ($$, ID_EG); mto ($$, $2 ); }
531
- | A_Token ' [' term U_Token term ' ]' { binary ($$, $3 , ID_AU, $5 , bool_typet{} ); }
532
- | A_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_AR, $5 , bool_typet{} ); }
533
- | E_Token ' [' term U_Token term ' ]' { binary ($$, $3 , ID_EU, $5 , bool_typet{} ); }
534
- | E_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_ER, $5 , bool_typet{} ); }
522
+ | A_Token ' [' term U_Token term ' ]' { binary ($$, $3 , ID_AU, $5 ); }
523
+ | A_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_AR, $5 ); }
524
+ | E_Token ' [' term U_Token term ' ]' { binary ($$, $3 , ID_EU, $5 ); }
525
+ | E_Token ' [' term R_Token term ' ]' { binary ($$, $3 , ID_ER, $5 ); }
535
526
| F_Token term { init ($$, ID_F); mto ($$, $2 ); }
536
527
| G_Token term { init ($$, ID_G); mto ($$, $2 ); }
537
528
| X_Token term { init ($$, ID_X); mto ($$, $2 ); }
538
- | term U_Token term { binary ($$, $1 , ID_U, $3 , bool_typet{} ); }
539
- | term R_Token term { binary ($$, $1 , ID_R, $3 , bool_typet{} ); }
540
- | term EQUAL_Token term { binary ($$, $1 , ID_equal, $ 3 , bool_typet{} ); }
541
- | term NOTEQUAL_Token term { binary ($$, $1 , ID_notequal, $3 , bool_typet{} ); }
542
- | term LT_Token term { binary ($$, $1 , ID_lt, $ 3 , bool_typet{} ); }
543
- | term LE_Token term { binary ($$, $1 , ID_le, $3 , bool_typet{} ); }
544
- | term GT_Token term { binary ($$, $1 , ID_gt, $ 3 , bool_typet{} ); }
545
- | term GE_Token term { binary ($$, $1 , ID_ge, $3 , bool_typet{} ); }
546
- | term UNION_Token term { binary ($$, $1 , ID_smv_union, $3 , bool_typet{} ); }
547
- | term IN_Token term { binary ($$, $1 , ID_smv_setin, $3 , bool_typet{} ); }
548
- | term NOTIN_Token term { binary ($$, $1 , ID_smv_setnotin, $3 , bool_typet{} ); }
529
+ | term U_Token term { binary ($$, $1 , ID_U, $3 ); }
530
+ | term R_Token term { binary ($$, $1 , ID_R, $3 ); }
531
+ | term EQUAL_Token term { binary ($$, $1 , ID_equal, $ 3 ); }
532
+ | term NOTEQUAL_Token term { binary ($$, $1 , ID_notequal, $3 ); }
533
+ | term LT_Token term { binary ($$, $1 , ID_lt, $ 3 ); }
534
+ | term LE_Token term { binary ($$, $1 , ID_le, $3 ); }
535
+ | term GT_Token term { binary ($$, $1 , ID_gt, $ 3 ); }
536
+ | term GE_Token term { binary ($$, $1 , ID_ge, $3 ); }
537
+ | term UNION_Token term { binary ($$, $1 , ID_smv_union, $3 ); }
538
+ | term IN_Token term { binary ($$, $1 , ID_smv_setin, $3 ); }
539
+ | term NOTIN_Token term { binary ($$, $1 , ID_smv_setnotin, $3 ); }
549
540
;
550
541
551
542
formula_list: formula { init ($$); mto ($$, $1 ); }
@@ -636,7 +627,7 @@ cases :
636
627
;
637
628
638
629
case : formula ' :' formula ' ;'
639
- { binary ($$, $1 , ID_case, $3 , stack_expr ($ 3 ). type () ); }
630
+ { binary ($$, $1 , ID_case, $3 ); }
640
631
;
641
632
642
633
switches :
0 commit comments