社区
数据结构与算法
帖子详情
如何判断文法是SLR(1),LR(1),LALR(1),LL(1)
qisinile
2010-06-19 09:56:09
我是菜鸟,希望各位指教~
如何判断文法是SLR(1),LR(1),LALR(1),LL(1)
这些文法都有什么特点啊?
...全文
10325
6
打赏
收藏
如何判断文法是SLR(1),LR(1),LALR(1),LL(1)
我是菜鸟,希望各位指教~ 如何判断文法是SLR(1),LR(1),LALR(1),LL(1) 这些文法都有什么特点啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ytx98
2012-11-15
打赏
举报
回复
说的很好
csuyun
2011-06-11
打赏
举报
回复
操作错误,上面还没写完。。。呵呵
现在看一下他们是怎么分的,错了别怪我,相互学习
LL(1)就是向前只搜索1个符号,即与FIRST()匹配,如果FIRST为空则还要考虑FELLOW。
LR需要构造一张LR分析表,此表用于当面临输入字符时,将它移进,规约(即自下而上分析思想),接受还是出错。
LR(0)找出句柄前缀,构造分析表,然后根据输入符号进行规约。
SLR(1)使用LR(0)时若有冲突,不知道规约,移进,活移进哪一个,所以需要向前搜索,则只把有问题的地方向前搜索一次。
LR(1)1.在每个项目中增加搜索符。2.举个列子如有A->α.Bβ,则还需将B的规则也加入。
LALR(1)就是假如两个产生式集相同则将它们合并为一个,几合并同心集。
我认为LR(1),SLR(1),LALR(1)只是对LR(0)的一种更全面的分析与考虑,关键先把LR(0)搞懂。
csuyun
2011-06-11
打赏
举报
回复
1.首先LL(1)分析法是自上而下的分析法。LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法。
2.自上而下?从开始符号出发,根据产生式规则推导给定的句子。
3.自下而上?从给定的句子规约到文法的开始符号。
4.自上而下就是一种试探过程,怎么试探?需要你写出它的FIRST()集与FOLLOW()集(不会写了自己查书上网搜)。写出这两个集合后根据LL(1)分析表构造规则画出LL(1)分析表。现在基本完成了大半,当计算机输入句子时,分析程序便会根据输入去和分析表进行匹配,如果每步都能够匹配成功则说明符合该语法规则,分析成功。
FIRST()集?其实是终结符的集合,看该非终结符A能不能产生以它里面的某个符号开头的句子。(这也是自上而下分析法的思想)
5.自下而上就是把句子变成非终结符,在把非终结符变成非终结符,这样不断的进行如果能到根节点则成功。
woyidingyaojiayou
2011-05-28
打赏
举报
回复
LR(0)文法的入口和出口必须唯一,不存在移进——规约和规约——规约冲突。
budweiser
2010-06-20
打赏
举报
回复
这个不是三言两语能说的清楚的啊 建议楼主找本 编译原理 看下
gbb21
2010-06-20
打赏
举报
回复
[Quote=引用楼主 qisinile 的回复:]
我是菜鸟,希望各位指教~
如何判断文法是SLR(1),LR(1),LALR(1),LL(1)
这些文法都有什么特点啊?
[/Quote]
基本上是你能写出那个文法的parser表,并且基本变换之后没有冲突的就是那个文法。
P.S. 我只用 LL(n)
杭电编译原理样卷一及答案.pdf
试卷选择个正规语言只能对应(B)?A一个正规
文法
B一个最小有限状态自动机2
文法
G[A]:A→EA→aBB→AbB→a是(B):A正规
文法
;B二型
文法
3.下面说法正确的是(AA一个
S
LR
(1)
文法
一定也是
LA
LR
(1)
文法
B一个
LR
(1)
文法
一定也是
LA
LR
(1)
文法
4.一个上下文无关
文法
消除了左递归,提取了左公共因子后是满足
LL
(1)
文法
的(A)A必要条件B充分必要条件
2020最新南开大学编译原理期末复习知识点总结
吐血整理,老师上课的全部知识,34页全部罗列:程序设计语言,状态图,有限状态机,词法分析,正则表达式,Thompson构造法,上下文无关
文法
预测分析表,FIRST集:所有产生式右边的第一个终结符 FO
LL
OW集。。。若
文法
G的预测分析表M中不含有多重定义项,则称G为
LL
(1)
文法
LR
分析方法:当前最广义的无回溯的“移进- 归约”方法,构造
LR
(0)时候可能会出现移进归约冲突或者归约归约冲突,因此需要
S
LR
(1)分析,
LA
LR
分析法与
S
LR
相类似,但功能比
S
LR
(1)强,比
LR
(1)弱,
LA
LR
分析表比LR表要小得多。第五章语法制导翻译,第六章中间代码生成,第七章运行时刻环境
编译原理中文版
目 录 译者序 前言 第1章 概论 1 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY编译器 15 1.7.3 TM机 17 1.8 C-Minus:编译器项目的一种语言 18 练习 19 注意与参考 20 第2章 词法分析 21 2.1 扫描处理 21 2.2 正则表达式 23 2.2.1 正则表达式的定义 23 2.2.2 正则表达式的扩展 27 2.2.3 程序设计语言记号的正则表达式 29 2.3 有穷自动机 32 2.3.1 确定性有穷自动机的定义 32 2.3.2 先行、回溯和非确定性自动机 36 2.3.3 用代码实现有穷自动机 41 2.4 从正则表达式到DFA 45 2.4.1 从正则表达式到NFA 45 2.4.2 从NFA到DFA 48 2.4.3 利用子集构造模拟NFA 50 2.4.4 将DFA中的状态数最小化 51 2.5 TINY扫描程序的实现 52 2.5.1 为样本语言TINY实现一个扫描 程序 53 2.5.2 保留字与标识符 56 2.5.3 为标识符分配空间 57 2.6 利用Lex 自动生成扫描程序 57 2.6.1 正则表达式的Lex 约定 58 2.6.2 Lex输入文件的格式 59 2.6.3 使用Lex的TINY扫描程序 64 练习 65 编程练习 67 注意与参考 67 第3章 上下文无关
文法
及分析 69 3.1 分析过程 69 3.2 上下文无关
文法
70 3.2.1 与正则表达式比较 70 3.2.2 上下文无关
文法
规则的说明 71 3.2.3 推导及由
文法
定义的语言 72 3.3 分析树与抽象语法树 77 3.3.1 分析树 77 3.3.2 抽象语法树 79 3.4 二义性 83 3.4.1 二义性
文法
83 3.4.2 优先权和结合性 85 3.4.3 悬挂else问题 87 3.4.4 无关紧要的二义性 89 3.5 扩展的表示法:EBNF和语法图 89 3.5.1 EBNF表示法 89 3.5.2 语法图 91 3.6 上下文无关语言的形式特性 93 3.6.1 上下文无关语言的形式定义 93 3.6.2
文法
规则和等式 94 3.6.3 乔姆斯基层次和作为上下文无关 规则的语法局限 95 3.7 TINY语言的语法 97 3.7.1 TINY的上下文无关
文法
97 3.7.2 TINY编译器的语法树结构 98 练习 101 注意与参考 104 第4章 自顶向下的分析 105 4.1 使用递归下降分析算法进行自顶向下 的分析 105 4.1.1 递归下降分析的基本方法 105 4.1.2 重复和选择:使用EBNF 107 4.1.3 其他决定问题 112 4.2
LL
(1)分析 113 4.2.1
LL
(1)分析的基本方法 113 4.2.2
LL
(1)分析与算法 114 4.2.3 消除左递归和提取左因子 117 4.2.4 在
LL
(1)分析中构造语法树 124 4.3 First集合和Fo
ll
ow集合 125 4.3.1 First 集合 125 4.3.2 Fo
ll
ow 集合 130 4.3.3 构造
LL
(1)分析表 134 4.3.4 再向前:
LL
(k)分析程序 135 4.4 TINY语言的递归下降分析程序 136 4.5 自顶向下分析程序中的错误校正 137 4.5.1 在递归下降分析程序中的错误 校正 138 4.5.2 在
LL
(1)分析程序中的错误校正 140 4.5.3 在TINY分析程序中的错误校正 141 练习 143 编程练习 146 注意与参考 148 第5章 自底向上的分析 150 5.1 自底向上分析概览 151 5.2
LR
(0)项的有穷自动机与
LR
(0)分析 153 5.2.1
LR
(0)项 153 5.2.2 项目的有穷自动机 154 5.2.3
LR
(0)分析算法 157 5.3
S
LR
(1)分析 160 5.3.1
S
LR
(1)分析算法 160 5.3.2 用于分析冲突的消除二义性 规则 163 5.3.3
S
LR
(1)分析能力的局限性 164 5.3.4
S
LR
(k)
文法
165 5.4 一般的
LR
(1)和
LA
LR
(1)分析 166 5.4.1
LR
(1)项的有穷自动机 166 5.4.2
LR
(1)分析算法 169 5.4.3
LA
LR
(1)分析 171 5.5 Yacc:一个
LA
LR
(1)分析程序的 生成器 173 5.5.1 Yacc基础 173 5.5.2 Yacc选项 176 5.5.3 分析冲突与消除二义性的规则 180 5.5.4 描述Yacc分析程序的执行 183 5.5.5 Yacc中的任意值类型 184 5.5.6 Yacc中嵌入的动作 185 5.6 使用Yacc生成TINY分析程序 186 5.7 自底向上分析程序中的错误校正 188 5.7.1 自底向上分析中的错误检测 188 5.7.2 应急方式错误校正 188 5.7.3 Yacc中的错误校正 189 5.7.4 TINY中的错误校正 192 练习 192 编程练习 195 注意与参考 197 第6章 语义分析 198 6.1 属性和属性
文法
199 6.1.1 属性
文法
200 6.1.2 属性
文法
的简化和扩充 206 6.2 属性计算算法 207 6.2.1 相关图和赋值顺序 208 6.2.2 合成和继承属性 212 6.2.3 作为参数和返回值的属性 219 6.2.4 使用扩展数据结构存储属性值 221 6.2.5 语法分析时属性的计算 223 6.2.6 语法中属性计算的相关性 226 6.3 符号表 227 6.3.1 符号表的结构 228 6.3.2 说明 230 6.3.3 作用域规则和块结构 232 6.3.4 同层说明的相互作用 236 6.3.5 使用符号表的属性
文法
的一个 扩充例子 237 6.4 数据类型和类型检查 241 6.4.1 类型表达式和类型构造器 242 6.4.2 类型名、类型说明和递归类型 246 6.4.3 类型等价 248 6.4.4 类型推论和类型检查 253 6.4.5 类型检查的其他主题 255 6.5 TINY语言的语义分析 257 6.5.1 TINY的符号表 258 6.5.2 TINY语义分析程序 259 练习 260 编程练习 264 注意与参考 264 第7章 运行时环境 266 7.1 程序执行时的存储器组织 266 7.2 完全静态运行时环境 269 7.3 基于栈的运行时环境 271 7.3.1 没有局部过程的基于栈的环境 271 7.3.2 带有局部过程的基于栈的环境 281 7.3.3 带有过程参数的基于栈的环境 284 7.4 动态存储器 286 7.4.1 完全动态运行时环境 286 7.4.2 面向对象的语言中的动态存储器 287 7.4.3 堆管理 289 7.4.4 堆的自动管理 292 7.5 参数传递机制 292 7.5.1 值传递 293 7.5.2 引用传递 294 7.5.3 值结果传递 295 7.5.4 名字传递 295 7.6 TINY语言的运行时环境 296 练习 297 编程练习 303 注意与参考 304 第8章 代码生成 305 8.1 中间代码和用于代码生成的数据 结构 305 8.1.1 三地址码 306 8.1.2 用于实现三地址码的数据结构 308 8.1.3 P-代码 310 8.2 基本的代码生成技术 312 8.2.1 作为合成属性的中间代码或目标 代码 312 8.2.2 实际的代码生成 314 8.2.3 从中间代码生成目标代码 317 8.3 数据结构引用的代码生成 319 8.3.1 地址计算 319 8.3.2 数组引用 320 8.3.3 栈记录结构和指针引用 325 8.4 控制语句和逻辑表达式的代码生成 328 8.4.1 if 和while 语句的代码生成 328 8.4.2 标号的生成和回填 330 8.4.3 逻辑表达式的代码生成 330 8.4.4 if 和while 语句的代码生成过程 样例 331 8.5 过程和函数调用的代码生成 334 8.5.1 过程和函数的中间代码 334 8.5.2 函数定义和调用的代码生成过程 336 8.6 商用编译器中的代码生成:两个案 例研究 339 8.6.1 对于80×86的Borland 3.0版C编 译器 339 8.6.2 Sun SparcStation的Sun 2.0 C编 译器 343 8.7 TM:简单的目标机器 346 8.7.1 Tiny Machine的基本结构 347 8.7.2 TM模拟器 349 8.8 TINY语言的代码生成器 351 8.8.1 TINY代码生成器的TM接口 351 8.8.2 TINY代码生成器 352 8.8.3 用TINY编译器产生和使用TM 代码文件 354 8.8.4 TINY编译器生成的TM代码文 件示例 355 8.9 代码优化技术考察 357 8.9.1 代码优化的主要来源 358 8.9.2 优化分类 360 8.9.3 优化的数据结构和实现技术 362 8.10 TINY代码生成器的简单优化 366 8.10.1 将临时变量放入寄存器 366 8.10.2 在寄存器中保存变量 367 8.10.3 优化测试表达式 367 练习 368 编程练习 371 注意与参考 372 附录A 编译器设计方案 373 附录B 小型编译器列表 381 附录C Tiny Machine模拟器列表 417
《编译原理及实践》电子书下载
目 录 译者序 前言 第1章 概论 1 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY编译器 15 1.7.3 TM机 17 1.8 C-Minus:编译器项目的一种语言 18 练习 19 注意与参考 20 第2章 词法分析 21 2.1 扫描处理 21 2.2 正则表达式 23 2.2.1 正则表达式的定义 23 2.2.2 正则表达式的扩展 27 2.2.3 程序设计语言记号的正则表达式 29 2.3 有穷自动机 32 2.3.1 确定性有穷自动机的定义 32 2.3.2 先行、回溯和非确定性自动机 36 2.3.3 用代码实现有穷自动机 41 2.4 从正则表达式到DFA 45 2.4.1 从正则表达式到NFA 45 2.4.2 从NFA到DFA 48 2.4.3 利用子集构造模拟NFA 50 2.4.4 将DFA中的状态数最小化 51 2.5 TINY扫描程序的实现 52 2.5.1 为样本语言TINY实现一个扫描 程序 53 2.5.2 保留字与标识符 56 2.5.3 为标识符分配空间 57 2.6 利用Lex 自动生成扫描程序 57 2.6.1 正则表达式的Lex 约定 58 2.6.2 Lex输入文件的格式 59 2.6.3 使用Lex的TINY扫描程序 64 练习 65 编程练习 67 注意与参考 67 第3章 上下文无关
文法
及分析 69 3.1 分析过程 69 3.2 上下文无关
文法
70 3.2.1 与正则表达式比较 70 3.2.2 上下文无关
文法
规则的说明 71 3.2.3 推导及由
文法
定义的语言 72 3.3 分析树与抽象语法树 77 3.3.1 分析树 77 3.3.2 抽象语法树 79 3.4 二义性 83 3.4.1 二义性
文法
83 3.4.2 优先权和结合性 85 3.4.3 悬挂else问题 87 3.4.4 无关紧要的二义性 89 3.5 扩展的表示法:EBNF和语法图 89 3.5.1 EBNF表示法 89 3.5.2 语法图 91 3.6 上下文无关语言的形式特性 93 3.6.1 上下文无关语言的形式定义 93 3.6.2
文法
规则和等式 94 3.6.3 乔姆斯基层次和作为上下文无关 规则的语法局限 95 3.7 TINY语言的语法 97 3.7.1 TINY的上下文无关
文法
97 3.7.2 TINY编译器的语法树结构 98 练习 101 注意与参考 104 第4章 自顶向下的分析 105 4.1 使用递归下降分析算法进行自顶向下 的分析 105 4.1.1 递归下降分析的基本方法 105 4.1.2 重复和选择:使用EBNF 107 4.1.3 其他决定问题 112 4.2
LL
(1)分析 113 4.2.1
LL
(1)分析的基本方法 113 4.2.2
LL
(1)分析与算法 114 4.2.3 消除左递归和提取左因子 117 4.2.4 在
LL
(1)分析中构造语法树 124 4.3 First集合和Fo
ll
ow集合 125 4.3.1 First 集合 125 4.3.2 Fo
ll
ow 集合 130 4.3.3 构造
LL
(1)分析表 134 4.3.4 再向前:
LL
(k)分析程序 135 4.4 TINY语言的递归下降分析程序 136 4.5 自顶向下分析程序中的错误校正 137 4.5.1 在递归下降分析程序中的错误 校正 138 4.5.2 在
LL
(1)分析程序中的错误校正 140 4.5.3 在TINY分析程序中的错误校正 141 练习 143 编程练习 146 注意与参考 148 第5章 自底向上的分析 150 5.1 自底向上分析概览 151 5.2
LR
(0)项的有穷自动机与
LR
(0)分析 153 5.2.1
LR
(0)项 153 5.2.2 项目的有穷自动机 154 5.2.3
LR
(0)分析算法 157 5.3
S
LR
(1)分析 160 5.3.1
S
LR
(1)分析算法 160 5.3.2 用于分析冲突的消除二义性 规则 163 5.3.3
S
LR
(1)分析能力的局限性
《编译原理》 清华 第二版
目 录 译者序 前言 第1章 概论 1 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY编译器 15 1.7.3 TM机 17 1.8 C-Minus:编译器项目的一种语言 18 练习 19 注意与参考 20 第2章 词法分析 21 2.1 扫描处理 21 2.2 正则表达式 23 2.2.1 正则表达式的定义 23 2.2.2 正则表达式的扩展 27 2.2.3 程序设计语言记号的正则表达式 29 2.3 有穷自动机 32 2.3.1 确定性有穷自动机的定义 32 2.3.2 先行、回溯和非确定性自动机 36 2.3.3 用代码实现有穷自动机 41 2.4 从正则表达式到DFA 45 2.4.1 从正则表达式到NFA 45 2.4.2 从NFA到DFA 48 2.4.3 利用子集构造模拟NFA 50 2.4.4 将DFA中的状态数最小化 51 2.5 TINY扫描程序的实现 52 2.5.1 为样本语言TINY实现一个扫描 程序 53 2.5.2 保留字与标识符 56 2.5.3 为标识符分配空间 57 2.6 利用Lex 自动生成扫描程序 57 2.6.1 正则表达式的Lex 约定 58 2.6.2 Lex输入文件的格式 59 2.6.3 使用Lex的TINY扫描程序 64 练习 65 编程练习 67 注意与参考 67 第3章 上下文无关
文法
及分析 69 3.1 分析过程 69 3.2 上下文无关
文法
70 3.2.1 与正则表达式比较 70 3.2.2 上下文无关
文法
规则的说明 71 3.2.3 推导及由
文法
定义的语言 72 3.3 分析树与抽象语法树 77 3.3.1 分析树 77 3.3.2 抽象语法树 79 3.4 二义性 83 3.4.1 二义性
文法
83 3.4.2 优先权和结合性 85 3.4.3 悬挂else问题 87 3.4.4 无关紧要的二义性 89 3.5 扩展的表示法:EBNF和语法图 89 3.5.1 EBNF表示法 89 3.5.2 语法图 91 3.6 上下文无关语言的形式特性 93 3.6.1 上下文无关语言的形式定义 93 3.6.2
文法
规则和等式 94 3.6.3 乔姆斯基层次和作为上下文无关 规则的语法局限 95 3.7 TINY语言的语法 97 3.7.1 TINY的上下文无关
文法
97 3.7.2 TINY编译器的语法树结构 98 练习 101 注意与参考 104 第4章 自顶向下的分析 105 4.1 使用递归下降分析算法进行自顶向下 的分析 105 4.1.1 递归下降分析的基本方法 105 4.1.2 重复和选择:使用EBNF 107 4.1.3 其他决定问题 112 4.2
LL
(1)分析 113 4.2.1
LL
(1)分析的基本方法 113 4.2.2
LL
(1)分析与算法 114 4.2.3 消除左递归和提取左因子 117 4.2.4 在
LL
(1)分析中构造语法树 124 4.3 First集合和Fo
ll
ow集合 125 4.3.1 First 集合 125 4.3.2 Fo
ll
ow 集合 130 4.3.3 构造
LL
(1)分析表 134 4.3.4 再向前:
LL
(k)分析程序 135 4.4 TINY语言的递归下降分析程序 136 4.5 自顶向下分析程序中的错误校正 137 4.5.1 在递归下降分析程序中的错误 校正 138 4.5.2 在
LL
(1)分析程序中的错误校正 140 4.5.3 在TINY分析程序中的错误校正 141 练习 143 编程练习 146 注意与参考 148 第5章 自底向上的分析 150 5.1 自底向上分析概览 151 5.2
LR
(0)项的有穷自动机与
LR
(0)分析 153 5.2.1
LR
(0)项 153 5.2.2 项目的有穷自动机 154 5.2.3
LR
(0)分析算法 157 5.3
S
LR
(1)分析 160 5.3.1
S
LR
(1)分析算法 160 5.3.2 用于分析冲突的消除二义性 规则 163 5.3.3
S
LR
(1)分析能力的局限性 164 5.3.4
S
LR
(k)
文法
165 5.4 一般的
LR
(1)和
LA
LR
(1)分析 166 5.4.1
LR
(1)项的有穷自动机 166 5.4.2
LR
(1)分析算法 169 5.4.3
LA
LR
(1)分析 171 5.5 Yacc:一个
LA
LR
(1)分析程序的 生成器 173 5.5.1 Yacc基础 173 5.5.2 Yacc选项 176 5.5.3 分析冲突与消除二义性的规则 180 5.5.4 描述Yacc分析程序的执行 183 5.5.5 Yacc中的任意值类型 184 5.5.6 Yacc中嵌入的动作 185 5.6 使用Yacc生成TINY分析程序 186 5.7 自底向上分析程序中的错误校正 188 5.7.1 自底向上分析中的错误检测 188 5.7.2 应急方式错误校正 188 5.7.3 Yacc中的错误校正 189 5.7.4 TINY中的错误校正 192 练习 192 编程练习 195 注意与参考 197 第6章 语义分析 198 6.1 属性和属性
文法
199 6.1.1 属性
文法
200 6.1.2 属性
文法
的简化和扩充 206 6.2 属性计算算法 207 6.2.1 相关图和赋值顺序 208 6.2.2 合成和继承属性 212 6.2.3 作为参数和返回值的属性 219 6.2.4 使用扩展数据结构存储属性值 221 6.2.5 语法分析时属性的计算 223 6.2.6 语法中属性计算的相关性 226 6.3 符号表 227 6.3.1 符号表的结构 228 6.3.2 说明 230 6.3.3 作用域规则和块结构 232 6.3.4 同层说明的相互作用 236 6.3.5 使用符号表的属性
文法
的一个 扩充例子 237 6.4 数据类型和类型检查 241 6.4.1 类型表达式和类型构造器 242 6.4.2 类型名、类型说明和递归类型 246 6.4.3 类型等价 248 6.4.4 类型推论和类型检查 253 6.4.5 类型检查的其他主题 255 6.5 TINY语言的语义分析 257 6.5.1 TINY的符号表 258 6.5.2 TINY语义分析程序 259 练习 260 编程练习 264 注意与参考 264 第7章 运行时环境 266 7.1 程序执行时的存储器组织 266 7.2 完全静态运行时环境 269 7.3 基于栈的运行时环境 271 7.3.1 没有局部过程的基于栈的环境 271 7.3.2 带有局部过程的基于栈的环境 281 7.3.3 带有过程参数的基于栈的环境 284 7.4 动态存储器 286 7.4.1 完全动态运行时环境 286 7.4.2 面向对象的语言中的动态存储器 287 7.4.3 堆管理 289 7.4.4 堆的自动管理 292 7.5 参数传递机制 292 7.5.1 值传递 293 7.5.2 引用传递 294 7.5.3 值结果传递 295 7.5.4 名字传递 295 7.6 TINY语言的运行时环境 296 练习 297 编程练习 303 注意与参考 304 第8章 代码生成 305 8.1 中间代码和用于代码生成的数据 结构 305 8.1.1 三地址码 306 8.1.2 用于实现三地址码的数据结构 308 8.1.3 P-代码 310 8.2 基本的代码生成技术 312 8.2.1 作为合成属性的中间代码或目标 代码 312 8.2.2 实际的代码生成 314 8.2.3 从中间代码生成目标代码 317 8.3 数据结构引用的代码生成 319 8.3.1 地址计算 319 8.3.2 数组引用 320 8.3.3 栈记录结构和指针引用 325 8.4 控制语句和逻辑表达式的代码生成 328 8.4.1 if 和while 语句的代码生成 328 8.4.2 标号的生成和回填 330 8.4.3 逻辑表达式的代码生成 330 8.4.4 if 和while 语句的代码生成过程 样例 331 8.5 过程和函数调用的代码生成 334 8.5.1 过程和函数的中间代码 334 8.5.2 函数定义和调用的代码生成过程 336 8.6 商用编译器中的代码生成:两个案 例研究 339 8.6.1 对于80×86的Borland 3.0版C编 译器 339 8.6.2 Sun SparcStation的Sun 2.0 C编 译器 343 8.7 TM:简单的目标机器 346 8.7.1 Tiny Machine的基本结构 347 8.7.2 TM模拟器 349 8.8 TINY语言的代码生成器 351 8.8.1 TINY代码生成器的TM接口 351 8.8.2 TINY代码生成器 352 8.8.3 用TINY编译器产生和使用TM 代码文件 354 8.8.4 TINY编译器生成的TM代码文 件示例 355 8.9 代码优化技术考察 357 8.9.1 代码优化的主要来源 358 8.9.2 优化分类 360 8.9.3 优化的数据结构和实现技术 362 8.10 TINY代码生成器的简单优化 366 8.10.1 将临时变量放入寄存器 366 8.10.2 在寄存器中保存变量 367 8.10.3 优化测试表达式 367 练习 368 编程练习 371 注意与参考 372 附录A 编译器设计方案 373 附录B 小型编译器列表 381 附录C Tiny Machine模拟器列表 417
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章