@@ -75,6 +75,19 @@ class expr2smvt
7575 const std::string &symbol,
7676 precedencet precedence);
7777
78+ bool convert_rtctl (
79+ const ternary_exprt &src,
80+ std::string &dest,
81+ const std::string &symbol,
82+ precedencet precedence);
83+
84+ bool convert_rtctl (
85+ const multi_ary_exprt &src,
86+ std::string &dest,
87+ const std::string &symbol1,
88+ const std::string &symbol2,
89+ precedencet precedence);
90+
7891 bool convert_unary (
7992 const unary_exprt &,
8093 std::string &dest,
@@ -240,6 +253,61 @@ bool expr2smvt::convert_binary(
240253
241254/* ******************************************************************\
242255
256+ Function: expr2smvt::convert_rtctl
257+
258+ Inputs:
259+
260+ Outputs:
261+
262+ Purpose:
263+
264+ \*******************************************************************/
265+
266+ bool expr2smvt::convert_rtctl (
267+ const ternary_exprt &src,
268+ std::string &dest,
269+ const std::string &symbol,
270+ precedencet precedence)
271+ {
272+ std::string op0, op1, op2;
273+ convert (src.op0 (), op0);
274+ convert (src.op1 (), op1);
275+ convert (src.op2 (), op2);
276+ dest = symbol + ' ' + op0 + " .." + op1 + ' ' + op2;
277+ return false ;
278+ }
279+
280+ /* ******************************************************************\
281+
282+ Function: expr2smvt::convert_rtctl
283+
284+ Inputs:
285+
286+ Outputs:
287+
288+ Purpose:
289+
290+ \*******************************************************************/
291+
292+ bool expr2smvt::convert_rtctl (
293+ const multi_ary_exprt &src,
294+ std::string &dest,
295+ const std::string &symbol1,
296+ const std::string &symbol2,
297+ precedencet precedence)
298+ {
299+ std::string op0, op1, op2, op3;
300+ convert (src.op0 (), op0);
301+ convert (src.op1 (), op1);
302+ convert (src.op2 (), op2);
303+ convert (src.op3 (), op3);
304+ dest = symbol1 + ' [' + op0 + ' ' + symbol2 + ' ' + op1 + " .." + op2 + ' ' +
305+ op3 + ' ]' ;
306+ return false ;
307+ }
308+
309+ /* ******************************************************************\
310+
243311Function: expr2smvt::convert_unary
244312
245313 Inputs:
@@ -601,6 +669,27 @@ bool expr2smvt::convert(
601669 precedence = precedencet::TEMPORAL);
602670 }
603671
672+ else if (
673+ src.id () == ID_smv_EBF || src.id () == ID_smv_ABF ||
674+ src.id () == ID_smv_EBG || src.id () == ID_smv_ABG)
675+ {
676+ return convert_rtctl (
677+ to_ternary_expr (src),
678+ dest,
679+ std::string (src.id_string (), 4 , std::string::npos),
680+ precedence = precedencet::TEMPORAL);
681+ }
682+
683+ else if (src.id () == ID_smv_EBU || src.id () == ID_smv_ABU)
684+ {
685+ return convert_rtctl (
686+ to_multi_ary_expr (src),
687+ dest,
688+ std::string (src.id_string (), 4 , 1 ),
689+ std::string (src.id_string (), 5 , std::string::npos),
690+ precedence = precedencet::TEMPORAL);
691+ }
692+
604693 else if (src.id () == ID_R)
605694 {
606695 // LTL release is "V" in NuSMV
0 commit comments