控制流
Last updated
Last updated
生成的代码执行时跳转到两个标号之一:
表达式的值为真时,跳转到B.true
表达式的值为假时,跳转到B.false
B.true和B.false是两个继承属性,根据B所在的上下文指向不同的位置
如果B是if语句条件表达式,分别指向then和else分支;如果,则B.false指向if语句的下一个指令
如果B是while语句的条件表达式,分别指向循环体的开头和循环体的出口处
控制流语句:
继承属性:
B.true:B为真时的跳转目标
B.false:B为假时的跳转目标
S.next:S执行完毕时的跳转目标
布尔表达式可以用于改变控制流/计算逻辑值
文法:
语义:和布尔表达式的计算结果一致
短路求值:
通过跳转指令实现控制流,逻辑运算符本身不出现
B1||B2中B1为真时,无需计算B2,整个表达式为真,因为,当B1为真时应该跳过B2的代码
B1&&B2中B1为假时,无需计算B2,整个表达式为假,因此,当B1为假时应该跳过B2的代码
程序中出现布尔表达式也可能是求值:x = a < b
处理方法:建立表达式的语法树,根据表达式的不同角色来处理。
文法:
根据B的语法树结点所在的位置:
S->while(B) S1中的B,生成跳转代码
对于S->id=B,生成计算右值的代码