switch语句
switch(E)
{
case V1:S1
case V2:S2
default:Sn
}
一个switch语句的预期翻译结果是完成如下工作:
- 计算表达式E的值。
- 在case列表中寻找与表达式值相同的值Vj。如果都不匹配就用默认值和表达式匹配。
- 执行和匹配值关联的语句Sj。
实现这个条件跳转指令序列的一个简介方法是创建一个对照关系表。表中每个关系都包含了一个常量值和相应语句代码的标号。
如果值的个数超过10个或者更多,那么更高效的方式是为这些值构造一个散列表。如果表达式的值位于一个区间(min,max),并且不同值的总数接近max-min。那么可以使用max-min个元素的数组。没有对应值的数组填充为default。
switch语句的翻译
switch语句的翻译有多种方案。详见《编译原理》p270。
CRE:有时三地址代码会使用
case
,而不是相同含义的if goto
,以便在代码生成阶段进行特殊处理来优化性能。
(END)