我正在尝试将一个小编译器设计为一种实践形式。我还没有读过中间代码优化或有关优化的任何内容。
到目前为止,我有一个描述语法的FLEX / BISON文件,我的表达式运行正常。在这样做时,我认为我应该有一个常量表达式,并为它们的常量等价物重复所有加法和乘法表达式,并在解析它时计算它们的值。
所以我想知道这是否是正确的做法?或者我应该让代码优化(当我读入它们时)处理这样的东西?
答案 0 :(得分:3)
您可以在代码优化期间做得更好。例如,3 + a + 39
可以优化到a + 42
(无论如何都是无符号整数算术),但在解析过程中检测它并不容易。
更有趣的常量折叠是流量分析检测到变量具有已知常量值的结果。在解析过程中这很难做到。
所以总的来说,最好让解析器解析,并在语义分析期间和之后执行优化。