java - 如何指定 ANTLR 中某个 token 出现的确切次数?

标签 java parsing antlr grammar antlrworks

我必须定义一个文件的语法,如下所示。

//示例文件
名称计数 = 4
姓名=a
名称 = b
姓名=c
姓名=d
//文件结束

现在我可以为 NameCountName 定义 token 。但我必须定义文件结构,包括 token Name 实例的有效数量,这是 NameCount 之后的值。我将值解析并转换为整数,并将其存储在语法全局范围内的变量中(例如在变量 nc 中)。

如何在语法中定义 Name 应精确重复 nc 次?

最佳答案

这无法用语法本身来表达。如果数字是固定的,您可以表示预期 token 的数量。但 token 流会根据值而变化。您可以做的是将其包含到词法分析器/解析器组合中。但是您不能仅通过简单的语法来创建此构造。您可能想要类似的东西

grammar test;

@members {
  private int count = 0;
  private int names = 0;
}

file
    : count (name)+
      {
        if (count != names) throw new Exception("");
      }
    ;

count
    : 'NameCount' EQ Number
      {
        count = Integer.parseInt($Number.text);
      }
    ;

name
    : 'Name' EQ Value
      {
        names++;
      }
...

关于java - 如何指定 ANTLR 中某个 token 出现的确切次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308823/

相关文章:

jquery - 如何从一组 HTML 片段文件中读取数据?

antlr - 解析数据文件

java - ANTLR4 向监听器发送空上下文属性

Java:在客户端和servlet之间传递消息的适当方法?

java - 是否可以在 Spring 运行时 Autowiring 方法参数

java - 在Assignment和VariableDeclarationFragment ASTParser中解析类型绑定(bind)始终为null

ANTLR4 访问者子树检查

java - 在 Java Rundeck Plugin 中添加对 jar 的依赖

java - 如何使通配符的不同捕获兼容?

javascript - DOM 的 JavaScript 解析器