Now two sequencial assignments, such as A=X; A=Y; are equal to one
Now two sequencial assignments, such as A=X; A=Y; are equal to one
assignment A = X|Y.
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'