zhouqijie

switch语句

switch(E)
{
    case V1:S1
    case V2:S2
    default:Sn
}

一个switch语句的预期翻译结果是完成如下工作:

  1. 计算表达式E的值。
  2. 在case列表中寻找与表达式值相同的值Vj。如果都不匹配就用默认值和表达式匹配。
  3. 执行和匹配值关联的语句Sj。

实现这个条件跳转指令序列的一个简介方法是创建一个对照关系表。表中每个关系都包含了一个常量值和相应语句代码的标号

如果值的个数超过10个或者更多,那么更高效的方式是为这些值构造一个散列表。如果表达式的值位于一个区间(min,max),并且不同值的总数接近max-min。那么可以使用max-min个元素的数组。没有对应值的数组填充为default。

switch语句的翻译

switch语句的翻译有多种方案。详见《编译原理》p270。

CRE:有时三地址代码会使用case,而不是相同含义的if goto,以便在代码生成阶段进行特殊处理来优化性能。

(END)