当前位置: 首页 > 知识库问答 >
问题:

ANTLR4中的递归词法规则有什么好处?

敖涵容
2023-03-14

从ANTLR4开始。发现lexer规则可以是递归的https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#recursive-莱克瑟规则。使用递归词法规则而不是递归解析器规则的用例是什么?在使用lexer递归规则时,你不会丢失所有信息吗?

共有1个答案

舒赞
2023-03-14

正如sepp2k在注释中所提到的:除了嵌套字符串文字,嵌套注释是用例之一:

COMMENT
 : '/*' ( COMMENT | . )*? '*/'
 ;
 类似资料:
  • 我正在使用antlr4 c语法作为我自己语法的灵感。我来了一件事,我真的不明白。为什么没有使用数据类型时会有Lexer规则?例如,规则从未使用过,但分析器规则(为了简化已删除其他数据类型)使用了好几个地方。解析器规则typeSpecifier没有使用lexer规则double有什么原因吗?

  • 我的语法允许以下操作: 我从其他语法中抓了几个东西来玩。我的主要问题是我的expr规则。给定以下输入:,我期望解析树会找到..规则,但它将解释0。并不正确解析其余部分。 如果在我的0后面加上一个空格,就可以了: 谢了!

  • 问题内容: 我对使用Python导入模块的多种方式感到有些困惑。 我一直在阅读有关范围和名称空间的信息,但是我想获得关于什么是最佳策略,在什么情况下以及为什么使用的最佳实践建议。导入应该在模块级别还是方法/功能级别进行?在或模块代码本身中? 尽管“ Python软件包-按类导入,而不是文件”确实没有回答我的问题,尽管它显然是相关的。 问题答案: 在我们公司的生产代码中,我们尝试遵循以下规则。 我们

  • 我正在构建一个ANTLR4语法来解析数据源中的字符串--类似于StringTemplate(如果不是非常相似的话),只是我不喜欢这种语法,所以我正在编写自己的语法(也只是为了好玩和学习,因为这是我第一次使用/ANTLR)。我的语法现在看起来像这样(这是从我的实际情况中简化出来的,但我已经验证了它是一个“好例子”,并且展示了我所问的相同的问题): 这个语法工作得很好,允许我执行替换,例如: 结果是:

  • 查看文档,ANTLR2过去有一种叫做谓词法的东西,下面的例子是这样的(灵感来自Pascal): 在我看来,这实际上是规则开头的一个积极的前瞻性断言:如果前瞻性与匹配,那么第一个规则将被应用(并与该输入的部分匹配),依此类推。 我还没有在ANTLR4中找到这样的东西。2到3迁移指南似乎没有提到这一点,而3到4更改文档指出: ANTLR3和4之间最大的区别是ANTLR4接受您给出的任何语法,除非该语法