编译技术实验总结感想
《编译技术》实验总结感想 1. 实验总结 这个学期的编译实验一共分为文法解读、词法分析、语法分析、语义分析、代码生成、代码优化几个部分。总体来说,难度依次递增。 我选择的编程语言是Java,这也是我最喜欢的一种语言。在实验开始前,我还在庆幸不用像上学期的OS一样整天跟C语言打交道,又能愉快地编写最喜欢的Java了。 在最初的词法分析和语法分析中,我还体验着迭代开发Java、欣赏自己的设计模式的乐趣中。虽然语法分析的工作量相比于词法分析陡增,但是我个人觉得我的类设计还是比较清晰的,因此写完之后也算是非常有成就感了。 之后的语义分析其实就是建立符号表并处理语义错误,因此比较简单。但完成这里的时候,我深感对于类设计等的欠缺,几乎把面向对象的语言写成了面向过程的语言。而后面的中端代码生成是在语义分析的基础上做的,因此我总体的设计在此后也变得不忍直视。 代码生成我选择的是LLVM IR+MIPS。此时能给予我帮助的只有指导书了,然而我觉得指导书并不全面,只提供了最基本的介绍,具体实现大部分都是我自己摸索出来的。比如在LLVM IR生成中,指导书并没有说符号表到底存什么东西,我最后想的是存地...
编译技术开发文档
《编译技术》实验开发文档 Author:bush 1 参考编译器介绍 主要参考了教材上PL/0以及tolang 1.1 总体结构 PL/0是一个编译-解释执行程序,总体结构分为两个部分: 先把PL/0编译成目标程序(P-code指令) 再对目标程序进行解释执行,得到运行结果 1.2 接口设计 PL/0编译程序采用一遍扫描,以语法分析为核心,由它调用词法分析程序取单词,在语法分析过程中同时进行语义分析处理,并生成目标指令。 如遇有语法、语义错误,则随时调用出错处理程序,打印出错信息。 1.3 文件组织 前端和后端分包等。 2 编译器总体设计 2.1 总体结构 总体结构与PL/0不同,是编译程序。 先编译成LLVM IR 由LLVM IR生成MIPS汇编代码 直接运行MIPS汇编代码 编译器总体采用多遍扫描,即先通过一次完整的词法分析得到token序列,再进行语法分析得到语法树。 2.2 接口设计 2.2.1 词法分析器Lexer Lexer.java主要提供一个接口getToken() 调用形式:token = lexer.getToken() 作用:根据设置的读取...