我的问题是关于使用ANTLR 4,关于在使用侦听器和访客之间进行选择。我读过很多Terry Parr的书,但对像我这样的初学者来说并没有多大用处。
背景如下:我有一个由第三方创建的已知好的语法文件。它描述了一种能够描述许多不同事物的语言,但我只对特定信息感兴趣,这意味着我需要制作的工具将从非常大的输入文件中提取某些信息,而忽略其余信息。 复杂的因素是,无法在解析器树的一个遍历中提取此信息,因为它具有层次结构,并引用了树的其他部分。因此,我有一个主要的搜索目标,该目标很可能包含对输入文件中其他位置的子特性的引用。本质上,我试图将完整的分析器树剥离为更小的树。
这是否意味着我应该使用侦听器或访问者,并且应该如何构造搜索?
我可以使用侦听器遍历整个解析器树,直到找到我感兴趣的主要元素,暂时存储对其特征的任何引用。完成后,侦听器将找到所有感兴趣的主要节点。然后,我将启动一个new(?)侦听器来查找我存储的裁判。...这意味着要遍历该树多次。
如果我使用“访问者”来定位主要搜索目标,并且可能不使用新的“子”访问者呼叫来即时搜索每个子特征。 antlr允许吗?您可以在同一棵树上同时激活多个访客和/或听众吗?
我意识到我的问题似乎主要是关于如何构建可在解析器树上使用的搜索算法的,但实际上,这是令我感兴趣的antlr要素。我可以在纸上或伪代码中计算出一个算法,但是由于我需要使用ANTLR4,因此我对该问题的这一方面最感兴趣。
谢谢