Add Save() and SavedLiteral() matchers. Add badpenny grammar.

This commit is contained in:
Ian Gulliver
2014-08-03 10:46:34 -07:00
parent e5daba4d86
commit fe48937cfa
4 changed files with 190 additions and 3 deletions

View File

@@ -0,0 +1,47 @@
badpenny = rr.Parser({
'container': rr.Node('container',
rr.Save('tagname',
rr.Sequence(
rr.Literal('{{('),
rr.SingleLineText(),
rr.Literal('}}')),
rr.Sequence(
rr.Literal('{{('),
rr.SavedLiteral('tagname'),
rr.Literal('}}'),
rr.MultiLineText(),
rr.Literal('{{)'),
rr.SavedLiteral('tagname'),
rr.Literal('}}')))),
'repeated': rr.Node('repeated',
rr.Save('tagname',
rr.Sequence(
rr.Literal('{{['),
rr.SingleLineText(),
rr.Literal('}}')),
rr.Sequence(
rr.Literal('{{['),
rr.SavedLiteral('tagname'),
rr.Literal('}}'),
rr.MultiLineText(),
rr.Literal('{{]'),
rr.SavedLiteral('tagname'),
rr.Literal('}}')))),
'value': rr.Node('value', rr.Sequence(
rr.Literal('{{'),
rr.SingleLineText(),
rr.Literal('}}'))),
'chunk': rr.Or(
rr.Ref('container'),
rr.Ref('repeated'),
rr.Ref('value'),
rr.MultiLineText()),
'main': rr.Node('badpenny', rr.Sequence(
rr.ZeroOrMore(rr.Ref('chunk')),
rr.EndOfText()))
}, [
]);