| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/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
- from bison import bisonToPython
- def usage(s=None):
- """
- Display usage info and exit
- """
- progname = sys.argv[0]
- 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
- """
- argv = sys.argv
- argc = len(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()
|