gpt4 book ai didi

java - ANTLR 提供这些功能吗?

转载 作者:行者123 更新时间:2023-12-02 13:11:04 26 4
gpt4 key购买 nike

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

由于 ANTLR 的整体受欢迎程度,我认为可能值得更多地了解它(也许我一直在重新发明轮子),但在投入时间之前,我想知道它是否可以做一些相同的事情我的解析器当前提供给我的东西。不幸的是,我无法找到足够全面的功能列表,至少没有一个可以回答我在下面提出的问题。

ANTRL 是否提供以下功能?

  • 我的解析器旨在帮助完成代码,就像您一样会在 IDE 中看到。当无法解析输入时,它总是给出它应该在发生故障的地方匹配的可能标记。 A类似的特征是,对于递归规则,当存在成功解析输入我可以获得有关可能的信息如果我要输入更长的内容(或者如果我要继续输入代码完成),我就必须满足规则。

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

  • 我的解析器支持正则表达式并与特定于上下文的结合标记化模式我可以以牺牲一些性能为代价来使一些语法显着变小(对于 DSL 来说一点也不差)。一个例子是,我可以有一个与单词“is”匹配的标记,另一个与模式“\w+”匹配的标记,并且单词“is”将根据上下文翻译为适当的标记,即使这两个标记都匹配这些可以匹配单词“is”。 ANTRL 是否支持正则表达式或类似于此上下文特定标记生成器的东西?

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

最佳答案

  1. ANTLR 会报告不匹配时可能出现的标记,因此您可以将其用于自动补全
  2. ANTLR 访问者模式非常通用。 ANTLR 生成接口(interface),你必须实现它,这样你就可以提供你想要的功能
  3. ANTLR 严格区分词法分析和解析。因此,将不同的 token 类型分配给同一个 token 是不可能的
  4. 您可能可以使用 ANTLR 实现搜索模式,但它不会相当有效(除非您另外添加一个单独的高效搜索)

我认为 PEG-Parser 更适合您的要求。但请记住,严格分离解析和词法分析会提高性能。

如果您尚未使用 DFA 正则表达式进行词法分析,并且性能是一个问题,那么切换技术(ANTLR 或 PEG-Parsers)可能是一个不错的下一步。

关于java - ANTLR 提供这些功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com