From 3fa80f1e1be4b3d321bf1fb2d7c44b29c6cc3cd6 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Mon, 11 May 2020 22:19:06 +0200 Subject: [PATCH] Add AUTO generation for local variables --- robotlab_safety/pluto_auto.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/robotlab_safety/pluto_auto.py b/robotlab_safety/pluto_auto.py index 8625d43..8c553d4 100755 --- a/robotlab_safety/pluto_auto.py +++ b/robotlab_safety/pluto_auto.py @@ -16,8 +16,8 @@ class PlutoVariables: self.by_name[name] = (int(pluto), int(index)) pass - def codegen(self, expr): - m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', expr) + def codegen(self, auto, current): + m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', auto) if m: lh = m.group(1) op = m.group(2) @@ -37,7 +37,17 @@ class PlutoVariables: return("%s=%s" % (lh, '*'.join(rh))) elif op == 'OR': return("%s=%s" % (lh, '+'.join(rh))) - raise Exception('Invalid expression', expr) + pass + m = re.match('([^=]+)=(.*)', auto) + if m: + regexp = '^(' + m.group(1).replace('*', '.*') + ')=' + expr = '{0}=' + m.group(2) + lh_m = re.match(regexp, current) + if lh_m: + matches = lh_m.groups() + return expr.format(*matches) + pass + raise Exception('Invalid expression', auto) class SPS: @@ -62,7 +72,7 @@ class SPS: result.append(l) m = re.match(';\s*AUTO:\s*(.*)', l) if m: - code = self.gm.codegen(m.group(1)) + code = self.gm.codegen(m.group(1), current=result[-2]) if code != result[-2]: result[-2] = code pass -- GitLab