编译原理

一:编译器的结构

编译原理

绪论:

1,词法分析/扫描

确定单词的类型,语法单词(token)
token:<种别码,属性值>

2,赋值语句的分析树

编译原理

3,语义分析

(声明语句和语义检查 )

声明语句:
编译原理

放在符号表(存放标识符的属性信息)中,同时其中还要有字符串表。

语义检查:
编译原理

4,中间代码生成和编译器后端

中间代码生成:

三地址码:

编译原理
代码优化

二:语言及其文法

编译原理

1,基本概念

字母表:有穷符号集合
字符表的运算+串+串上的运算

2,文法的定义

文法的形式化定义

编译原理
编译原理

3,语言的定义

推导(将左部替换成右部)和归约(将右部替换成左部)
句型和句子

4,文法的分类

0型文法:无限制文法/短语结构文法
1型文法:上下文有关文法
2型文法:上下文无关文法
3型文法:正则文法(左线性和右线性)

四种文法的关系:

逐级限制

编译原理

逐级包含

编译原理

5,CFG(上下文无关文法/二型文法)分析树

分析树是推导的图形化表示
句型的短语:
如果树的深度为二,那么这棵子树边缘称为直接短语(所以直接短语是产生式的右部)
二义性文法:
一个文法可以生成多棵分析树树,则称这个文法是二义性的 (消歧规则)

三:词法分析

1,正则表达式RE(描述正则语言)

2,正则定义(给正则表达式起名字)

3,有穷自动机FA(对一类处理系统建立的数学模型)

编译原理
编译原理
编译原理
FA接收的语言:

编译原理

最长匹配原则:(读取多个终端)

编译原理

4,有穷自动机的分类(正则文法<=>正则表达式<=>FA)确定的(DFA):

编译原理
例子(转换表和转换图)

编译原理
不确定的(NFA):
与DFA的两点不同(红色标记)
编译原理
带有和不带有:

编译原理

5,从正则表达式到有穷自动机(RE转换成DFA)

RE->NFA->DFA

编译原理

6,从NFA到DFA的转换方法 (子集构造法算法(不好理解,后面应该仔细学习))

编译原理
编译原理
从带Σ-边的NFA到DFA的转换:

编译原理

7,识别单词的DFA

识别标识符/识别无符号数/识别各进制无符号整数/识别注释/识别Token

编译原理
总的来说:

编译原理

词法分析中的错误处理:

单词拼写错误/非法字符->查找字符表对应的某终态字符,没查到->错误恢复策略:恐慌模式(不断删除字符直到发现正确字符)

上一篇:编译原理:深入理解正则表达式与NFA、DFA状态机


下一篇:形式语言与自动机五 正则语言的三个性质