今天的任务:把一个文法翻译成中间代码。
如何产生任意多个语句?蓝色下标的线
- 赋值语句。掩盖掉细节。
- 今日重点:三条指令的翻译。
- 这三条语句都涉及到大B,为布尔表达式

- 控制流的翻译避免不了对大B的翻译
- 对于break 跳转到什么地方去,嵌套while 返回到上一层
- 重要+难度 控制流语句翻译
- 为什么创造困难?生成更高效的代码
- 简单的方案会产生冗余,如何消除冗余?
- 简单,体现在两点:各个非终结符分工 合作;只需要使用综合属性
在做中间代码生成的时候,心中有树 大局观 自底向上
分工与合作
大S所做的事情 改变分支流
中间代码的实现
- 需要做的事情:

- 实现方式:listeners,visitors,attributes grammer 嵌入到文法中
- 监听者模式的问题:退出socpe的时候实现;但是标签插入时机 不对。 没办法一边解析一边输出 只能缓存
- 访问者:及时输出生成的中间代码,避免频繁字符串拼接。
- 左边和右边生成相对应的中间代码递归
- break 压栈的动作 while false,while开始 入栈 break语句出栈。使用栈结构追踪跳转到哪一层while
- 如何实现短路求值?条件 增加两个标签
