def run(s): out = cStringIO.StringIO() il.run(*il_gen.generate(Parser().parse(s, lexer=Lexer())), stdout=out) return out.getvalue()
try: mods = il.generate(typed) except il.IlGenException, e: print >> sys.stderr, e return 4 if config.mode == IL and config.visualize: for mod in mods.modules.values(): for fn in mod.functions: print fn.dotty() return 0 elif config.mode == IL: print mods return 0 il.run(mods) return 0 def indent(string, prefix): return '\n'.join(prefix + line for line in string.split("\n")) def dotty(config): try: tokens = frontend.tokenize(config.input) except frontend.SileLexError, e: print >> sys.stderr, e return 1 try: ast = frontend.parse(tokens)
params.append(result) params.reverse() for i, p in enumerate(params): blk.insts += [il.Inst(il.IPRM, len(params) - 1 - i, p, 0)] return blk def Int(self, node, result, blk): blk.insts += [il.Inst(il.IMM, node, 0, result)] return blk # ------------------------------------------------------------------------ # if __name__ == "__main__": print il.run(*generate(Parser().parse(""" print 2*3/(4-5*(12*32-15)) """, lexer=Lexer()))) print il.run(*generate(Parser().parse(""" print 1 + 2 - (3+4) """, lexer=Lexer()))) print il.run(*generate(Parser().parse(""" print 2 """, lexer=Lexer()))) print il.run( *generate( Parser().parse( """ x = (2*3/(4-5*(12*32-15))) print x y = x + 3 print y z = y + 4 print z print x + y + z""", lexer=Lexer(), ) )