Another possibility is to allow commit points in grammars. Imagine Prolog's
cut operator, but used instead used as a way to say that once we're past
some symbol
in a phrase then if we fail to match the *production rule* then there has been
a parse error.
Right now I'm working toward making a scanner generator to make scanners
for my parser to use and I'm working on a grammar for regular expressions
and this would be helpful. Consider the following example, where '!' is a
commit point, and it is only seen as an error if then entire production rule
fails (rather than one of the phrases failing):
CharacterClass
: <open_bracket> ! <carrot> ^CharacterSet <close_bracket>
;
... this is another example, although more subtle as it would also involve
more of my tree building routines as it will capture either a 'CharacterClass'
or 'NegatedCharacterClass' as a root:
CharacterClass
: <open_bracket> ! -NegatedCharacterClass <close_bracket>
: <open_bracket> ! ^CharacterSet <close_bracket>
;
NegatedCharacterClass
: <carrot> ^CharacterSet
;
Thoughts?
_______________________________________________
PEG mailing list
[email protected]
https://lists.csail.mit.edu/mailman/listinfo/peg