编译原理学习基本步骤
来源:互联网 发布:人工智能会使人变懒吗 编辑:程序博客网 时间:2024/04/30 06:45
编译原理
1 引言
将一种语言翻译为另一种语言。
语言:基本字符、词法规则、语法规则、语义。
编译器运行基本步骤:
词法分析
语法分析
语义分析
中间代码生成
优化代码
代码生成
结合符号表处理和错误处理进行处理。
2 词法分析
处理字符。
正则表达式
正则表达式是没有变量的
正规文法
正则表达式和正规文法等价证明
自动机(确定和不确定自动机)
自动机只能描述单词。
开始-》结束状态
图灵机
确定自动机:状态加输入确定下一个状态。
五元表:
不确定自动机:状态加输入出现多个下一个状态选择。
五元表:
初始状态集合
正规式转换为不确定自动机,不确定自动机转换为计算机可处理的确定自动机,然后确定的自动机进行最小化。
这个的讲解感觉廖力讲的不错,讲正则和自动机之间的相互转换讲的比较透彻。足够词法分析使用。康辉的讲解和实践更近一点,但是和实际还是差很远。
程序的实现是DFA的算法实现。自动机是离散数学上的概念,不过学了这个也可以了解离散的自动机应用。
3 语法分析(文法分析)
用来定义程序的格式
BNF范式
最左推导,最右规约
最右推导,最左规约
上下文无关文法
下推自动机
自顶向下:推出为所有终结符
推导
消除左递归
预测分析 first/follow
递归下降分析过程
自底向上:从总结符出发归纳出文法开始
归约
简单优先分析法
算法优先分析法
LR分析法:
4 语义分析
类型识别等
语义子程序
5 中间代码生成
Id1 = id2 + id3
Id4 = 30
语法制导翻译
常用:三元式、四元式、语法树
6 代码优化
提高执行效率:实质是代码等价变换。
比如我们经常使用的Java String 连接 String a = “a ” + “b”;优化为String a = “ab”;
7 目标代码生成
Load reg1, 30
Add reg1,reg2
8 参考资料:
1. Compiles Principles, Techniques and Tools
2. Principles of Compiles Design
3. 东南大学视频(廖力)
4. 编译原理及实践
5. 编译原理学习导论
6. 现代编译程序设计
7. 吉林大学视频(康辉)
需要C语言源代码的:
http://blog.csdn.net/longronglin/archive/2006/08/23/1109436.aspx
需要Java语言源代码的查看Compiles Principles, Techniques and Tools,该书由Java的代码实现。
- 编译原理学习基本步骤
- 编译的基本步骤
- linux内核编译基本步骤
- 编译链接的基本步骤
- Ubutnu 编译内核基本步骤
- linux学习基本步骤
- Linux学习基本步骤
- SQlite3原理学习步骤
- 传智播客struts学习,struts的基本工作原理及开发步骤
- 编译原理之基本构成
- 树莓派编译安装ros,原理步骤详细
- 【编译原理】编译器的编译基本过程
- 编译原理学习导论
- 编译原理学习导论
- 编译原理学习导论
- 编译原理学习导论
- 编译原理学习导论
- 编译原理学习导论
- linux多线程pthread
- 浅议未来技术趋势:云计算
- extern 用法详解
- Algorithm: Detailded CyclicShift Solution One of Programming Pearls (2nd)
- nutch1.2标题关键词高亮方法
- 编译原理学习基本步骤
- VS2010-Incremental Linker File增量连接文件和Program Debuge Dtatbase程序调试信息库文件
- OpenDataSource、OPENQUERY、OPENROWSET用法
- android学习进行时----1.1.2UI部分Button使用-事件监听
- 处理 keilc can't create command input file '(null)' 错误
- C#遍历指定文件夹中的所有文件
- C#获取内、外网IP的类
- pbkiller导出的源码批量修复和批量导入技术(转)
- MySQL中设置Auto Increment的值