From 652fdde4d4c3e55fe546def354d710291b481212 Mon Sep 17 00:00:00 2001 From: Marcell Vazquez-Chanlatte Date: Sat, 7 Jan 2017 09:21:59 -0800 Subject: [PATCH] implement negation --- stl/parser.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/stl/parser.py b/stl/parser.py index 04c87e2..37370ba 100644 --- a/stl/parser.py +++ b/stl/parser.py @@ -21,12 +21,14 @@ from sympy import Symbol, Number from stl import ast STL_GRAMMAR = Grammar(u''' -phi = (g / f / until / lineq / AP / or / and / paren_phi) +phi = (g / f / until / lineq / AP / or / and / neg / paren_phi) paren_phi = "(" __ phi __ ")" -or = paren_phi _ ("∨" / "or") _ (or / paren_phi) -and = paren_phi _ ("∧" / "and") _ (and / paren_phi) +or = paren_phi _ ("∨" / "or" / "|") _ (or / paren_phi) +and = paren_phi _ ("∧" / "and" / "&") _ (and / paren_phi) + +neg = ("~" / "¬") paren_phi f = F interval phi g = G interval phi @@ -157,6 +159,9 @@ class STLVisitor(NodeVisitor): def visit_AP(self, node, _): return ast.AtomicPred(node.text) + def visit_neg(self, _, children): + return ast.Neg(children[1]) + def parse(stl_str:str, rule:str="phi") -> "STL": return STLVisitor().visit(STL_GRAMMAR[rule].parse(stl_str))