编译器设计: naive compiler
来源:互联网 发布:贵阳广电网络营业厅 编辑:程序博客网 时间:2024/06/04 19:20
Compiler Design
一 方法介绍
1-1 Source Language
选择C语言作为源语言,从最简单的语句开始,一步一步完善语言支持。
1-2 Implementation Language
选择python作为实现语言,主要是可以方便测试,而且处理字符很方便。
1-3 Implementation Platform
Intel X86,因为我的笔记本是这个,方便。
1-4 测试case以及测试driver
测试case由样例程序以及它们的输出组成,通过测试driver读取测试case,然后在本地平台生成可运行程序,把运行结果和case进行比较,进而确定case通过与否。
二 最简实现,一个弱智的文本打印工具
根据文章 MAC OSX 多文件编译链接 提供的source.c和main.c,参考gcc汇编source.c的结果
$ gcc -S source.c -o source.s
得到source.s,代码如下
.section __TEXT,__text,regular,pure_instructions .macosx_version_min 10, 12 .globl _c_entry .align 4, 0x90_c_entry: ## @c_entry .cfi_startproc## BB#0: pushq %rbpLtmp0: .cfi_def_cfa_offset 16Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbpLtmp2: .cfi_def_cfa_register %rbp movl $12, %eax popq %rbp retq .cfi_endproc.subsections_via_symbols
import sysentry_name = "_c_entry"header = "\t.section\t__TEXT,__text,regular,pure_instructions\n\t.macosx_version_min 10, 12\n\t.globl "+entry_name+"\n\t.align 4, 0x90"func_start = "\n\t"+entry_name+":"+"\n\t"+".cfi_startproc\n\tpushq\t%rbp\nLtmp0:\n\t.cfi_def_cfa_offset 16\nLtmp1:\n\t.cfi_offset %rbp, -16\n\tmovq\t%rsp, %rbp\nLtmp2:\n\t.cfi_def_cfa_register %rbp"func_end = "\n\t.cfi_endproc\n\n.subsections_via_symbols"def do_compile(fd): fd.write(func_start) fd.write("\n\tmovl\t$12, %eax") fd.write("\n\tpopq\t%rbp\n\tretq") fd.write(func_end)def add_header(fd): fd.write(header)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) do_compile(fout) fin.close() fout.close()
三 生成可执行程序
根据 MAC OSX 多文件编译链接 生成test程序,执行打印出12
四 总结
其实这个程序并不能称为编译器,因为他并没有对源代码进行分析,而只是死板的生成了一个固定的汇编程序,但是这和编译器工作的结果是一样的,所以暂且叫他naive compiler吧。
参考文献:
[1] An Incremental Approach to Compiler Construction. Abdulaziz Ghuloum
0 0
- 编译器设计: naive compiler
- angularjs compiler编译器
- 【开源】司马编译器 Smart Compiler
- Closure Compiler - JavaScript优化编译器
- javascript优化编译器 - Closure Compiler
- 解析SQL编译器SQL COMPILER
- Naive
- 免费的C++编译器(Free C++ Compiler)
- 【开源】司马编译器 Smart Compiler 符号表
- 【自定义Xcode编译器】Custom Compiler in Xcode
- W5300E01-ARM 交叉编译器(Cross Compiler)用户手册
- 编译器内联函数(Compiler intrinsics)
- Dubbo入门学习--动态代码编译器Compiler
- f2py的语法(备查)-使用Intel Visual Fortran Compiler编译器
- a list of compiler books — 汗牛充栋的编译器参考资料
- About the application compiler options -----flex编译器参数
- a list of compiler books — 汗牛充栋的编译器参考资料
- a list of compiler books — 汗牛充栋的编译器参考资料
- Maven学习总结(29)——Maven项目的pom.xml中log4j2配置
- php 之trim函数
- CreateThread给线程函数传递的参数
- Android ble 连接不上问题
- 设计模式之外观模式(Java)
- 编译器设计: naive compiler
- Spark Executor on YARN
- 在线音乐播放问题全解
- UI效果
- Linear Algebra - Lesson 17. 正交矩阵和Gram-Schmidt正交化
- Shell中的特殊符号和含义简明总结
- 第九章 数据查询基础
- 信息论与编码——DES数据加密标准
- hdu5307 He is Flying FFT