让我们考虑一下这样的语法:" a>时的情况1然后1其他0"。我必须为这样的表达式生成字节代码。我有AST看起来像:
-----------------------case----------------
| | |
| | |
whenthen----- whenthen else
| | | |
| | | |
when then ..... Numerical expression
| |
|Numerical expression
Boolean expression
一旦我开始在纸上字节代码上写这样的表达式,它就会'开始清楚,代码生成因算术表达式和标签以及跳转代码生成而异。数值或布尔表达式的遍历类型与语法的情况不同,因此我需要在遍历算法之间切换取决于当前访问的节点。
我真的很困惑,如何实现可以动态更改遍历类型的访问者模式,而不是移动遍历accept()方法。我想保持遍历算法与节点分离。如何正确解决这个问题,编译器制造商如何解决它。有什么我可以用来使这个问题更容易解决吗?