Now two sequencial assignments, such as A=X; A=Y; are equal to one

portnov [2008-06-21 11:04:04]
Now two sequencial assignments, such as A=X; A=Y; are equal to one
assignment A = X|Y.
Filename
unibnfgen.py
diff --git a/unibnfgen.py b/unibnfgen.py
index 58fb460..ed08a0c 100755
--- a/unibnfgen.py
+++ b/unibnfgen.py
@@ -10,11 +10,25 @@ from generator import *
 def p_error(t):
   raise SyntaxError("Syntax error at <%s>!" % t)

+def variants(o):
+  if isinstance(o,Generator):
+    return o.variants
+  else:
+    return [o]
+
 def p_expr(t):
   'expr : NAME EQ generator SEMICOLON'
   global vars
-  vars[t[1]] = t[3]
-  t[0] = t[3]
+  name = t[1]
+  value = t[3]
+  if name in vars:
+    v = vars[name]
+    l = variants(v) + variants(value)
+    vars[name] = Generator(l)
+    t[0] = vars[name]
+  else:
+    vars[name] = value
+    t[0] = value

 def p_generator_one(t):
   'generator : sequence'
ViewGit