控制语句的翻译
![](https://i-blog.csdnimg.cn/blog_migrate/a6da27edcae606a4e791a838ab2d93d8.png)
if语句的属性文法![](https://i-blog.csdnimg.cn/blog_migrate/d01371c16c2a605624cf8a68d94aff72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ac49c3c933e6e8089c70c77dfbbe167d.png)
while语句的属性文法
![](https://i-blog.csdnimg.cn/blog_migrate/c187aa0b3104652888b961255a346adb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e9932e87e53990f81865f48521dd4bdb.png)
控制语句的属性计算示例
多遍扫描,第一遍建立语法树,第二遍至上而下地计算继承属性,第三遍至下而上地计算综合属性
if语句的一遍扫描翻译![](https://i-blog.csdnimg.cn/blog_migrate/23d1b6865a207b210e902475403a9978.png)
与布尔表达式类似,需要M记录下一个四元式的地址。如果当时不记录,等到要用这两个产生式进行归约,生成if语句的时候,就无法知道前面翻译生成S1和S2的第一个四元式的地址
backpatch:回填
while语句的一遍扫描翻译![](https://i-blog.csdnimg.cn/blog_migrate/f64f545343f1440887b8d7bc879bf175.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04df8c6c9d6d76b881aa177ea7aab437.png)
复合语句的一遍扫描翻译
赋值语句A,如果规约成s,就清空新规约后的S的nextlist,因为赋值语句没有需要回填的四元式
一遍扫描到译控制语句示例![](https://i-blog.csdnimg.cn/blog_migrate/3104b019f6b6db3eba7df297cb8723bb.png)
小结