Add back the '*' syntax for And.
This somehow revert changes from 2010-01-30 which killed this use of star to make room for the Kleen star. Here we only allow '*' in the temporal formula, so that it can still be the Kleen star in SERE. The motivation for '*' available as And is better compatibility with Wring and VIS. * src/ltlparse/ltlscan.ll: Distinguish * from [*]. * src/ltlparse/ltlparse.yy: Allows * to be used as AND between temporal formulae. * src/ltltest/equals.test, src/ltltest/parse.test: Add a few tests. * doc/tl/tl.tex: Document it.
This commit is contained in:
parent
60ec3acea0
commit
5939d6f493
5 changed files with 33 additions and 9 deletions
|
|
@ -104,7 +104,8 @@ using namespace spot::ltl;
|
|||
%token OP_U "until operator" OP_R "release operator"
|
||||
%token OP_W "weak until operator" OP_M "strong release operator"
|
||||
%token OP_F "sometimes operator" OP_G "always operator"
|
||||
%token OP_X "next operator" OP_NOT "not operator" OP_STAR "star operator"
|
||||
%token OP_X "next operator" OP_NOT "not operator"
|
||||
%token OP_STAR "star operator" OP_BSTAR "bracket star operator"
|
||||
%token OP_PLUS "plus operator"
|
||||
%token OP_STAR_OPEN "opening bracket for star operator"
|
||||
%token OP_EQUAL_OPEN "opening bracket for equal operator"
|
||||
|
|
@ -137,13 +138,19 @@ using namespace spot::ltl;
|
|||
%left OP_XOR
|
||||
%left OP_AND OP_SHORT_AND
|
||||
|
||||
/* OP_STAR can be used as an AND when occurring in some LTL formula in
|
||||
Wring's syntax (so it has to be close to OP_AND), and as a Kleen
|
||||
Star in SERE (so it has to be close to OP_BSTAR -- luckily
|
||||
U/R/M/W/F/G/X are not used in SERE). */
|
||||
%left OP_STAR
|
||||
|
||||
/* LTL operators. */
|
||||
%right OP_U OP_R OP_M OP_W
|
||||
%nonassoc OP_F OP_G
|
||||
%nonassoc OP_X
|
||||
|
||||
/* High priority regex operator. */
|
||||
%nonassoc OP_STAR OP_STAR_OPEN OP_PLUS OP_EQUAL_OPEN OP_GOTO_OPEN
|
||||
%nonassoc OP_BSTAR OP_STAR_OPEN OP_PLUS OP_EQUAL_OPEN OP_GOTO_OPEN
|
||||
|
||||
/* Not has the most important priority after Wring's `=0' and `=1'. */
|
||||
%nonassoc OP_NOT
|
||||
|
|
@ -248,7 +255,9 @@ gotoargs: OP_GOTO_OPEN OP_SQBKT_NUM OP_SQBKT_SEP OP_SQBKT_NUM OP_SQBKT_CLOSE
|
|||
"missing closing bracket for goto operator"));
|
||||
$$.min = $$.max = 0U; }
|
||||
|
||||
starargs: OP_STAR
|
||||
kleen_star: OP_STAR | OP_BSTAR
|
||||
|
||||
starargs: kleen_star
|
||||
{ $$.min = 0U; $$.max = bunop::unbounded; }
|
||||
| OP_PLUS
|
||||
{ $$.min = 1U; $$.max = bunop::unbounded; }
|
||||
|
|
@ -606,6 +615,10 @@ subformula: booleanatom
|
|||
{ $$ = multop::instance(multop::And, $1, $3); }
|
||||
| subformula OP_SHORT_AND error
|
||||
{ missing_right_binop($$, $1, @2, "and operator"); }
|
||||
| subformula OP_STAR subformula
|
||||
{ $$ = multop::instance(multop::And, $1, $3); }
|
||||
| subformula OP_STAR error
|
||||
{ missing_right_binop($$, $1, @2, "and operator"); }
|
||||
| subformula OP_OR subformula
|
||||
{ $$ = multop::instance(multop::Or, $1, $3); }
|
||||
| subformula OP_OR error
|
||||
|
|
|
|||
|
|
@ -106,7 +106,8 @@ BOXDARROW {BOX}{DARROWL}|"|"{DARROWL}|"⤇"
|
|||
{DIAMOND}{DARROWL} BEGIN(0); return token::OP_ECONCAT_NONO;
|
||||
";" BEGIN(0); return token::OP_CONCAT;
|
||||
":" BEGIN(0); return token::OP_FUSION;
|
||||
"*"|"[*]" BEGIN(0); return token::OP_STAR;
|
||||
"*" BEGIN(0); return token::OP_STAR;
|
||||
"[*]" BEGIN(0); return token::OP_BSTAR;
|
||||
"[+]" BEGIN(0); return token::OP_PLUS;
|
||||
"[*" BEGIN(sqbracket); return token::OP_STAR_OPEN;
|
||||
"[=" BEGIN(sqbracket); return token::OP_EQUAL_OPEN;
|
||||
|
|
@ -141,7 +142,8 @@ BOXDARROW {BOX}{DARROWL}|"|"{DARROWL}|"⤇"
|
|||
|
||||
/* & and | come from Spin. && and || from LTL2BA.
|
||||
/\, \/, and xor are from LBTT.
|
||||
--> and <--> come from Goal. */
|
||||
--> and <--> come from Goal.
|
||||
+,*,^ are from Wring. */
|
||||
"||"|"|"|"+"|"\\/"|"∨"|"∪" BEGIN(0); return token::OP_OR;
|
||||
"&&"|"/\\"|"∧"|"∩" BEGIN(0); return token::OP_AND;
|
||||
"&" BEGIN(0); return token::OP_SHORT_AND;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue