我是在算符优先文法里实现的&&和||,基本的思路是压栈与弹栈,所以应当在每回第一次读入&&的时候加一个br跳转块,有一些复杂的情况需要讨论一下
在第一次读入&&时,加一行br语句,同时需要存下这行语句的索引,若为真,则跳转到紧随其后的基本块里,若为假,则直接跳出(这个基本块号对应if后面语句块号)
在第一次读入||时,加一行br语句,同时需要存下这行语句的索引,若为真,则直接跳出(对应条件语句后的基本块号),若为假,则跳转到紧随其后的基本块里
(a&&b)||c 应该是进行规约的时候跳转,现在对应
不如我们先看看输出!
想了想 不如直接修改输入 在token流里将包含&& ||改写成控制流
思路: 读到一个&&就加一层 if 同时记录包括原来的在内的}} 弹栈匹配 读到一个|| 就在当前的后的第一个{对应的}后加一层{}
难点难点:{}匹配 如果代码只有一行怎么办?