阅读 ANTLR 语法

Read a ANTLR grammar

由于语法,Antlr 生成了一个解析器。

但是,我需要发布语法本身。

例如,我需要知道有多少条规则,有多少可选的子规则,等等。

例如,

Grammar grammar = read_stream ('grammar_file.g4).
for (Rule rule : grammar.getRules())
{
  //....
}

A​​NTLR4 是否存在这样的开箱即用的东西?

当然可以。请参阅 interpreted grammars. From a grammar file or string, you can create a Grammar object 上的文档,其中有很多您可能感兴趣的方法,例如 getRule.

这是一个基于该页面文档的简单示例(我还没有实际测试过!):

LexerGrammar lg = new LexerGrammar(
    "lexer grammar L;\n" +
    "A : 'a' ;\n" +
    "B : 'b' ;\n" +
    "C : 'c' ;\n");
Grammar g = new Grammar(
    "parser grammar T;\n" +
    "s : (A|B)* C ;\n",
    lg);

for (String ruleName : g.getRuleNames()) {
    Rule rule = g.getRule(null, ruleName);
    // ...
}

请注意,以上内容不包括来自导入语法的规则。您也可以通过 getImportedGrammars.

获取这些信息