main.py revision 12563:8d59ed22ae79
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 2# Copyright (c) 2009 The Hewlett-Packard Development Company 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are 7# met: redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer; 9# redistributions in binary form must reproduce the above copyright 10# notice, this list of conditions and the following disclaimer in the 11# documentation and/or other materials provided with the distribution; 12# neither the name of the copyright holders nor the names of its 13# contributors may be used to endorse or promote products derived from 14# this software without specific prior written permission. 15# 16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28from __future__ import print_function 29 30import os 31import sys 32 33from slicc.parser import SLICC 34 35usage="%prog [options] <files> ... " 36version="%prog v0.4" 37brief_copyright=''' 38Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 39Copyright (c) 2009 The Hewlett-Packard Development Company 40All Rights Reserved. 41''' 42 43def nprint(format, *args): 44 pass 45 46def eprint(format, *args): 47 if args: 48 format = format % args 49 50 print(format, file=sys.stderr) 51 52def main(args=None): 53 import optparse 54 55 parser = optparse.OptionParser(usage=usage, version=version, 56 description=brief_copyright) 57 parser.add_option("-d", "--debug", default=False, action="store_true", 58 help="Turn on PLY debugging") 59 parser.add_option("-C", "--code-path", default="generated", 60 help="Path where C++ code output code goes") 61 parser.add_option("-H", "--html-path", 62 help="Path where html output goes") 63 parser.add_option("-F", "--print-files", 64 help="Print files that SLICC will generate") 65 parser.add_option("--tb", "--traceback", action='store_true', 66 help="print traceback on error") 67 parser.add_option("-q", "--quiet", 68 help="don't print messages") 69 opts,files = parser.parse_args(args=args) 70 71 if len(files) != 1: 72 parser.print_help() 73 sys.exit(2) 74 75 output = nprint if opts.quiet else eprint 76 77 output("SLICC v0.4") 78 output("Parsing...") 79 80 slicc = SLICC(files[0], verbose=True, debug=opts.debug, traceback=opts.tb) 81 82 if opts.print_files: 83 for i in sorted(slicc.files()): 84 print(' %s' % i) 85 else: 86 output("Processing AST...") 87 slicc.process() 88 89 output("Writing C++ files...") 90 slicc.writeCodeFiles(opts.code_path) 91 92 if opts.html_path: 93 output("Writing HTML files...") 94 slicc.writeHTMLFiles(opts.html_path) 95 96 output("SLICC is Done.") 97 98if __name__ == "__main__": 99 main() 100