def main(): import mpasparse import sys from errors import subscribe_errors lexer = mpaslex.make_lexer() parser = mpasparse.make_parser() with subscribe_errors(lambda msg: sys.stderr.write(msg+"\n")): program = parser.parse(open(sys.argv[1]).read()) check_program(program)
import sys import os.path import mpasparse import mpasgen import semantic from errors import subscribe_errors, errors_reported if __name__ == '__main__': filename = sys.argv[1] outname = os.path.splitext(filename)[0] + ".s" parser = mpasparse.make_parser() with subscribe_errors(lambda msg: sys.stdout.write(msg+"\n")): program = parser.parse(open(sys.argv[1]).read()) # Revise el programa num_errors = semantic.check_program(program) # Si no ocurren errores, genere codigo if num_errors == 0: outf = open(outname,"w") mpasgen.generate(outf,program) outf.close() else: sys.stderr.write("Program couldn't be compiled\n")
# Emite un salto condicional alrededor del if-branch inst = ('JUMP_IF_FALSE', block.else_branch if block.else_branch else block.next_block) print(" %s" % (inst,)) self.visit(block.if_branch) if block.else_branch: # Emite un salto alrededor del if-branch (si hay alguno) inst = ('JUMP', block.next_block) print(" %s" % (inst,)) self.visit(block.else_branch) if __name__ == '__main__': import mpasparse import mpaslex from mpasparse import make_parser lexer = mpaslex.make_lexer() parser = make_parser() top = parser.parse("""\ start if a < 0: a + b else: a - b done """) gen = CodeGenerator() gen.visit(top) # PrintBlocks().visit(gen.start_block) EmitBlocks().visit(gen.start_block)