| 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 | |