一个通过 C 编译器如何处理标签?
How one pass C compiler deal with labels?
有时在声明之前使用标签,例如:
void test() {
goto label;
label: return;
}
当一次性编译器解析第一个语句时,它不知道标签在哪里,直到 label:
语句出现。
由于一次编译器只解析一次代码,所以没有办法让 label
独自一人稍后再回来,对吗?
那么在一个编译器中处理这个问题的通常方法是什么?
两种可能性:
回贴。使用生成的分支操作中的目标地址字段来创建一个 linked 标签未解析使用列表,将列表的头部放在标签符号 table 中。定义标签后,遍历列表,用正确的值覆盖 ("patching") 每个 link。
如果允许生成符号汇编代码,只输出标签名,让汇编程序处理即可。
有时在声明之前使用标签,例如:
void test() {
goto label;
label: return;
}
当一次性编译器解析第一个语句时,它不知道标签在哪里,直到 label:
语句出现。
由于一次编译器只解析一次代码,所以没有办法让 label
独自一人稍后再回来,对吗?
那么在一个编译器中处理这个问题的通常方法是什么?
两种可能性:
回贴。使用生成的分支操作中的目标地址字段来创建一个 linked 标签未解析使用列表,将列表的头部放在标签符号 table 中。定义标签后,遍历列表,用正确的值覆盖 ("patching") 每个 link。
如果允许生成符号汇编代码,只输出标签名,让汇编程序处理即可。