implemented timed until as syntatic sugar
This commit is contained in:
parent
a8cf83402d
commit
b28898820e
1 changed files with 7 additions and 2 deletions
|
|
@ -18,10 +18,10 @@ from lenses import lens
|
||||||
from sympy import Symbol, Number
|
from sympy import Symbol, Number
|
||||||
|
|
||||||
from stl import ast
|
from stl import ast
|
||||||
from stl.utils import implies, xor, iff
|
from stl.utils import implies, xor, iff, env, alw
|
||||||
|
|
||||||
STL_GRAMMAR = Grammar(u'''
|
STL_GRAMMAR = Grammar(u'''
|
||||||
phi = (until / neg / g / f / lineq / AP / or / and / implies / xor / iff / paren_phi)
|
phi = (timed_until / until / neg / g / f / lineq / AP / or / and / implies / xor / iff / paren_phi)
|
||||||
|
|
||||||
paren_phi = "(" __ phi __ ")"
|
paren_phi = "(" __ phi __ ")"
|
||||||
|
|
||||||
|
|
@ -36,6 +36,7 @@ neg = ("~" / "¬") phi
|
||||||
f = F interval? phi
|
f = F interval? phi
|
||||||
g = G interval? phi
|
g = G interval? phi
|
||||||
until = paren_phi __ U __ paren_phi
|
until = paren_phi __ U __ paren_phi
|
||||||
|
timed_until = paren_phi __ U interval __ paren_phi
|
||||||
|
|
||||||
F = "F" / "◇"
|
F = "F" / "◇"
|
||||||
G = "G" / "□"
|
G = "G" / "□"
|
||||||
|
|
@ -121,6 +122,10 @@ class STLVisitor(NodeVisitor):
|
||||||
phi1, _, _, _, phi2 = children
|
phi1, _, _, _, phi2 = children
|
||||||
return ast.Until(phi1, phi2)
|
return ast.Until(phi1, phi2)
|
||||||
|
|
||||||
|
def visit_timed_until(self, _, children):
|
||||||
|
phi, _, _, (lo, hi), _, psi = children
|
||||||
|
return env(psi, lo=lo, hi=hi) & alw(ast.Until(phi, psi), lo=0, hi=hi)
|
||||||
|
|
||||||
def visit_id(self, name, _):
|
def visit_id(self, name, _):
|
||||||
return Symbol(name.text)
|
return Symbol(name.text)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue