从无到有——制作简易编译器(一)
2016-08-28 08:11
106 查看
从无到有——制作简易编译器(一)
编译原理是计算机专业大三或者大四的必修课程之一,许多学员都会对学生提出硬性或者软性的制作简易编译器的要求。许多学生手足无措,别急,学长也是过来人,看完这个教程,保证你轻轻松松完成属于你自己的编译器。
首先第一篇教程不会涉及具体的实现。在这种大工程之前,正确的模块划分是极为重要的。这样可以让你阶段性地看到自己的成果,对于自信心是一个极大的帮助;此外,正确的模块划分有助于后期排除错误。
在此之前也介绍一下工作量。如果完全自己手撕一个编译器,其工作量可能和手撕一个CPU(用verilog)工作量差不多,大概会耗时一个月左右,不过如果只是交一个作业,完全不用全部自己完成。特别是语义分析这种工作,有大量现成的代码稍加修改就可以直接使用(当然,严格意义上来讲,所有部分都可以稍加修改直接使用)。
我们将编译器制作分为以下四个模块分块实现完成:
一、语法分析、词法分析模块(yacc、lex)
yacc、lex是linux环境下的语法生成器和词法生成器,使用非常广泛。一般情况下老师也比较鼓励学生去用yacc和lex去完成这样的实验。需要说明的是,在现存的linux操作系统中,yacc和lex已经发生了变异。我们所采用的是ubuntu环境下的bison和flex。
二、语义分析(C语言)
语义分析是在词法分析语法分析结束,生成了语法树的基础上,对语法树进行遍历,建表,查错。
三、中间代码生成(C语言)
这一部分就是在语义分析的基础上,生成三元式、四元式之类的。
四、目标代码生成(C语言)
这一步就实现了从某种语言(你制定的语言)到MIPS代码的转换。有人说我不要MIPS,我要x86的,没问题,从中间引入llvm即可
跟着我的教程走,学到哪里,编译器做到哪里;做到哪里,作业交到哪里。即使你只做了语法分析、词法分析,你也可以交一个语法生成树,就是这么简单、这么人性化。看到这里,如果符合你的要求,follow me;不符合的话,可以去看看其他的教程。
编译原理是计算机专业大三或者大四的必修课程之一,许多学员都会对学生提出硬性或者软性的制作简易编译器的要求。许多学生手足无措,别急,学长也是过来人,看完这个教程,保证你轻轻松松完成属于你自己的编译器。
首先第一篇教程不会涉及具体的实现。在这种大工程之前,正确的模块划分是极为重要的。这样可以让你阶段性地看到自己的成果,对于自信心是一个极大的帮助;此外,正确的模块划分有助于后期排除错误。
在此之前也介绍一下工作量。如果完全自己手撕一个编译器,其工作量可能和手撕一个CPU(用verilog)工作量差不多,大概会耗时一个月左右,不过如果只是交一个作业,完全不用全部自己完成。特别是语义分析这种工作,有大量现成的代码稍加修改就可以直接使用(当然,严格意义上来讲,所有部分都可以稍加修改直接使用)。
我们将编译器制作分为以下四个模块分块实现完成:
一、语法分析、词法分析模块(yacc、lex)
yacc、lex是linux环境下的语法生成器和词法生成器,使用非常广泛。一般情况下老师也比较鼓励学生去用yacc和lex去完成这样的实验。需要说明的是,在现存的linux操作系统中,yacc和lex已经发生了变异。我们所采用的是ubuntu环境下的bison和flex。
二、语义分析(C语言)
语义分析是在词法分析语法分析结束,生成了语法树的基础上,对语法树进行遍历,建表,查错。
三、中间代码生成(C语言)
这一部分就是在语义分析的基础上,生成三元式、四元式之类的。
四、目标代码生成(C语言)
这一步就实现了从某种语言(你制定的语言)到MIPS代码的转换。有人说我不要MIPS,我要x86的,没问题,从中间引入llvm即可
跟着我的教程走,学到哪里,编译器做到哪里;做到哪里,作业交到哪里。即使你只做了语法分析、词法分析,你也可以交一个语法生成树,就是这么简单、这么人性化。看到这里,如果符合你的要求,follow me;不符合的话,可以去看看其他的教程。
相关文章推荐
- 用Silverlight打造位运算器(1)--制作简易工具条控件
- Python制作简易注册登录系统
- 使用ultraedit和cl编译器打造简易c-c++开发环境【转】
- 基于busybox-1.10.1的简易根文件系统制作
- 从无到有制作DEB包
- Android SQLite 如何制作一个简易通讯录(附上代码)
- 利用个人U盘制作简易加密狗
- [一位菜鸟的COCOS-2D编程之路]精灵表单的制作以及简易动画的生成
- centos7简易启动脚本制作
- jQuery焦点图切换简易插件制作过程全纪录
- Android中使用CountDownTimer封装CountDownUtil,制作一个简易定时器
- 制作简易图像浏览器,互联网营销
- android studio 中制作简易的桌面组件
- 制作简易颜色表
- 制作 JS 广告的简易入门(二)利用 CSS3 技术制作广告
- iOS开发之简易时钟的制作
- C#制作简易的注册表编辑器
- OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件
- 使用ultraedit和cl编译器打造简易c/c++开发环境
- Unity3D 使用NGUI制作简易弹出窗口声音控制器