且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

是否可以使Antlr4从基本语法词法分析器而不是通用词法分析器生成词法分析器?

更新时间:2023-09-16 15:46:52

由于ANTLR 4实现导入的方式,因此无法实现.

如果语法x导入语法y,则该操作的行为如下:

  1. 加载语法y(及其所有规则).
  2. 将语法x中的规则添加到规则集合中.如果发生任何名称冲突,请将y中找到的规则替换为x中找到的规则.

当您到达代码生成器时,规则层次结构已完全变平.

I have lexer grammar called BasicTokens which is set of basic tokens for my language, having tokens like null, true, false etc.

Now when I create parser grammar say BasicGrammar which imports refers BasicTokens and another grammar called InheritedGrammar which imports BasicGrammar.

When Antlr4 generates the parser for InheritedGrammar it included all the rules already defined in BasicGrammar.

Is there a way to make Antlr describe only the rules generated in InheritedGrammar and not in BasicGrammar and also inherit BasicGrammarParser instead of Parser?

This is not possible due to the way ANTLR 4 implements imports.

If grammar x imports grammar y, the operation behaves as follows:

  1. Load grammar y (and all its rules).
  2. Add the rules from grammar x to the collection of rules. If any name collision occurs, replace the rule found in y with the one found in x.

By the time you reach the code generator, the rules hierarchy is completely flattened.