Recognize and use "*" (or "[*]") as an abbreviation for 1*.

* src/ltlparse/ltlparse.yy: Recognize "*" as "1*".
* src/ltlvisit/tostring.cc: Abbreviate "1*" as "*".
* src/tgbatest/ltl2tgba.test: Use the new syntax.
This commit is contained in:
Alexandre Duret-Lutz 2010-03-10 16:01:27 +01:00
parent 4bde130d38
commit 93c042d0fa
3 changed files with 15 additions and 1 deletions

View file

@ -283,6 +283,8 @@ rationalexp: booleanatom
{ missing_right_binop($$, $1, @2, "fusion operator"); } { missing_right_binop($$, $1, @2, "fusion operator"); }
| rationalexp OP_STAR | rationalexp OP_STAR
{ $$ = unop::instance(unop::Star, $1); } { $$ = unop::instance(unop::Star, $1); }
| OP_STAR
{ $$ = unop::instance(unop::Star, constant::true_instance()); }
bracedrationalexp: BRACE_OPEN rationalexp BRACE_CLOSE bracedrationalexp: BRACE_OPEN rationalexp BRACE_CLOSE
{ $$ = $2; } { $$ = $2; }

View file

@ -226,6 +226,12 @@ namespace spot
top_level_ = true; top_level_ = true;
break; break;
case unop::Star: case unop::Star:
// Abbreviate "1*" as "*".
if (uo->child() == constant::true_instance())
{
os_ << "*";
return;
}
// 1* is OK, no need to print {1}*. // 1* is OK, no need to print {1}*.
need_parent = false; need_parent = false;
// Do not output anything yet, star is a postfix operator. // Do not output anything yet, star is a postfix operator.
@ -469,6 +475,12 @@ namespace spot
in_ratexp_ = true; in_ratexp_ = true;
break; break;
case unop::Star: case unop::Star:
// Abbreviate "1*" as "*".
if (uo->child() == constant::true_instance())
{
os_ << "*";
return;
}
// Do not output anything yet, star is a postfix operator. // Do not output anything yet, star is a postfix operator.
need_parent = false; need_parent = false;
break; break;

View file

@ -83,7 +83,7 @@ check_psl '{((!c;b*) & d);e}'
check_psl '{(a* & (c;b*) & d);e}' check_psl '{(a* & (c;b*) & d);e}'
# Example from "Beyond Hardware Verification" by Glazberg, Moulin, Orni, # Example from "Beyond Hardware Verification" by Glazberg, Moulin, Orni,
# Ruah, Zarpas (2007). # Ruah, Zarpas (2007).
check_psl '{1[*];req;ack}|=>{start;busy[*];done}' check_psl '{[*];req;ack}|=>{start;busy[*];done}'
# Make sure 'a U (b U c)' has 3 states and 6 transitions, # Make sure 'a U (b U c)' has 3 states and 6 transitions,
# before and after degeneralization. # before and after degeneralization.