访问者 - 依赖于节点的遍历类型的动态变化

时间:2016-12-27 16:23:08

标签: algorithm compiler-construction code-generation visitor-pattern

让我们考虑一下这样的语法:" a>时的情况1然后1其他0"。我必须为这样的表达式生成字节代码。我有AST看起来像:

       -----------------------case----------------
       |                       |                 |
       |                       |                 |
    whenthen-----           whenthen            else
       |        |              |                 |
       |        |              |                 |
      when    then           .....      Numerical expression
       |        |
       |Numerical expression
Boolean expression

一旦我开始在纸上字节代码上写这样的表达式,它就会'开始清楚,代码生成因算术表达式和标签以及跳转代码生成而异。数值或布尔表达式的遍历类型与语法的情况不同,因此我需要在遍历算法之间切换取决于当前访问的节点。

我真的很困惑,如何实现可以动态更改遍历类型的访问者模式,而不是移动遍历accept()方法。我想保持遍历算法与节点分离。如何正确解决这个问题,编译器制造商如何解决它。有什么我可以用来使这个问题更容易解决吗?

0 个答案:

没有答案