42 lines
1.5 KiB
Text
42 lines
1.5 KiB
Text
|
yply.py
|
||
|
|
||
|
This example implements a program yply.py that converts a UNIX-yacc
|
||
|
specification file into a PLY-compatible program. To use, simply
|
||
|
run it like this:
|
||
|
|
||
|
% python yply.py [-nocode] inputfile.y >myparser.py
|
||
|
|
||
|
The output of this program is Python code. In the output,
|
||
|
any C code in the original file is included, but is commented out.
|
||
|
If you use the -nocode option, then all of the C code in the
|
||
|
original file is just discarded.
|
||
|
|
||
|
To use the resulting grammer with PLY, you'll need to edit the
|
||
|
myparser.py file. Within this file, some stub code is included that
|
||
|
can be used to test the construction of the parsing tables. However,
|
||
|
you'll need to do more editing to make a workable parser.
|
||
|
|
||
|
Disclaimer: This just an example I threw together in an afternoon.
|
||
|
It might have some bugs. However, it worked when I tried it on
|
||
|
a yacc-specified C++ parser containing 442 rules and 855 parsing
|
||
|
states.
|
||
|
|
||
|
Comments:
|
||
|
|
||
|
1. This example does not parse specification files meant for lex/flex.
|
||
|
You'll need to specify the tokenizer on your own.
|
||
|
|
||
|
2. This example shows a number of interesting PLY features including
|
||
|
|
||
|
- Parsing of literal text delimited by nested parentheses
|
||
|
- Some interaction between the parser and the lexer.
|
||
|
- Use of literals in the grammar specification
|
||
|
- One pass compilation. The program just emits the result,
|
||
|
there is no intermediate parse tree.
|
||
|
|
||
|
3. This program could probably be cleaned up and enhanced a lot.
|
||
|
It would be great if someone wanted to work on this (hint).
|
||
|
|
||
|
-Dave
|
||
|
|