Java ANTLR是否提供这些功能?

Java ANTLR是否提供这些功能?,java,parsing,antlr,antlr4,dsl,Java,Parsing,Antlr,Antlr4,Dsl,我创建了一个通用解析器,它在代码行方面相当小,但我已经能够成功地用于我的目的。它可以处理递归语法,性能良好,支持正则表达式,允许正常的标记化模式或上下文特定的标记化,这反过来又允许冲突的标记在语法中正常工作,等等 由于ANTLR的整体流行性,我认为可能值得更多地了解它,也许我已经重新发明了轮子,但在进行时间投资之前,我想知道它是否可以做一些与我的解析器目前提供给我的相同的事情。不幸的是,我没有找到足够全面的功能列表,至少没有一个能够回答我下面提出的问题 ANTR是否提供以下功能 我的解析器旨在帮

我创建了一个通用解析器,它在代码行方面相当小,但我已经能够成功地用于我的目的。它可以处理递归语法,性能良好,支持正则表达式,允许正常的标记化模式或上下文特定的标记化,这反过来又允许冲突的标记在语法中正常工作,等等

由于ANTLR的整体流行性,我认为可能值得更多地了解它,也许我已经重新发明了轮子,但在进行时间投资之前,我想知道它是否可以做一些与我的解析器目前提供给我的相同的事情。不幸的是,我没有找到足够全面的功能列表,至少没有一个能够回答我下面提出的问题

ANTR是否提供以下功能

我的解析器旨在帮助代码完成,就像您所说的那样 将在IDE中看到。当解析输入失败时,它总是给出 它应该在发生故障的地方匹配的可能标记。A. 类似的特性是递归规则,当存在 成功解析输入我可以获得有关可能的 如果我要有更长的输入时间,或者如果我要在代码完成方面继续输入,我必须满足的规则

从我对ANTLR的了解来看,它似乎支持一位访客 图案我的解析器实际上也使用了访问者模式,但是 提供有关匹配的某些上下文,例如具有匹配的堆栈 深度信息等。例如,如果一种语言 允许嵌套函数的函数我的访问者方法允许我 只处理我关心的级别中的函数。我还假设它提供了匹配的开始和结束索引

我的解析器支持正则表达式,并与特定于上下文的 标记化模式我可以使一些语法大大缩小,但代价是一些性能,对于DSL来说,这一点都不差。这方面的一个例子是,我可以有一个与单词is匹配的标记,另一个与模式\w+匹配的标记,并且单词is将根据上下文转换为适当的标记,即使这两个标记都可以与单词is匹配。ANTR是否支持正则表达式或类似于此上下文特定标记器的东西

我的解析器支持搜索模式,这基本上意味着我不需要解析整个输入,但我可以通过解析感兴趣的部分来运行它

ANTLR报告不匹配的可能标记,因此您可以使用它进行自动完成 ANTLR访问者模式非常通用。ANTLR生成接口,您必须实现它,这样您就可以提供您想要的特性 ANTLR严格区分词法分析和语法分析。因此,不可能为同一令牌分配不同的令牌类型 您可能会使用ANTLR实现一个搜索模式,但除非您添加一个单独的高效搜索,否则它不会非常有效 我认为PEG解析器更适合您的需求。但是请记住,解析和词法分析的严格分离更有效


如果您尚未使用DFA正则表达式进行词法分析,并且性能存在问题,那么将技术切换到ANTLR或PEG解析器可能是一个很好的下一步。

1。Antral是否也提供了我提到的另一个功能,即在成功匹配的情况下,下一个可能匹配的规则?或者至少是一种简单的实现方法?我知道我可以通过了解语法来手动完成,但很高兴让程序为您完成这项工作。Xtext基于ANTLR,并且Xtext旨在支持自动完成。或许Xtext对您来说是一个更好的选择。一种简单的方法是使用一个使每个单元都失败的令牌,从而生成一个合法的令牌列表。但也许有更聪明的方法来实现这一点。我不知道Xtext,它看起来很有前途。然而,我可能仍然会有解析器的用例,因为我主要是在一个非常小的15mb程序中使用它,该程序由业务人员和开发人员使用,这并不证明获得一个完整大小的IDE是合理的。Xtext的web支持看起来很有前途,所以我会关注它。