ANTLR获得第一次生产

时间:2016-12-21 11:17:41

标签: antlr4

我使用的是ANTLR4,特别是他们的回购中可用的C语法(grammar)。似乎语法没有初始规则,所以我想知道它是如何得到它的。实际上,一旦初始化了解析器,我就会附加我的监听器,但是由于我试图使用不同的代码指令解析两个文件,因此我获得了语法错误:

int a;

int foo() { return 0; }

在我的例子中,我用"parser.primaryExpression();"调用解析器,这是" g4"的第一个产生。文件。是否可以避免调用第一个产品并由ANTLR自动获取?

2 个答案:

答案 0 :(得分:0)

ANTLR不提供API来获取第一条规则。但是,在生成的解析器中,字段

public static final String[] ruleNames = ....;

按语法中出现的顺序列出rulenames。通过反射,您可以访问该方法。

当心。 Antlr'规范中没有任何内容。定义此顺序。到目前为止一直如此。

答案 1 :(得分:0)

除了@ GRosenberg的回答:

规则枚举(在生成的解析器中)按照它们在语法中出现的顺序包含每个规则的条目,第一个规则的值为0.但是,仅仅因为它是语法中的第一个规则并不意味着它是主要的切入点。只有语法作者知道真正的条目是什么,有时你甚至可能只想用一个子规则进行解析,这使得这个决定更加困难。