ANTLR 是否提供这些功能?
Does ANTLR provide these features?
我创建了一个通用解析器,它的代码行数相当小,但我已经能够成功地用于我的目的。它可以处理递归语法,表现良好,支持正则表达式,允许正常标记化模式或上下文特定标记化,这反过来又允许冲突的标记在语法中工作得很好等等。
由于 ANTLR 的整体流行度,我认为可能值得更多地了解它(也许我一直在重新发明轮子)但在投入时间之前我想知道它是否可以做一些我的解析器目前提供给我的是同样的东西。不幸的是,我找不到足够全面的功能列表,至少没有一个能回答我在下面提出的问题。
ANTRL 是否提供以下功能?
我的解析器旨在像您一样帮助完成代码
会在 IDE 中看到。当无法解析输入时,它总是给出
它应该在失败发生的地方匹配的可能标记。一种
类似的特征是对于递归规则,当有
成功解析输入我可以获得有关可能的信息
如果我要有更长的输入(或者如果我要在代码完成方面继续输入),我将必须满足这些规则。
从我对 ANTLR 的了解来看,它似乎支持访问者
图案。我的解析器实际上也使用了访问者模式,但它也
提供有关匹配的一些上下文,例如带有 match
的堆栈
深度信息等等。例如,如果一种语言有
允许嵌套函数的函数我的访问者方法允许我
只处理我关心的级别的功能。我还假设它提供了比赛的开始和结束索引。
我的解析器支持正则表达式并结合特定的上下文
标记化模式我可以以牺牲一些性能为代价使一些语法显着变小(对于 DSL 来说一点也不差)。这方面的一个例子是,我可以有一个与单词 "is" 匹配的标记,另一个与模式 "\w+" 匹配的标记,并且单词 "is" 将根据上下文转换为适当的标记即使这两个都可以匹配单词 "is"。 ANTRL 是否支持正则表达式或类似于此上下文特定分词器的东西?
我的解析器支持搜索模式,这基本上意味着我不需要解析整个输入,但我可以 运行 通过它解析我感兴趣的部分。
- ANTLR 报告可能的标记不匹配,因此您可以将其用于自动完成
- ANTLR 访问者模式非常通用。 ANTLR 生成接口,你必须实现它,所以你可以提供你想要的功能
- ANTLR 严格区分词法分析和语法分析。因此不可能将不同的令牌类型分配给同一个令牌
- 您可能会使用 ANTLR 实现搜索模式,但效率不高(除非您另外添加一个单独的高效搜索)
我认为 PEG-Parser 更适合您的要求。但请记住,解析和词法分析的严格分离性能更高。
如果您还没有使用 DFA 正则表达式来进行词法分析,并且如果性能是一个问题,那么转换技术(转换为 ANTLR 或转换为 PEG-Parsers)可能是一个很好的下一步。
我创建了一个通用解析器,它的代码行数相当小,但我已经能够成功地用于我的目的。它可以处理递归语法,表现良好,支持正则表达式,允许正常标记化模式或上下文特定标记化,这反过来又允许冲突的标记在语法中工作得很好等等。
由于 ANTLR 的整体流行度,我认为可能值得更多地了解它(也许我一直在重新发明轮子)但在投入时间之前我想知道它是否可以做一些我的解析器目前提供给我的是同样的东西。不幸的是,我找不到足够全面的功能列表,至少没有一个能回答我在下面提出的问题。
ANTRL 是否提供以下功能?
我的解析器旨在像您一样帮助完成代码 会在 IDE 中看到。当无法解析输入时,它总是给出 它应该在失败发生的地方匹配的可能标记。一种 类似的特征是对于递归规则,当有 成功解析输入我可以获得有关可能的信息 如果我要有更长的输入(或者如果我要在代码完成方面继续输入),我将必须满足这些规则。
从我对 ANTLR 的了解来看,它似乎支持访问者
图案。我的解析器实际上也使用了访问者模式,但它也
提供有关匹配的一些上下文,例如带有 match
的堆栈 深度信息等等。例如,如果一种语言有 允许嵌套函数的函数我的访问者方法允许我 只处理我关心的级别的功能。我还假设它提供了比赛的开始和结束索引。我的解析器支持正则表达式并结合特定的上下文 标记化模式我可以以牺牲一些性能为代价使一些语法显着变小(对于 DSL 来说一点也不差)。这方面的一个例子是,我可以有一个与单词 "is" 匹配的标记,另一个与模式 "\w+" 匹配的标记,并且单词 "is" 将根据上下文转换为适当的标记即使这两个都可以匹配单词 "is"。 ANTRL 是否支持正则表达式或类似于此上下文特定分词器的东西?
我的解析器支持搜索模式,这基本上意味着我不需要解析整个输入,但我可以 运行 通过它解析我感兴趣的部分。
- ANTLR 报告可能的标记不匹配,因此您可以将其用于自动完成
- ANTLR 访问者模式非常通用。 ANTLR 生成接口,你必须实现它,所以你可以提供你想要的功能
- ANTLR 严格区分词法分析和语法分析。因此不可能将不同的令牌类型分配给同一个令牌
- 您可能会使用 ANTLR 实现搜索模式,但效率不高(除非您另外添加一个单独的高效搜索)
我认为 PEG-Parser 更适合您的要求。但请记住,解析和词法分析的严格分离性能更高。
如果您还没有使用 DFA 正则表达式来进行词法分析,并且如果性能是一个问题,那么转换技术(转换为 ANTLR 或转换为 PEG-Parsers)可能是一个很好的下一步。