首页 > 解决方案 > 如何最好地使用具有 ANTLR4 的侦听器而不会使代码变得混乱?

问题描述

我正在使用 Antlr4 解析语法并使用侦听器生成字节码。当我实现我的第一个 IF-ELSE-ENDIF 指令集时,事情开始变得有点复杂,因为我必须确保维护上下文信息堆栈来处理诸如嵌套 ID 语句及其范围之类的事情。

现在,我已准备好处理在 IF 中组合的多个条件,以便在遇到评估为假的条件时立即停止评估。问题是我注意到我的代码变得复杂且难以理解。我几乎无法按原样跟踪它,并且会同情其他任何人看着它。这是因为我发现我必须在父节点上设置标志和上下文信息,以让子节点知道如何处理它们从评估中产生的结果。

我想到了一些可以简化事情的可能性:

1) 使用侦听器只做一棵自定义树,其中包含我一路上需要的重要信息,这样我就可以在我认为合适的树上来回走动。走这样一棵树会使我的代码不那么混乱,因为我保存在树节点中的上下文信息将替换我目前保存在堆栈和结构中的信息。

2)创建多个监听器,每个监听器都有一个特定的焦点;即,IF 和 ELSE 外壳内的代码块、多个条件评估等。这个想法是,当我遍历主侦听器时,我用我的代码输入(例如,IF 块内的所有内容)调用一个专业侦听器,然后返回然后我可以在继续生成指令时使用这些信息。

3)回顾我是如何做事的——也许事情很乱,因为我用错了监听器。见鬼,也许我需要继续使用访客。

我意识到我可以通过行动解决其中一些问题。如果没有其他选择,我可能会诉诸于此,但如果可能的话,我会尽量避免这种情况。

标签: antlr4

解决方案


推荐阅读