From 51cbdb7d9243566ae57b19385442e61544fa6107 Mon Sep 17 00:00:00 2001 From: portnov Date: Sat, 21 Jun 2008 17:04:04 +0600 Subject: [PATCH] Now two sequencial assignments, such as A=X; A=Y; are equal to one assignment A = X|Y. --- unibnfgen.py | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) 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' -- 1.7.2.3