编译原理复习

第一章

第二章

第三章

第四章

  • 怎么求FIRST集
  • 怎么求FOLLOW集
  • LL(1)文法
  • 自顶向下的语法分析方法有:LL(1)文法的(递归下降分析法,预测分析法)
  • 自下向上的语法分析方法有:LR(0),LR(1),SLR(1),LALR(1),算符优先分析方法
  • 如何将非LL(1)文法改为LL(1)文法,有下面2步:
  1. 消除左递归(Eliminate Left Recursion)
  2. 提取共有前缀(Left Factoring Algorithm)

最后还需要判断得到的文法是不是LL(1)文法,因为不是所有的文法都能改成LL(1)文法。

  • 最左推导:每一步推导都是对句型中的最右非终结符用相应的产生式的右部进行替换
  • 最右推导:每一步推导都是对句型中的最左非终结符用相应的产生式的右部进行替换
  • 编译原理-消除左递归
  • 算符优先文法
  • 活前缀

之前看到有人说 活前缀是句柄的子集,这是不对的,差点被误导了。准确的应该是这样:

表示范围:LR(1)>LALR(1)>SLR(1)>LR(0),区别有:LR(0)文法不能解决移进--归约冲突和归约--归约冲突,一旦出现这两种冲突就不是LR(0)文法,所以可表示范围最小。SLR(1)文法可能解决LR(0)文法的移进--归约冲突和归约--归约冲突,也有可能解决不了。LR(1)文法表示范围最大,只是同一个文法,如果构造起自动机来的话LR(1)文法的状态会非常多。解决办法就是使用LALR文法,LALR文法本身不存在移进--归约冲突,如果存在只能是归约--归约冲突。

第五章

  • 综合属性(synthesized attribute)
    在分析树结点 N上的非终结符A的综合属性只能通过N的子结点 N本身的属性值来定义

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

  • 继承属性(inherited attribute)

    在分析树结点 N上的非终结符A的继承属性只能通过N的父结点N的兄弟结点 N本身的属性值来定义

    终结符没有继承属性:终结符从词法分析器处获得的属性值被归为综合属性值

  • S-属性定义
    仅仅使用综合属性的SDD称为S属性的SDD,或S-属性定义、S-SDD

    如果一个SDD是S属性,可以按照语法分析树节点的任何自底向上顺序来计算它的各个属性值
    S-属性定义可以在自底向上的语法分析过程中实现

  • L-属性定义
    一个SDD是L-属性定义,当且仅当它的每个属性要 么是一个综合属性,要么是满足如下条件的继承属 性:假设存在一个产生式A→X1X2…Xn,其右部符 号Xi (1<= i <= n)的继承属性仅依赖于下列属性:

    1. A的继承属性(如果是综合属性,可能会形成环)
    2. 产生式中Xi左边的符号 X1, X2, … , Xi-1 的属性
    3. Xi本身的属性,但Xi 的全部属性不能在依赖图中形成环路
    注:每个S-属性定义都是L-属性定义

  • 求后缀表达式、三元式、四元式

第七章

例题及复习笔记

实验部分

Fle符号规则表

符号含义
|
[]括号中的字符取其一
-a-z表示ascii码中介于a-z包括a、z的字符
\转义(flex不能识别除字母外的字符)
*0或多个字符
?0或1个字符
+1或多个字符
^除此之外的其余字符
.除\n外的所有字符,等价于^\n

做flex相关题主要理解两点:

1.优先选择最长的匹配

2.如果遇到匹配长度一样的,按照从上到下的顺序选择,也就是选择序号小的

参考flex官网原文:

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《编译》——复习资料,可适用于课程学习资料、期末复习资料、自主学习资料等等,复习资料共218页,内容丰富,干货十足! 主要内容包括: 一、概述 1 1.1 课程介绍 1 1.2 编译过程 3 1.3 高级语言程序简介 11 二、程序语言概论 14 2.1 程序语言的定义 14 2.2 文法的形式化定义和分类 18 2.3 文法和语言 22 2.4 语法分析树 29 三、词法分析_1 33 3.1 词法分析概述 33 3.2 词法分析程序的设计 38 3.3 正规式与自动机 41 3.3.1 正规式与正规集 41 3.3.2 确定有限自动机(DFA) 44 3.3.3 非确定有限自动机(NFA) 49 3.4 单元测试 51 四、词汇分析_2 52 4.1正则式和有限自动机的等价 52 五、词法分析_3 59 5.1 DFA的化简 59 六、词法分析_4 62 6.1 词法分析器的自动生成 62 6.2 词法分析程序实现实例 64 七、语法分析—自上而下分析_1 71 7.1 词法分析简介 71 7.2 自顶向下分析简介 73 7.3 消除左递归和回溯 76 八、语法分析—自上而下分析_2 80 8.1 LL(1)分析法 80 8.2 FIRST集和FOLLOW集的构造 82 8.3 单元测试 85 九、语法分析—自上而下分析_3 86 9.1 LL(1)分析表的构造 86 9.2 递归子程序的原理 89 9.3 单元测试 95 十、语法分析—自下而上分析_1 96 10.1 自下而上分析方法的基本思想 96 10.2 分析树与规范规约 99 10.3 符号栈的使用 103 10.4 单元测试 105 十一、语法分析—自下而上分析_2 106 11.1 算符优先文法 106 11.2 优先表构造 109 11.3 算符优先分析算法 112 10.4 单元测试 115 十二、语法分析—自下而上分析_3 116 12.1 LR分析器 116 12.2 LR分析过程 119 12.3 单元测试 132 十三、语法分析—自下而上分析_4 133 13.1 构造识别前缀的DFA 133 13.2 LR(0)项目集规范族构造 140 13.3 由DFA构造LR(0)分析表 146 13.4 单元测试 150 十六、属性文法和语法翻译制导 151 16.1 L-属性文法和自顶向下翻译 151 16.2 自下而上计算继承属性 159 十七、语义分析和中间代码产生_1 166 17.1 语义分析的任务 166 17.2 中间代码的生成 168 17.3 算术表达式和赋值语句 175 17.4 单元测试 178 十八、语义分析和中间代码产生_2 179 18.1 布尔表达式的作用和文法描述 179 18.2 做控制用布尔表达式的翻译(回填) 181 18.3 控制流语句的翻译 186 18.4 控制流语句的翻译(回填) 189 十九、代码优化_1 194 19.1 什么是代码优化 194 19.2 基本块及流图 199 19.3 单元测试 202 二十、代码优化_2 203 20.1 基本块的DAG表示及其作用 203 二十一、重要知识点 213 1. 考试内容及分数分布 213 2. 名词解释 214 3. 简答题 215 4. 结语 216
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值