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

上一篇文章中实现了一个文本打印工具(厚脸皮地叫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_file

if __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 test

main.o:
    gcc -c main.c -o main.o

source.o:
    gcc -c out.s -o source.o

clean:
    rm -rf *.o test

shell 支持

#!/bin/bash

make clean;make
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶玄青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值