2016-10-12 47 views
0

我试图设计一个小型编译器作为练习的一种形式。我还没有读到中间代码优化或任何有关优化。编译器设计 - 计算常量值

到目前为止,我有一个描述语法的FLEX/BISON文件,我的表达式工作正常。在这样做的时候,我认为我应该像一个常量表达式,并且重复所有加法和乘法表达式来表示它们的常量等值,并在解析它们时计算它们的值。

所以我想知道这是否是正确的做法?或者我应该让代码优化(当我读到他们)处理这样的东西?

回答

3

您可以在代码优化期间做得更好。例如,3 + a + 39可优化为a + 42(对于无符号整数算术,无论如何),但在解析过程中检测并不容易。

更有趣的恒定折叠是您的流量分析检测到变量具有已知恒定值的结果。这在解析过程中确实很难做到。

因此,总的来说,最好让解析器解析并在语义分析期间和之后执行优化。