更新时间:2023-09-16 15:46:52
由于ANTLR 4实现导入的方式,因此无法实现.
如果语法x
导入语法y
,则该操作的行为如下:
y
(及其所有规则).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:
y
(and all its rules).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.