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; --- 18 unchanged lines hidden (view full) --- 27 28from __future__ import print_function 29 30import os 31import sys 32 33from slicc.parser import SLICC 34 |
35usage="%prog [options] <slicc file> ... " |
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''' |
42help_details = '''This is intended to be used to process slicc files as a 43standalone script. This script assumes that it is running in a directory under 44gem5/ (e.g., gem5/temp). It takes a single argument: The path to a *.slicc 45file. By default it generates the C++ code in the directory generated/. This 46script can also generate the html SLICC output. See src/mem/slicc/main.py for 47more details.''' |
48 49def nprint(format, *args): 50 pass 51 52def eprint(format, *args): 53 if args: 54 format = format % args 55 56 print(format, file=sys.stderr) 57 58def main(args=None): 59 import optparse 60 61 parser = optparse.OptionParser(usage=usage, version=version, |
62 epilog=help_details, |
63 description=brief_copyright) 64 parser.add_option("-d", "--debug", default=False, action="store_true", 65 help="Turn on PLY debugging") 66 parser.add_option("-C", "--code-path", default="generated", 67 help="Path where C++ code output code goes") 68 parser.add_option("-H", "--html-path", 69 help="Path where html output goes") |
70 parser.add_option("-F", "--print-files", action='store_true', |
71 help="Print files that SLICC will generate") 72 parser.add_option("--tb", "--traceback", action='store_true', 73 help="print traceback on error") 74 parser.add_option("-q", "--quiet", 75 help="don't print messages") 76 opts,files = parser.parse_args(args=args) 77 78 if len(files) != 1: 79 parser.print_help() 80 sys.exit(2) 81 |
82 slicc_file = files[0] 83 if not slicc_file.endswith('.slicc'): 84 print("Must specify a .slicc file with a list of state machine files") 85 parser.print_help() 86 sys.exit(2) 87 |
88 output = nprint if opts.quiet else eprint 89 90 output("SLICC v0.4") 91 output("Parsing...") 92 |
93 protocol_base = os.path.join(os.path.dirname(__file__), '..', 'protocol') 94 slicc = SLICC(slicc_file, protocol_base, verbose=True, debug=opts.debug, 95 traceback=opts.tb) |
96 |
97 |
98 if opts.print_files: 99 for i in sorted(slicc.files()): 100 print(' %s' % i) 101 else: 102 output("Processing AST...") 103 slicc.process() 104 |
105 if opts.html_path: 106 output("Writing HTML files...") 107 slicc.writeHTMLFiles(opts.html_path) 108 |
109 output("Writing C++ files...") 110 slicc.writeCodeFiles(opts.code_path, []) 111 112 |
113 output("SLICC is Done.") 114 115if __name__ == "__main__": 116 main() |