Example #1
0
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)
Example #2
0
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")
Example #3
0
		# 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)