summaryrefslogtreecommitdiff
path: root/src/rewriter/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/rewriter/parser.py')
-rw-r--r--src/rewriter/parser.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/rewriter/parser.py b/src/rewriter/parser.py
index e69350111..e6c76a285 100644
--- a/src/rewriter/parser.py
+++ b/src/rewriter/parser.py
@@ -104,6 +104,7 @@ class SymbolTable:
self.consts = {
're.none': App(Op.REGEXP_EMPTY, []),
're.allchar': App(Op.REGEXP_SIGMA, []),
+ '_': Placeholder(),
}
self.symbols = {}
@@ -250,25 +251,25 @@ class Parser:
lambda s, l, t: self.var_decl_action(t[0], t[1], t[2:])))
return (pp.Suppress('(') + pp.ZeroOrMore(decl) + pp.Suppress(')'))
- def rule_action(self, name, cond, lhs, rhs, is_fixed_point):
+ def rule_action(self, name, cond, lhs, rhs, is_fixed_point, rhs_context):
bvars = self.symbols.symbols.values()
self.symbols.pop()
- return Rule(name, bvars, cond, lhs, rhs, is_fixed_point)
+ return Rule(name, bvars, cond, lhs, rhs, is_fixed_point, rhs_context)
def parse_rules(self, s):
rule = (
pp.Suppress('(') +
(pp.Keyword('define-rule*') | pp.Keyword('define-rule')) +
- self.symbol() + self.var_list() + self.expr() + self.expr() +
+ self.symbol() + self.var_list() + self.expr() + self.expr() + pp.Optional(self.expr()) +
pp.Suppress(')')).setParseAction(lambda s, l, t: self.rule_action(
- t[1], CBool(True), t[2], t[3], t[0] == 'define-rule*'))
+ t[1], CBool(True), t[2], t[3], t[0] == 'define-rule*', t[4] if len(t) == 5 else None))
cond_rule = (
pp.Suppress('(') +
(pp.Keyword('define-cond-rule*') | pp.Keyword('define-cond-rule'))
+ self.symbol() + self.var_list() + self.expr() + self.expr() +
- self.expr() +
+ self.expr() + pp.Optional(self.expr()) +
pp.Suppress(')')).setParseAction(lambda s, l, t: self.rule_action(
- t[1], t[2], t[3], t[4], t[0] == 'define-cond-rule*'))
+ t[1], t[2], t[3], t[4], t[0] == 'define-cond-rule*', t[5] if len(t) == 6 else None))
rules = pp.OneOrMore(rule | cond_rule) + pp.StringEnd()
rules.ignore(';' + pp.restOfLine)
return rules.parseString(s)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback