Useful RE patterns (was: Variable Interpolation - status of PEP215)

Mike C. Fletcher mcfletch at rogers.com
Wed Jul 3 13:47:45 EDT 2002


Pekka Niiranen wrote:
 > Please make also example of recursive decent parser, for example LL(k)
 >
 > -pekka-
...

Hmm, it would seem a bit out-of-scope to create an example of a 
hand-coded recursive descent parser for a parser-generator system. 
After all, the idea is to _avoid_ writing your own recursive descent 
parsers as much as possible :) ;) .

As for LL(k), I've never been able to determine what the grammar 
classification of SimpleParse grammars is.  The algorithm doesn't seem 
to match closely enough with the standard parsing algos (which all seem 
to be tokeniser based).  If you were to just lex the file with your 
generated grammar, then your post-processing functions could use 
whatever algo they wanted (even Earley (sp?)), but then you would lose 
much of the speed of the C engine, so you'd likely want something where 
you match all non-ambiguous grammar constructs with the generated 
system, and use Earley (or whatever) for the ambiguous or more 
context-sensitive stuff.  That said, I normally let the C engine do all 
the parsing, but I deal with simple, data-format-style grammars most of 
the time.

Of course, if someone with a yen for traditional parsers wanted to, they 
could write a parser-generator of their own to fit into the system in a 
few hours.  They'd basically just create a new objectgenerator.py for 
their system, a Parser-sub-class to do the transformation from ebnf to 
their new generators (such as seen in simpleparsegrammar.py) and create 
their own sub-class of the "Parser" class to use that grammar by default.

Aside: I'm wanting look at SPARK's code after the 2.0 release of 
SimpleParse and see what would be necessary to auto-generate SPARK 
parsers from EBNFs (then see about making it an optional generation 
option for SimpleParse).  Anyone who wanted to beat me to the punch 
would be welcome :) .

Anyway, to work, to work, it's off to work I go...
Enjoy,
Mike







More information about the Python-list mailing list