编译器设计——计算常数值

Compiler Design - Calculating Constant Value

我正在尝试设计一个小型编译器作为一种练习。我还没有读过中间代码优化或任何关于优化的内容。

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

所以我想知道这样做是否正确?或者我应该让代码优化(当我阅读它们时)处理这样的事情吗?

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

更有趣的常量折叠是流分析检测到变量具有已知常量值的结果。这在解析期间肯定很难做到。

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