编译原理笔记

第一章 总论

编译程序的功能

较为复杂的翻译程序

编译程序的组成,各部分的功能?

分析:词法分析,语法分析,语义分析

综合:中间代码生成,中间代码优化,目标代码生成,目标代码优化

各部分功能:

什么是趟(遍)?

对一种代码形式从头到尾扫描一遍

高级程序设计语言有哪两种执行方式?各有什么优缺点?两种执行方式的区别。

编译执行:源程序的执行分两步:编译和运行.即先通过一个存放在计算机内的.成为编译程序的机器语言程序,把源程序全部翻译成和机器语言表示等价的目标程序代码,然后计算机在运行此目标代码,以完成源程序要处理的运算并取得结果

解释执行:源程序输入到计算机后,解释程序将源程序逐句翻译,翻译一句执行一句,边翻译边执行,不产生目标程序

区别:编译方式把源程序的执行过程严格地分成两大步:编译和运行.即先把源程序全部翻译成目标代码,然后再运行此目标代码,获执行结果.即:先编译后执行.解释方式则不然:它是按照源程序中语句的动态顺序,直接地逐句进行分析解释,并立即执行.即:边编译边执行.

第二章 文法和语言

文法的定义

文法是一个四元组:非终结符集合,终结符组成的字母表,有穷非空的重写规则集合,识别符号

推导、规范推导、归约、规范归约

什么是规范推导、规范归约?

什么是规范句型、规范分析?

推导:非终推出一串

规范推导:最右推导,得到的句型为规范句型

规约:一串归到一个非终

规范归约:最右规约

句子、句型、短语、简单短语、句柄

句型:有终结符和非终结符

句子:只有终结符

短语:w=xuy是一个句型,Z=>xUy,且U=>u(好几步),则称u是句型w的相对于U的短语

直接短语:w=xuy是一个句型,若有Z=>xUy,且U=>u(一步),则称u是句型w的相对于U的直接(简单)短语

句柄:句型的最左简单短语称为该句型的句柄

根据语法分析树如何求?

👍

子树的末端结点符号串是相对于子树根的短语。

简单子树的末端结点组成的符号串是相对于简单子树根的简单短语;

最左简单子树的末端结点组成的符号串为句柄。

语言的定义

语言:该文法一切句子的集合

文法和语言的关系

一个文法,能构造出唯一的语言

一个语言,能确定文法,但是不是唯一的文法

文法和语言的分类、对应的自动机

0型文法:

1型文法(上下文有关文法):cD->BDb

2型文法(上下文无关文法):A->aBb

3型文法(正规文法):左线性/右线性

二义性文法的判别

同一个句子,最左推导最右推导能得到两个分析树

句型分析分哪两类?各自的难点及要解决的问题是什么?

自顶向下分析技术

基本思想是:从识别符号出发,由它推导出与输入符号串相同的终结符号串。自顶向下识别过程是一个不断建立直接推导的过程。

问题:如何确定用哪个ui代替U?

自底向上分析技术

基本思想是:从输入符号串出发,试图把它归约成识别符号。

问题:把x归约到A还是B?

语法分析树的作用?

为一个给定的终结符号串构建一棵语法分析树的过程称为对该符号串进行语法分析

第三章 词法分析

词法分析的任务

识别出源程序中具有独立含义的最小语法单位——符号或单词

根据状态转换图写正则文法;根据正则文法画状态转换图

👍

对于形如A∷=a的每个规则,引一条从开始状态S到状态A的弧,其标记为a;

对形如A∷=Ba的规则引一条从状态B到A的弧,其标记为 a。

如果一个状态转换图中有从状态B到状态A的弧,弧上标记为a,显然必存在规则A∷=Ba;

如果从开始状态S到状态A有一弧,弧上标记为a时,则存在规则A∷=a。

根据语言写文法;根据正则文法构造有限自动机

👍

根据语言写文法:先构造状态转换图,然后用几个句子测试状态装换图对不对,然后根据状态转换图写文法

正则文法构造有限自动机:先构造状态转换图,然后列一个表格(映射函数M)(A经过a到B->A行a列值为B)

特别强调:正则文法的形式采用左线性

什么是NFA、DFA?

DFA:确定有穷自动机 五元组

(有穷非空状态集合,有穷非空输入字母表,映像M,开始状态,非空的终止状态集合)

NFA:非确定有穷自动机

(有穷非空状态集合,有穷非空输入字母表,全体映像M,非空的开始状态集合,非空的终止状态集合)

NFA和DFA主要区别是什么?

DFA的确定性表现在转换函数M:对任一状态和输入,M唯一的确定了下一个状态

NFA:对任一状态和输入,下一个状态不能唯一确定

NFA的确定化算法

👍

先列出NFA

1 、 从新开始状态出发,列表求出其它一切新状态(每出现一个新状态,加到列表里);

2 、以状态名中包含原有终止状态名的一切新状态作为新终止状态;

3 、 构造DFA N′。

第四章 自顶向下的语法分析

自顶向下的语法分析技术的基本思想,要解决的主要问题是什么?

自顶向下分析技术

基本思想是:从识别符号出发,由它推导出与输入符号串相同的终结符号串。自顶向下识别过程是一个不断建立直接推导的过程。

问题:如何确定用哪个ui代替U?

文法的等价变换:提取左公共因子

👍

一般形式:A→αβ1|αβ2|…|αβn

提取左公共因子: A→α(β1|β2|…|βn )

引进新的非终结符A’: A→αA’ A’→β1|β2|…|βn

消除左递归的方法

👍

将 A→Aα1|Aα2|…|Aαm|β1|β2|…|βn

改写为: A→β1A’|β2A’…|βn A’ A’→α1A’|α2A’…|αm A’|ε

这里, αi不等于ε,βj不以A开头。

FIRST()集合与FOLLOW()集合的求法

👍

FIRST():只看右边的第一个符号,如果是终结符,就是终结符,如果是非终结符,继续求这个非终结符的FIRST()

FELLOW(): 在右边找A ,找到之后求A的右边的FIRST()

  1. 把FIRST()中除了空集的元素都加进去
  2. 如果FIRST()中有空集,把左边非终结符的FELLOW()加进去

Select()集合的求法

👍

对于一个规则A->★

  1. 如果★推不出空集,把FIRST(★)加进去
  2. 如果★能推出空集,把FIRST(★)中除了空集的元素加进去,再加上FELLOW(A )

何构造预测分析表?

👍

对于一个规则A->★

  1. FIRST(★)中除了空集的每一个符号下都有这个规则
  2. 如果FIRST(★)中有空集,FELLOW(A)中的每一个符号下都有这个规则

LL(1)文法的定义和判定方法

👍

对于一个非终结符有多条规则,每一条规则的Select集没有交集,就是LL(1)

递归下降分析技术的实现思想

文法的每一个非终结符所对应的子程序,根据选定的产生式右端出现的符号来设计,具体构造方法如下:

  1. 每遇到一个终结符,则判断当前读入的单词是否与该终结符相匹配,若匹配,则继续读取下一个单词;若不匹配,则进行错误处理。
  2. 每遇到一个非终结符,则调用相应的子程序。

根据文法写出递归下降分析程序(伪代码)

👍

若规则呈U → u|ε,则对于当前输入单词a,当a∊first(u)时,a与u匹配,否则,任何的a都与ε匹配。

第五章 自底向上的语法分析 算符优先

(自学内容—教材第五章)

算符优先分析技术的实现思想,算符优先关系,算符优先文法的判别

素短语,最左素短语。

素短语:1.是一个短语.2.至少包含一个终结符.3.除自身外不再包含其他素短语

最左素短语:最左边的素短语

算符优先分析的优缺点;

优点:简单,有效,适合表达式的分析

缺点:只适合于算符优先文法

在规约的过程中只考虑终结符之间的优先关系来确定句柄,而与非终结符无关

算符优先分析过程和规范归约的比较。

第五章 自底向上的语法分析

什么是移入项、归约项、待约项?

移入项:🔺后面是终结符

待约项:🔺后面是非终结符

规约项:🔺在最后

LR(0)项集规范族的构造

👍

特征有穷状态机

各个状态与后继符合组成的状态转换图

LR(0)文法的判别、 LR(0) 分析表的构造

👍

判别:没有移进规约冲突

构造:…

LR(0)分析过程

👍

SLR(1) 分析表的构造,SLR(1)文法的判别

👍

判别:如果有移进规约冲突,并且FELLOW()无交集是SLR(1)

构造:…

向前搜索符号,LR(1)项,有效项

什么是活前缀、可归前缀?

P125

在符号栈中的都是活前缀

每次归约之前的符号串都是可归前缀

LR(1)项集规范族的构造

👍

LR(1)文法的判别、 LR(1) 分析表的构造

👍

LR(1)分析过程

👍

三种LR分析方法的比较

第六章 语义分析与目标代码生成

程序的含义包含哪两个方面?

数据结构的含义与控制结构的含义

语义分析的功能

1.确定类型2.类型检查3.识别含义4,其他静态语义检查

什么是语法制导翻译?

语法制导翻译 是在语法规则制导下,通过对语义规则的计算,完成对输入符号串的翻译。即,在使用语法规则进行推导或归约的同时又使用语义规则来指导翻译与最终产生目标代码。

属性文法的定义

在文法基础上,为文法符号关联的有特定意义的任何内容,称为属性。

如类型、数值、存储地址与代码等。

属性文法和翻译模式的区别

翻译模式:是适合语法制导语义计算的另一种描述形式。在形式上与属性文法类似,但允许语义动作出现在产生式右端的任何位置,以显式的表达属性计算的次序

属性文法: 在属性文法中,每个产生式都关联一个语义规则的集合,每个语义规则可以是一个语义动作,或者是一个条件谓词。

什么是综合属性、继承属性?

综合属性:产生式左边符号的属性由右边的符号的属性决定

继承属性:产生式右边符号的属性由左边符号和右边符号的属性决定

如何根据基础文法设计相应的属性文法和翻译模式?

S-属性文法、L-属性文法

S-翻译模式、L-翻译模式

S-属性文法:只包含综合属性的文法

L-属性文法:可以包含综合属性也能包含继承属性,但是产生式右端的符号的继承属性只能由他左边符号决定

语义计算

遍历分析树进行语义计算

基于属性文法的语义计算:1.基于S-属性文法的语义计算 2.基于L-属性文法的语义计算

基于翻译模式的语义计算:基于L-翻译模式的递归下降翻译程序(例题7.9)

源程序的内部中间表示有哪几种?

抽象语法树

逆波兰表达式

四元式

根据给出的C语言源程序,写出相应的四元式序列。

👍

while和if判断时去运算符号的反

  • 3
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 编译原理是针对计算机编程语言的研究,目的是将高级语言转化为机器语言并执行。编译原理笔记PDF是一份系统性的学习笔记,包含了编译原理的各个方面。这份学习笔记可以帮助学习者深入了解编译原理,掌握相关的技能。 编译原理笔记PDF通常包含以下几个方面的内容:编译原理的基本概念,编译器的结构与原理,语法分析器的设计与实现,语义分析器的设计与实现,中间代码生成和机器码生成,以及优化技术等。这些内容都是非常重要的编译原理知识点,可以帮助学习者理解编译原理的各个方面,并掌握相关的技术细节。 编译原理笔记PDF还可以提供一些编译原理实战案例,帮助学习者将所学知识应用到实际情况中。实际中有很多编译器与解析器需要我们开发,而这份学习笔记可以准确清晰地指导我们如何设计和开发这些编译器。 总之,编译原理笔记PDF是一份非常有价值的学习资料,可以帮助我们深入了解编译原理,掌握相关的技能,并将这些知识应用到实际情况中。 ### 回答2: 编译原理笔记PDF是一份非常全面的编译原理学习资料,其中详细介绍了编译原理的各个方面,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。这些内容不仅涵盖了编译原理的基本理论概念和算法,还提供了许多实际的实现案例和实际开发中的工具。 对于想要学习编译原理的同学来说,编译原理笔记PDF是一个非常好的选择,它可以帮助同学们快速地掌握编译原理的相关知识和技能。通过对这份资料的学习,同学们能够从实际问题和实际应用的角度深入理解编译原理的相关概念和算法,同时掌握一些实用的工具和技术,从而更好地应对工作和学习中的编译问题。 总之,编译原理笔记PDF是一份非常有价值的学习资料,它能够帮助同学们更好地学习和理解编译原理的相关概念和算法,同时提供一些实际的工具和技术供同学们参考和应用。建议有相关需求的同学一定要好好利用这份资料,从中学到更多有用的知识和技能。 ### 回答3: 编译原理笔记 pdf是一本关于编译原理的学习资料,其中涵盖了编译原理的基础知识、重要概念、算法和分析等内容。编译原理是计算机科学中非常重要的一门学科,其研究的是如何将一种高级语言转化为低级语言,并使之在计算机中运行。编译原理涵盖的内容很广,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等等。 编译原理笔记 pdf可以帮助学习者更好地理解和掌握编译原理的知识,尤其是对于那些正在学习编译原理或者准备学习编译原理的人来说,是一本非常有价值的资料。它可以帮助学习者更深入地了解编译原理的基础概念,例如编译器、编译过程、语言处理器等等,同时也可以帮助学习者更准确地理解编译原理中的各种概念和算法,例如文法、自动机、LL(1)分析器、LR分析器等等。 总之,编译原理笔记 pdf是一本非常实用、有价值的学习资料,它对于那些正在学习或者准备学习编译原理的人来说,是一本非常有趣和有用的书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值