# vim:fileencoding=gbk import argparse import sys import antlr3 import antlr3.tree from CMinusLexer import CMinusLexer from CMinusParser import CMinusParser from llvmCompiler import LLVMCompiler parser = argparse.ArgumentParser() parser.add_argument('filename', help='the name of script file') parser.add_argument('-O', '--optimize', action='store_true', help='optimize the bytecode') parser.add_argument('-v', '--verbose', action='store_true', help='output the bytecode to ll file') args = parser.parse_args() istream = antlr3.ANTLRFileStream(args.filename, 'utf-8') lexer = CMinusLexer(istream) parser = CMinusParser(antlr3.CommonTokenStream(lexer)) meta = parser.program() compiler = LLVMCompiler(meta) compiler.compile(args.optimize) if args.verbose: compiler.dump(args.filename + '.ll') compiler.run()
import sys import antlr3 import stringtemplate3 from CMinusParser import CMinusParser from CMinusLexer import CMinusLexer if len(sys.argv) == 2: templateFileName = "Java.stg" inputFileName = sys.argv[1] elif len(sys.argv) == 3: templateFileName = sys.argv[1] inputFileName = sys.argv[2] else: sys.stderr.write(repr(sys.argv) + '\n') sys.exit(1) templates = stringtemplate3.StringTemplateGroup( file=open(templateFileName, 'r'), lexer='angle-bracket' ) cStream = antlr3.ANTLRFileStream(inputFileName) lexer = CMinusLexer(cStream) tStream = antlr3.CommonTokenStream(lexer) parser = CMinusParser(tStream) parser.templateLib = templates r = parser.program() print r.st.toString()