编译原理学习基本步骤

来源:互联网 发布:人工智能会使人变懒吗 编辑:程序博客网 时间: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的代码实现。

原创粉丝点击