Skip to content

Commit 8a54d3a

Browse files
committed
SMV: removing typing from parser
This removes an ill-fated attempt to do typing while parsing SMV.
1 parent f8aa6bd commit 8a54d3a

File tree

3 files changed

+54
-61
lines changed

3 files changed

+54
-61
lines changed

regression/smv/define/define1.desc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
KNOWNBUG
1+
CORE broken-smt-backend
22
define1.smv
33

44
^EXIT=0$
55
^SIGNAL=0$
66
--
77
--
8-
This yields a type error.

regression/smv/define/define1.smv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@ MODULE main
33
DEFINE a := 1;
44

55
VAR b : 1..4;
6+
ASSIGN init(b) := 2;
67
ASSIGN next(b) := a + 1;
8+
9+
LTLSPEC G b=2

src/smvlang/parser.y

Lines changed: 50 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -83,49 +83,40 @@ Function: init
8383

8484
/// binary TODO[docu]
8585
static void binary(YYSTYPE & x_result, YYSTYPE & y_lhs, const irep_idt &id,
86-
YYSTYPE &z_rhs, const typet &t)
86+
YYSTYPE &z_rhs)
8787
{
8888
init(x_result, id);
89-
stack_expr(x_result).type() = t;
9089
auto &lhs = stack_expr(y_lhs);
9190
auto &rhs = stack_expr(z_rhs);
9291
stack_expr(x_result).add_to_operands(std::move(lhs), std::move(rhs));
9392
}
9493

95-
/// binary TODO[docu]
96-
static void binary_arith(YYSTYPE & x_result, YYSTYPE & y_lhs,
97-
const irep_idt &id, YYSTYPE &z_rhs)
98-
{
99-
init(x_result, id);
100-
auto &lhs = stack_expr(y_lhs);
101-
DATA_INVARIANT(lhs.type().id() != ID_nil, "arith expr without lhs type");
102-
stack_expr(x_result).type() = lhs.type();
103-
auto &rhs = stack_expr(z_rhs);
104-
stack_expr(x_result).add_to_operands(std::move(lhs), std::move(rhs));
105-
}
106-
107-
/*******************************************************************\
94+
/*******************************************************************\
10895
109-
Function: j_binary
96+
Function: j_binary
11097
111-
Inputs:
98+
Inputs:
11299
113-
Outputs:
100+
Outputs:
114101
115-
Purpose:
102+
Purpose:
116103
117-
\*******************************************************************/
104+
\*******************************************************************/
118105

119-
static void j_binary(YYSTYPE & dest, YYSTYPE & op1, const irep_idt &id,
120-
YYSTYPE &op2, const typet &t) {
121-
if (stack_expr(op1).id() == id) {
122-
dest = op1;
123-
mto(dest, op2);
124-
} else if (stack_expr(op2).id() == id) {
125-
dest = op2;
126-
mto(dest, op1);
127-
} else
128-
binary(dest, op1, id, op2, t);
106+
static void j_binary(YYSTYPE & dest, YYSTYPE & op1, const irep_idt &id, YYSTYPE &op2)
107+
{
108+
if(stack_expr(op1).id() == id)
109+
{
110+
dest = op1;
111+
mto(dest, op2);
112+
}
113+
else if(stack_expr(op2).id() == id)
114+
{
115+
dest = op2;
116+
mto(dest, op1);
117+
}
118+
else
119+
binary(dest, op1, id, op2);
129120
}
130121

131122
/*******************************************************************\
@@ -375,7 +366,7 @@ assignments: assignment
375366

376367
assignment : assignment_head '(' assignment_var ')' BECOMES_Token formula ';'
377368
{
378-
binary($$, $3, ID_equal, $6, bool_typet{});
369+
binary($$, $3, ID_equal, $6);
379370

380371
if(stack_expr($1).id()==ID_smv_next)
381372
{
@@ -430,7 +421,7 @@ define : assignment_var BECOMES_Token formula ';'
430421
DATA_INVARIANT(false, "unexpected variable class");
431422
}
432423

433-
binary($$, $1, ID_equal, $3, bool_typet{});
424+
binary($$, $1, ID_equal, $3);
434425
PARSER.module->add_define(stack_expr($$));
435426
}
436427
;
@@ -444,7 +435,7 @@ term : variable_name
444435
| '{' formula_list '}' { $$=$2; stack_expr($$).id("smv_nondet_choice"); }
445436
| INC_Token '(' term ')' { init($$, "inc"); mto($$, $3); }
446437
| DEC_Token '(' term ')' { init($$, "dec"); mto($$, $3); }
447-
| ADD_Token '(' term ',' term ')' { j_binary($$, $3, ID_plus, $5, stack_expr($5).type()); }
438+
| ADD_Token '(' term ',' term ')' { j_binary($$, $3, ID_plus, $5); }
448439
| SUB_Token '(' term ',' term ')' { init($$, ID_minus); mto($$, $3); mto($$, $5); }
449440
| NUMBER_Token { init($$, ID_constant); stack_expr($$).set(ID_value, stack_expr($1).id()); stack_expr($$).type()=integer_typet(); }
450441
| TRUE_Token { init($$, ID_constant); stack_expr($$).set(ID_value, ID_true); stack_expr($$).type()=typet(ID_bool); }
@@ -455,41 +446,41 @@ term : variable_name
455446
| SWITCH_Token '(' variable_name ')' '{' switches '}' { init($$, ID_switch); mto($$, $3); mto($$, $6); }
456447
| MINUS_Token term %prec UMINUS
457448
{ init($$, ID_unary_minus); mto($$, $2); }
458-
| term MOD_Token term { binary_arith($$, $1, ID_mod, $3); }
459-
| term TIMES_Token term { binary_arith($$, $1, ID_mult, $3); }
460-
| term DIVIDE_Token term { binary_arith($$, $1, ID_div, $3); }
461-
| term PLUS_Token term { binary_arith($$, $1, ID_plus, $3); }
462-
| term MINUS_Token term { binary_arith($$, $1, ID_minus, $3); }
463-
| term EQUIV_Token term { binary($$, $1, ID_smv_iff, $3, bool_typet{}); }
464-
| term IMPLIES_Token term { binary($$, $1, ID_implies, $3, bool_typet{}); }
465-
| term XOR_Token term { j_binary($$, $1, ID_xor, $3, bool_typet{}); }
466-
| term OR_Token term { j_binary($$, $1, ID_or, $3, bool_typet{}); }
467-
| term AND_Token term { j_binary($$, $1, ID_and, $3, bool_typet{}); }
449+
| term MOD_Token term { binary($$, $1, ID_mod, $3); }
450+
| term TIMES_Token term { binary($$, $1, ID_mult, $3); }
451+
| term DIVIDE_Token term { binary($$, $1, ID_div, $3); }
452+
| term PLUS_Token term { binary($$, $1, ID_plus, $3); }
453+
| term MINUS_Token term { binary($$, $1, ID_minus, $3); }
454+
| term EQUIV_Token term { binary($$, $1, ID_smv_iff, $3); }
455+
| term IMPLIES_Token term { binary($$, $1, ID_implies, $3); }
456+
| term XOR_Token term { j_binary($$, $1, ID_xor, $3); }
457+
| term OR_Token term { j_binary($$, $1, ID_or, $3); }
458+
| term AND_Token term { j_binary($$, $1, ID_and, $3); }
468459
| NOT_Token term { init($$, ID_not); mto($$, $2); }
469460
| AX_Token term { init($$, ID_AX); mto($$, $2); }
470461
| AF_Token term { init($$, ID_AF); mto($$, $2); }
471462
| AG_Token term { init($$, ID_AG); mto($$, $2); }
472463
| EX_Token term { init($$, ID_EX); mto($$, $2); }
473464
| EF_Token term { init($$, ID_EF); mto($$, $2); }
474465
| EG_Token term { init($$, ID_EG); mto($$, $2); }
475-
| A_Token '[' term U_Token term ']' { binary($$, $3, ID_AU, $5, bool_typet{}); }
476-
| A_Token '[' term R_Token term ']' { binary($$, $3, ID_AR, $5, bool_typet{}); }
477-
| E_Token '[' term U_Token term ']' { binary($$, $3, ID_EU, $5, bool_typet{}); }
478-
| E_Token '[' term R_Token term ']' { binary($$, $3, ID_ER, $5, bool_typet{}); }
466+
| A_Token '[' term U_Token term ']' { binary($$, $3, ID_AU, $5); }
467+
| A_Token '[' term R_Token term ']' { binary($$, $3, ID_AR, $5); }
468+
| E_Token '[' term U_Token term ']' { binary($$, $3, ID_EU, $5); }
469+
| E_Token '[' term R_Token term ']' { binary($$, $3, ID_ER, $5); }
479470
| F_Token term { init($$, ID_F); mto($$, $2); }
480471
| G_Token term { init($$, ID_G); mto($$, $2); }
481472
| X_Token term { init($$, ID_X); mto($$, $2); }
482-
| term U_Token term { binary($$, $1, ID_U, $3, bool_typet{}); }
483-
| term R_Token term { binary($$, $1, ID_R, $3, bool_typet{}); }
484-
| term EQUAL_Token term { binary($$, $1, ID_equal, $3, bool_typet{}); }
485-
| term NOTEQUAL_Token term { binary($$, $1, ID_notequal, $3, bool_typet{}); }
486-
| term LT_Token term { binary($$, $1, ID_lt, $3, bool_typet{}); }
487-
| term LE_Token term { binary($$, $1, ID_le, $3, bool_typet{}); }
488-
| term GT_Token term { binary($$, $1, ID_gt, $3, bool_typet{}); }
489-
| term GE_Token term { binary($$, $1, ID_ge, $3, bool_typet{}); }
490-
| term UNION_Token term { binary($$, $1, ID_smv_union, $3, bool_typet{}); }
491-
| term IN_Token term { binary($$, $1, ID_smv_setin, $3, bool_typet{}); }
492-
| term NOTIN_Token term { binary($$, $1, ID_smv_setnotin, $3, bool_typet{}); }
473+
| term U_Token term { binary($$, $1, ID_U, $3); }
474+
| term R_Token term { binary($$, $1, ID_R, $3); }
475+
| term EQUAL_Token term { binary($$, $1, ID_equal, $3); }
476+
| term NOTEQUAL_Token term { binary($$, $1, ID_notequal, $3); }
477+
| term LT_Token term { binary($$, $1, ID_lt, $3); }
478+
| term LE_Token term { binary($$, $1, ID_le, $3); }
479+
| term GT_Token term { binary($$, $1, ID_gt, $3); }
480+
| term GE_Token term { binary($$, $1, ID_ge, $3); }
481+
| term UNION_Token term { binary($$, $1, ID_smv_union, $3); }
482+
| term IN_Token term { binary($$, $1, ID_smv_setin, $3); }
483+
| term NOTIN_Token term { binary($$, $1, ID_smv_setnotin, $3); }
493484
;
494485

495486
formula_list: formula { init($$); mto($$, $1); }
@@ -580,7 +571,7 @@ cases :
580571
;
581572

582573
case : formula ':' formula ';'
583-
{ binary($$, $1, ID_case, $3, stack_expr($3).type()); }
574+
{ binary($$, $1, ID_case, $3); }
584575
;
585576

586577
switches :

0 commit comments

Comments
 (0)