编译器设计:整型立即数支持

来源:互联网 发布:淘宝店铺第三方 编辑:程序博客网 时间:2024/06/11 23:35

上一篇文章中实现了一个文本打印工具(厚脸皮地叫compiler,^_^),这次加入立即数支持,可以return任意整型值(数据类型目前还不支持)。

这次的do_compiler函数采用了闭包机制,实现如下:

def do_compile(fout):    def write_to_file(ret_num):        fout.write(func_start)        fout.write("\n\tmovl\t$%d," %(ret_num) + "%eax")        fout.write("\n\tpopq\t%rbp\n\tretq")        fout.write(func_end)    return write_to_fileif __name__ == "__main__":    fin = open("source.c", 'r')    fout = open("out.s", 'w')    if fout is False:        print "Cannot create OUTPUT file"        exit    add_header(fout)    compiler = do_compile(fout)    ret_num = 24    compiler(ret_num)    fin.close()    fout.close()

还是很弱智,对不对,下一篇,识别return语句,就要加入词法分析了。

Makefile支持

这里实现很简单,没有用到任何隐含规则

test: main.o source.o    ld main.o source.o -macosx_version_min 10.12 -lc -o testmain.o:    gcc -c main.c -o main.osource.o:    gcc -c out.s -o source.oclean:    rm -rf *.o test

shell 支持

#!/bin/bashmake clean;make
0 0
原创粉丝点击