第42讲 LALR分析
合并go to表没有什么问题
同心项目即栈内的符号相同,而将终结符规约后得到的符号与栈内符号可以规约到同一个产生式。
但是这样带来的问题是,以为产生式的不同,而不知道具体使用哪一个进行规约。
构造LALR分析表,首先要构造LR1项目集族
要注意的是规约与出错冲突
LALR基本已经看不懂了
重点:
1. LR0项目集族的构造 没有展望符号 LR0 SLR(引入first集合和follow集合) 二义
2. LR1项目集族的构造 LR1 (靠展望信息)LALR(合并同心)
SLR LR0 LR1 LALR
第44讲 语法制导翻译
在语法分析的同时,进行翻译
语义栈、状态栈、符号栈都是下推栈的三个属性
不需要value,因为这些值实际上都是语义栈的栈顶值
非终结符才有语义
第45讲
不用变量的地址,因为从地址只能取到值,采用符号表入口地址可以找到变量类型,方便类型转换。
语义值究竟是什么?为什么T是语义值?
调用相应的产生式进行规约,就同时用相应的语义子程序进行规约。
place栈就是语义栈
在语法栈进行规约时,使用语义栈进行对数据的处理。
i是一个变量,终结符,没有语义值,直接把i复制给E即可。(我怀疑是立即数)
为了减少运算量,进行优化
其实主要解决的就是代码是顺序写出来的,如果实现bool表达式,需要跳转。
47讲 48讲第6章习题课
第49讲,bool表达式回填,不懂
第51讲 while语句
在标志符表中会指明变量的类型,如果是数组,则会有一个指向内情向量表的地址。
先产生可变部分,然后与不变部分计算后,即可得到数组索引
第53讲