| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env python
- """
- Utility which creates a boilerplate pybison-compatible
- python file from a yacc file and lex file
- Run it with 2 arguments - filename.y and filename.l
- Output is filename.py
- """
- import sys, re
- from bison import bisonToPython
- argv = sys.argv
- argc = len(argv)
- progname = argv[0]
- reSpaces = re.compile("\\s+")
- def usage(s=None):
- """
- Display usage info and exit
- """
- if s:
- print progname+": "+s
-
- print "\n".join([
- "Usage: %s [-c] basefilename" % progname,
- " or: %s [-c] grammarfile.y lexfile.l pyfile.py" % progname,
- "(generates a boilerplate python file from a grammar and lex file)",
- "The first form uses 'basefilename' as base for all files, so:",
- " %s fred" % progname,
- "is equivalent to:",
- " %s fred.y fred.l fred.py" % progname,
- '',
- 'The "-c" argument causes the creation of a unique node class',
- 'for each parse target - highly recommended for complex grammars',
- ])
- sys.exit(1)
- def main():
- """
- Command-line interface for bison2py
- """
- global argc, argv
- if '-c' in argv:
- generateClasses = 1
- argv.remove('-c')
- argc = argc - 1
- else:
- generateClasses = 0
- if argc == 2:
- basename = argv[1]
- bisonfile = basename+".y"
- lexfile = basename+".l"
- pyfile = basename+".py"
- elif argc == 4:
- bisonfile, lexfile, pyfile = argv[1:4]
- else:
- usage("Bad argument count")
- bisonToPython(bisonfile, lexfile, pyfile, generateClasses)
- if __name__ == '__main__':
- main()
|