如何在Antlr4中为不匹配或部分标记创建解析器规则

如何在Antlr4中为不匹配或部分标记创建解析器规则,antlr4,Antlr4,我有(从第109行开始)在IDE中用于收集有关正在编辑的源代码文件(其Z80程序集)的信息 我需要触发一个解析器规则,或者有一个健壮的方法来解释解析树(ErrorNodes),以检测用户输入的不完整/部分文本 我添加了一个“部分”解析器规则,它使用底部定义的任意标记捕获所有字符。然而,这不起作用 我还试着查看解析树,看看是否有某种方法可以编写逻辑(在我的侦听器中)来将其提取出来,但似乎新的部分文本有时甚至没有出现在解析树中…听起来像是孤岛语法。通常的过程(例如,请参阅ANTLR 4书中的“将XM

我有(从第109行开始)在IDE中用于收集有关正在编辑的源代码文件(其Z80程序集)的信息

我需要触发一个解析器规则,或者有一个健壮的方法来解释解析树(ErrorNodes),以检测用户输入的不完整/部分文本

我添加了一个“部分”解析器规则,它使用底部定义的任意标记捕获所有字符。然而,这不起作用


我还试着查看解析树,看看是否有某种方法可以编写逻辑(在我的侦听器中)来将其提取出来,但似乎新的部分文本有时甚至没有出现在解析树中…

听起来像是孤岛语法。通常的过程(例如,请参阅ANTLR 4书中的“将XML孤岛从文本海洋中分离出来”)是先有一个包含有效标记的lexer语法文件,然后是一个catch all。看起来您已经这样做了,所以可以使用intellij插件来查看它是如何标记输入的。语法规则将不得不允许大量的垃圾,如果它是不完整的,正如你所建议的。哦,你需要的是lexer中的catchall而不是解析器。小心不要在解析器中使用
+
。它会吞噬一切可能
+?