编译原理笔记(哈工大视频总结)

编译原理笔记--哈工大教学视频

第一章 绪论

一、什么是编译

在这里插入图片描述
编译:将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程

二、编译系统的结构

在这里插入图片描述

人工英汉翻译的例子(分析部分,与源语言有关):
In the room , he broke a window with a hammer.

  1. 词法分析
    在这里插入图片描述
  2. 语法分析
    将各单词按照语法组成小短语在这里插入图片描述
  3. 语义分析
    各短语组成句子在这里插入图片描述
  4. 生成中间表示
    独立于具体的语言在这里插入图片描述

三、词法分析概述

词法分析任务:
从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示词法单元 (token) 形式
在这里插入图片描述

种别码:
对每个词的定位,比如我们可以把数字这个词的种别码定义为10,把标识符的种别码定义为11。

四、语法分析概述

语法分析:
语法分析器(parser) 从词法分析器输出的token 序列中识别出各类短语 ,并构造语法分析树(parse tree)

语法分析树描述了句子的语法结构

例子:
存在文法(由一系列规则构成):
< D > → < T > < IDS >;
< T > → int | real | char | bool
< IDS > → id | < IDS >, id
【D:声明语句。T:类型。IDS:标识符系列】
输入:
int a , b , c ;
输出:语法分析树在这里插入图片描述

五、语义分析概述

语义分析的主要任务:

  1. 收集标识符的属性信息
    在这里插入图片描述
    收集到的信息存放在符号表中。
    (NAME分为两个部分:在字符串表中的位置+长度)在这里插入图片描述

  2. 语义检查
    在这里插入图片描述

六、中 间 代 码 生 成 及编 译 器 后 端 概 述

在这里插入图片描述
常用的中间表示形式

  • 三地址码
    在这里插入图片描述

三地址指令的表示

  1. 四元式(op, y, z, x)
    在这里插入图片描述
  2. 三元式
  3. 间接三元式
  • 语法结构树/语法树

在这里插入图片描述

目标代码生成器
以源程序的中间表示形式作为输入,,并把它映射到目标语言
【目标代码生成的一个重要任务是为程序中使用的变量合理分配寄存器】

代码优化
在这里插入图片描述

第二章 语言及其文法

一、基本概念

字母表
在这里插入图片描述
例如:二进制字母表:{0,1}

字母表上的运算

  1. 乘积
    在这里插入图片描述

  2. n次幂
    在这里插入图片描述字母表的0次幂:空串ε

  3. 正闭包
    在这里插入图片描述

  4. 克林闭包
    在这里插入图片描述多一个空串ε


在这里插入图片描述
在这里插入图片描述
串的运算

  1. 连接
    在这里插入图片描述

  2. 空串是连接运算的单位元
    在这里插入图片描述

  3. 前缀与后缀
    在这里插入图片描述

  4. 幂运算
    在这里插入图片描述串的0次幂是空串

二、文法的定义

在这里插入图片描述

  1. VT: 终结符集合

终结符:不可再分的字符或串
非终结符:可再分的字符或串

  1. VN:非终结符集合在这里插入图片描述

  2. P: 产生式集合

产生式: 描述了将终结符和非终结符组合成串的方法
在这里插入图片描述
产生式的简写:在这里插入图片描述

  1. S:开始符号

例子:在这里插入图片描述

符号约定:

这里是引用
在这里插入图片描述
在这里插入图片描述

三、语言的定义

推导和归约

推导:用产生式的右部替换产生式的左部
在这里插入图片描述
【正步数推导,既至少一步推导。步数为1的推导为直接推导】

.
归约:推导的逆过程
在这里插入图片描述

句子和句型
句型:在这里插入图片描述句型既可以包含终结符 ,又可以包含非终
结符
,也可能是空串

句子:句子是不包含非终结符的句型。

在这里插入图片描述
语言:
在这里插入图片描述
【文法解决了有限符号表示无穷语言的问题】

四、文法的分类

  1. 0型文法(无限制文法/短语结构文法)
    在这里插入图片描述

  2. 1型文法(上下文有关文法)
    在这里插入图片描述

  3. 2型文法(上下文无关文法)
    左侧是一个非终结符
    在这里插入图片描述

  4. 3型文法(正则文法)
    右线性文法:右部侧是个终结符号串
    左线性文法:右部侧是个终结符号串
    在这里插入图片描述
    在这里插入图片描述

四种文法之间的关系
在这里插入图片描述

四、CFG(上下文无关文法)的分析树

上下文无关文法分析树:
在这里插入图片描述
边缘:分析树从左到右排列叶节点得到的符号串

句型的短语
在这里插入图片描述直接短语:子树高度为2的边缘

在这里插入图片描述

二义性文法
在这里插入图片描述

例子:
在这里插入图片描述
二义性文法的判断
在这里插入图片描述

第三章 词法分析

一、正则表达式

正则表达式 (Regular Expression ,RE) 是一种用来描述正则语言的更紧凑的表示方法。

例子:
在这里插入图片描述
正则表达式:
在这里插入图片描述
每个正则表达式 r 定义(表示)一个语言 ,记为L( r ) 。

正则表达式的定义
在这里插入图片描述运算的优先级:*  连接  |
RE的代数定律
在这里插入图片描述

二、正则定义

正则定义: 给一些RE命名 ,并在之后的RE 中像使用字母表中的符号一样使用这些名字。
在这里插入图片描述在这里插入图片描述

三、有穷自动机

有穷自动机:
系统只需要根据当前所处的状态和当前面临的输入信息就可以决定系统的后继行为 。每当系统处理了当前的输入后,系统的内部状态也将发生改变。
在这里插入图片描述
FA模型
在这里插入图片描述

FA的表示:转换图

在这里插入图片描述FA(接收)的语言
给定输入串x , 如果存在一个对应于串x 的从初始状态到某个终止状态的转换序列,则称串x被该FA接收。

这里是引用
串abbaabb被图中的FA接收

最长子串匹配原则
在到达某个终态之后,只要输入带上还有符号,DFA就继续前进,以便寻找尽可能长的匹配。在这里插入图片描述

四、有穷自动机的分类

确定的FA(DFA)
在任意状态下,对于任意的输入都拥有唯一确定的状态走向。
在这里插入图片描述

例子:
在这里插入图片描述

非确定的FA(DFA)
在某状态下,对于某输入有两种及以上状态走向。
在这里插入图片描述

例子:状态0对于输入a有两个状态走向在这里插入图片描述

DFA和NFA的等价性
既DFA可以向NFA转换,反之亦然。
在这里插入图片描述带有和不带有“ε-边”的NFA的等价性,既带“ε-边”的NFA的可以向不带有“ε-边”的NFA转换。

五、从正则表达式到NFA

在这里插入图片描述转换图示
在这里插入图片描述

在这里插入图片描述

例子:
在这里插入图片描述

六、从NFA到DFA的转换

子集构造法
在这里插入图片描述
先确定开始状态,再查看转换表该状态分别经过a、b所能到达的状态。能通过a到达的状态集合统归为一个新的状态。类似的对新状态包含的状态分别对a、b进行考察,通过a到达的状态集合再归为一个新状态。b边同理。

在这里插入图片描述

【每进入一个(新)状态,都需要观察这个新状态通过每一种边能到达的状态,新状态通过某一边(比如a边)所能到达的状态成为一个集合,这个集合又成为一个(新)状态;以此类推】

词法错误检测
如果当前状态与当前输入符号在转换表对应项中的信息为空,而当前状态又不是终止状态 ,则 调用错误处理程序。

错误处理
在这里插入图片描述错误恢复策略
在这里插入图片描述

第四章 语法分析

一、自顶向下分析概述

自顶向下的分析:从分析树的顶部(根节点)向底部(叶节点)方向构造分析树。
在这里插入图片描述

自顶向下的语法分析采用最左推导方式
.
自顶向下语法分析的通用形式: 递归下降在这里插入图片描述
每一个非终结符对于一个过程。如果一个非终结符有多个候选式,那可能需要回溯,效率低。

最左推导: 总是选择每个句型的最左非终结符进行替换。

在这里插入图片描述最右归约是最左推导的逆过程。

最右推导
在这里插入图片描述
在自底向上的分析中,总是采用最左归约的方式,∴最左归约称为规范归约,而最右推导相应地称为规范推导

最左推导和最右推导的唯一性
只有唯一 一颗最右(左)推导分析树。
在这里插入图片描述
预测分析在这里插入图片描述在这里插入图片描述预测分析不需要回溯,是一种确定的自顶向下分析方法。

二、文法转换

问题一:回溯现象
在这里插入图片描述问题二:无限循环
在这里插入图片描述
消除直接左递归
在这里插入图片描述
在这里插入图片描述若有间接左递归,带入即可。

在这里插入图片描述
提取左公因子
在这里插入图片描述

三、LL(1) 文法

S_文法:(简单的确定性文法)
在这里插入图片描述

重点

  1. 非终结符的后继符号集FOLLOW
    在这里插入图片描述
    可能在某个句型中紧跟在A后边的终结符a的集合,记为FOLLOW(A)
  2. 产生式的可选集SELECT
    在这里插入图片描述
    【SELECT(A→β)不会有ε】
    在这里插入图片描述

SELECT( A→ε )=FOLLOW( A ):当A推导为ε,则后面输入的应该是能接在A后面的终结符集合

  1. 串首终结符集FIRST

串首终结符:串首第一个符号,并且是终结符。简称首终结符。

在这里插入图片描述

在这里插入图片描述

LL(1)文法:
保证同一非终结符的不同候选式的SELECT不同。
在这里插入图片描述

在这里插入图片描述
当 β可推导ε时,SELECT(A → β)包含FOLLOW(A),SELECT(A → α)要与之不同,只能当FIRST(A)与之无交集。【既当用A → β→ε时,怎么保证不是用A →α?得保障使用A →α后,首字母不会出现在使用A → β→ε后,后面会出现得字母集合内。】

另一个同理

LL(1)名字解析

在这里插入图片描述

四、FIRST集、FOLLOW集和SELECT集的计算

  1. FIRST集
    看左向右看
    在这里插入图片描述
    【FIRST集合之间有相互依赖关系,比如FIRST(E)依赖于FIRST(T)】

FIRST算法:
在这里插入图片描述
在这里插入图片描述

  1. FOLLOW集
    文法的开始符号E是一个句型,也是这个句型的最右符号
    从右向左看
    在这里插入图片描述
    【产生式1:FOLLOW(T)=FIRST(E’);E’可推导为空,所以FOLLOW(T)=FOLLOW(E);FOLLOW(E’)=FOLLOW(E)】

算法:
在这里插入图片描述

  1. SELECT集
    在这里插入图片描述
    【第一条产生式:SELECT(1) = FIRST(T);第三条产生式:SELECT(3) = FOLLOW(E’);】
    相同左部产生式SELECT集不同,是LL(1)文法

  2. 预测分析表
    5.

五、 递归的预测分析法

递归的预测分析法是指:在递归下降分析中,根据预测分析表进行产生式的选择。

例子:
在这里插入图片描述
在这里插入图片描述
通俗来讲,就是递归去创建函数判断。函数中的判断条件依赖于预测分析表(知道用哪个产生式,然后进行if else 判断)

六、非递归的预测分析法

在这里插入图片描述

与有穷自动机的区别:
有穷自动机不具备存储功能。
在这里插入图片描述
上式文法就不能用有穷自动机判断是否正确。
.
非递归预测分析法有一个栈,具备存储记忆功能
在这里插入图片描述

预测分析法实例:
在这里插入图片描述栈顶指针是非终结符,就查预测表,用对应产生式调换。是始终符就与输入比较。只有最后栈顶指针指向"$ "且输入为 “$”才算匹配成功。

递归的预测分析法vs.非递归的预测分析法
在这里插入图片描述

七、预测分析中的错误处理

在这里插入图片描述
处理方式:恐慌模式

  1. .
    在这里插入图片描述

同步词法单元:
根据相应非终结符的FOLLOW集得到同步语法单元。
大概意思是,你栈中的非终结符+输入的非终结符在预测表中找不到对应的产生式。但是这个终结符的FOLLOW集有输入的终结符号。那我忽略这个栈中非终结符即可。

  1. .在这里插入图片描述

栈中的非终结符+输入的非终结符在预测表中找不到对应的产生式,也没有同步词法单元。说明这个非终结符后面就不可能推出这个终结符,把输入的终结符去掉。

例子:
在这里插入图片描述在这里插入图片描述

八、自底向上分析概述

在这里插入图片描述
例子:
每次将输入移入到栈需判断栈中是否存在可以归约的句型。
在这里插入图片描述【栈内符号串 + 剩余输入 =“规范句型”】
句柄:句型的最左直接短语。

移入-归约分析的工作过程
在这里插入图片描述

九、LR分析法概述

LR 文法是最大的、可以构造出相应移入- 归约语法分析器的文法类。
在这里插入图片描述
LR分析法的基本原理:
在这里插入图片描述
归约过程

在这里插入图片描述
在这里插入图片描述

  1. 初始状态:
    在这里插入图片描述
    当前状态0,输入时b;查表结果为s4,输入b和状态4入栈。
    在这里插入图片描述
    当前状态4,输入a;查表结果为r3;采用第三条产生式进行归约,状态4和b出栈,B入栈。
    在这里插入图片描述
    归约后查看状态:0,栈中非终结符为B,查表结果为goto 2。2号状态入栈。
    在这里插入图片描述
    之后以此类推。
    .
    2.最终状态在这里插入图片描述
    此时,状态1,输入$。指向acc成功归约。

List item在这里插入图片描述
在这里插入图片描述

十、LR(0)分析

在这里插入图片描述

在这里插入图片描述
待约项目:需要往后看等待被归约的项目
归约项目:当前需要归约的项目

增广文法
在这里插入图片描述
目的:避免开始符指向多个产生式。

例子:
在这里插入图片描述

文法中的项目的等价
当圆点后面存在非终结符时,就存在等价项目。

在这里插入图片描述
对于S’→ · S,看(1)产生式得到等待S归约,其实是在等待BB;所以S’ → · S和S→ · BB等价;看(2)、(3)产生式得知,等待B归约其实是在等待aB或者b,所以S→ · BB、B→ · aB和B→ · b等价。
将所有等价项目归为一个集合
在这里插入图片描述

后续项目
在这里插入图片描述

LR(0)自动机
在这里插入图片描述划分等价项目,然后根据归约符号指向对应的后续项目。

根据图画出分析表:在这里插入图片描述
【某状态只有入边则归约:r;出边状态转换:S】

十一、LR(0)分析表构造

对(十)的代码表示,上面懂了就行

  1. 计算给定项目集I的闭包CLOSURE()函数
    在这里插入图片描述在这里插入图片描述【CLOSURE()就是找等价项目,对给定集合I中的每一个项根据文法规则G找到对应的等价项目。如:对于集合I中的A→a · Bβ,去文法G中找到左部为B的产生式:B→r,并将B→ · r加入到集合I中。】

  2. 找后续项目集闭包GOTO()函数
    在这里插入图片描述在这里插入图片描述【找后续项目集闭包:GOTO(I,X)函数,对I中的每一个项的状态A→a · Xβ进行后移为A→aX · β,并找其等价项目】

  3. 从开始符号S’构造LR(0)项目集族
    在这里插入图片描述【一开始C项目集族中只有S’→ · S的闭包,既只有一个状态集I0,在通过循环依次将C项目集中每一个状态的后续项目集状态加入C】

  4. 根据状态集构C造LR(0)分析表
    在这里插入图片描述

  5. LR(0)分析过程中的冲突
    在这里插入图片描述【I2的E→T · 表示要归约T为E,而T→T · *F表示要移进】
    在这里插入图片描述同时也存在归约/归约冲突

如果LR(0)分析表中没有语法分析动作冲突,那么给定的文法就称为LR(0)文法。
不是所有CFG(上下文无关文法)都能用LR(0)方法进行分析,也就是说,CFG不总是LR(0)文法

十二、SLR分析

SLR分析用于解决LR(0)分析过程中的冲突

  1. SLR分析法的基本思想
    在这里插入图片描述【当前输入字符在{ai}中,不在FOLLOW(Bi)就移进;不在{ai}中,在FOLLOW(Bi)就移归约】
  1. 移进-归约冲突
    在这里插入图片描述
    在这里插入图片描述
    对于状态2,当输入符号是 * 时。它不在E的FOLLOW集,既我归约后面不可能出现 * ,所以不进行归约,而是移进
  2. 归约-归约冲突
    在这里插入图片描述
    对于状态2的两个归约项目,得查看FOLLOW集。

十二、LR(1)分析法

  1. SLR存在问题:
    在这里插入图片描述

  2. 规范LR(1)项目
    在这里插入图片描述

  1. LR(1) 中的1指的是项中的第二个分量长度
  2. 在形如[A→α · β, a] 且β ≠ ε 的项中,展望符a没有任何作用
  3. .
    在这里插入图片描述【用展望符表示下一个输入符号,既只有下一个符号是a,才能用该产生式归约。保证使用该产生式归约后,a可以被其他产生式归约】
  1. 等价LR(1)项目
    在这里插入图片描述

例子:
在这里插入图片描述
【后续状态与原状态的展望符一致】
在这里插入图片描述
如果除展望符外,两个LR(1)项目集是相同的,则称这两个项目集是相同的

十四、LALR分析法

  1. LALR分析的基本思想
    在这里插入图片描述【将展望符外,LR(1)项目集相同的归约状态合并】

例子:

  1. 在这里插入图片描述
  2. 在这里插入图片描述
  1. 合并同心项集时产生归约-归约冲突
    在这里插入图片描述【设置咱玩符就消除了移进冲突】
    合并同心项集后,虽然不产生冲突,但可能会推迟错误的发现

例子:
在这里插入图片描述

  1. LALR(1)的特点
    在这里插入图片描述

十五、二义性文法的LR分析

  1. 二义性文法都不是LR文法
    在这里插入图片描述

  2. 二义性文法得LR(0)分析器
    在这里插入图片描述存在移入-归约冲突
    解决:
    设置优先级:I7状态中,乘法状态优先级高,所以当下一个输入字符是 * 时,应该进行移进。而当下一个输入字符是+时,遵循左结合应当进行归约。
    状态I8代表栈顶是E * E,是个乘法,无论下一个字符是+还是 * ,都应当进行归约。

十六、LR分析中的错误处理

  1. 语法错误的检测
    当LR分析器在查询分析表并发现一个报错条目时,就检测到了一个语法错误

  2. 错误恢复策略
    在这里插入图片描述

  3. 恐慌模式错误恢复
    在这里插入图片描述

  4. 短语层次错误恢复
    在这里插入图片描述

状态I0时,等待的终结符号是 ( 或 id ,而当前输入输入符号是+,*,$时,应该是缺少了终结符id;所以将id压入栈并转到状态3。若当前字符是 ) ,则说明少了冗余的),将 ) 弹出。
在这里插入图片描述
在这里插入图片描述

第五章 语法制导翻译

一、语法制导翻译概述

  1. 什么是语法制导翻译
    将语法分析和语义分析放在一起做
    在这里插入图片描述

  2. 基本思想
    (1)如何表示语义信息?
    在这里插入图片描述
    【设置属性】

(2)如何计算语义属性?
在这里插入图片描述【语法分析的产生式的时候顺带用语义规则来计算语义属性】

  1. 两个概念:
    在这里插入图片描述(1)语法制导定义(SDD)
    在这里插入图片描述

例子:
在这里插入图片描述
【为每一个符号设置属性,并对每一条产生式设置语义分析】

(2)语法制导翻译方案(SDT)
SDD的升级版
在这里插入图片描述
【对于第一条产生式,当分析出T的属性值type,就可以分析树L的inh属性值;
对于最后一条:在分析L1之前就可以根据L分析出L1的inh属性值。】

在这里插入图片描述

二、语法制导定义SDD

  1. 文法符号的属性
    (1)综合属性
    在分析树结点 N 上的非终结符A 的综合属性只能通过N的子结点或N本身的属性值来定义
    在这里插入图片描述

终结符可以具有综合属性。终结符的综合属性值是由词法分析器提供的词法值,因此在SDD中没有计算终结符属性值的语义规则。【终结符综合属性不需要计算】

(2)继承属性
在分析树结点 N 上的非终结符A 的继承属性只能通过N的父结点、N的兄弟结点或N本身的属性值来定义
在这里插入图片描述【终结符没有继承属性】

例子
在这里插入图片描述
【E:表达式;T:项;F:因子】

  1. 属性文法
    在这里插入图片描述

例子:
在这里插入图片描述

三、 SDD的求值顺序

  1. 依赖关系
    在这里插入图片描述依赖图
    在这里插入图片描述

例子:
在这里插入图片描述

  1. 属性值的计算顺序
    在这里插入图片描述【根据依赖图找拓扑排序

在这里插入图片描述

在这里插入图片描述

四、S-属性定义与L-属性定义

  1. S-属性定义
    在这里插入图片描述在这里插入图片描述
    很适合自底向上语法分析

例子:
在这里插入图片描述
【左边符号属性都依赖于右边符号】

  1. L-属性定义( L属性的SDD / L-SDD)
    在这里插入图片描述

正式定义:
在这里插入图片描述

例子:
在这里插入图片描述
第一行的T’.inh依赖于左边的非终结符,符合定义。

五、语法制导翻译方案SDT

  1. SDT可在语法分析过程中实现
    在这里插入图片描述

  2. S-SDD转换为SDT
    在这里插入图片描述

例子:

  1. .在这里插入图片描述
  2. S-SDD文法的LR分析
    在自底向上语法分析栈中实现桌面计算器
    在这里插入图片描述
    (1)在这里插入图片描述
    I0遇到输入符号3进入I5,将状态5和符号d入栈,d的属性值是词法分析器给的3,3入栈;
    I5是归约状态, 将状态5和符号d出栈,将符号F入栈,回到I0状态,I0遇到F进入I3,将状态3入栈。
    在这里插入图片描述
    以此类推
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 将L-SDD转换为SDT
    在这里插入图片描述
    【继承属性放在它自己前面,综合属性放最右边】

例子:
在这里插入图片描述

  1. L-属性定义的SDT 实现
    在这里插入图片描述

六、在非递归的预测分析过程中进行翻译

非递归—表驱动

  1. 扩展语法分析栈
    在这里插入图片描述

  2. 例子:
    得根据动作里属性依赖关系判定在该属性出栈后的去留
    在这里插入图片描述
    在这里插入图片描述动作和1产生式右部符号位置,判断执行代码
    在这里插入图片描述

七、在递归的预测分析过程中进行翻译

在这里插入图片描述
【综合属性做返回值,因为综合属性依赖于子节点->函数执行完才能指定;依赖属性做形参,因为以来函数依赖于兄弟节点或父节点或自身,到->到此函数了应该早就知道了】
在这里插入图片描述
总的递归函数:
在这里插入图片描述

第六章 中间代码生成

一、类型表达式

  1. 基本类型是类型表达式
    在这里插入图片描述【可以为类型表达式命名, 类型名也是类型表达式】

  2. 将类型构造符作用于类型表达式可以构成新的类型表达式
    (1)数组构造符array
    在这里插入图片描述(2)指针构造符pointer
    在这里插入图片描述(3)笛卡尔乘积构造符X
    在这里插入图片描述(4)函数构造符→
    在这里插入图片描述【Ti:参数 ; R:返回值】

(5)记录构造符record
在这里插入图片描述

例子:
在这里插入图片描述

二、声明语句的翻译

  1. 局部变量的存储分配
    在这里插入图片描述在这里插入图片描述

  2. 变量声明语句的SDT
    在这里插入图片描述【从声明变量的SDT中,用语义分析分析并记录各变量的类型和相对地址】

  3. 例子
    例1:
    在这里插入图片描述【该文法是LL(1)文法,自顶向下,从左到右进行推导】
    例2:
    在这里插入图片描述【B–>基本类型,用t,w记录对应信息。当C推导为空串,信息不会丢失】
    在这里插入图片描述

三、简单赋值语句的翻译

  1. 主要任务
    在这里插入图片描述

  2. 赋值语句的SDT
    在这里插入图片描述【||表示连接。E的三地址指令要从子节点获取,子节点凑得也得从字节的获取。然后从底依次保存向上传递给根,太麻烦了引入增量翻译】

  3. 增量翻译
    ||去掉,用gen就行。有个地方专门保存code
    在这里插入图片描述

该文法是LR文法,用LR自动机分析即可
在这里插入图片描述
分析后表达式存在右边
在这里插入图片描述

四、数组引用的翻译

  1. 目标:找到某一元素的地址在这里插入图片描述在这里插入图片描述

  2. 带有数组引用的赋值语句的翻译
    在这里插入图片描述

  3. 数组引用的SDT
    在这里插入图片描述【该文法属于S-SDD文法,采用自底向上归约分析】

五、控制流语句及其SDT

  1. 控制流语句的代码结构
    在这里插入图片描述

  2. 控制流语句的SDT
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

六、布尔表达式及其SDT

  1. 布尔表达式的基本文法
    在这里插入图片描述

  2. 逻辑运算符被翻译成跳转指令
    在这里插入图片描述在这里插入图片描述

  3. 布尔表达式的SDT
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值