【问题标题】:How to specify the exact number of occurance of a token in ANTLR?如何指定 ANTLR 中令牌的确切出现次数?
【发布时间】:2010-09-23 10:56:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java parsing antlr grammar antlrworks


    【解决方案1】:

    这不能用语法本身来表达。如果数字是固定的,您可以表达预期令牌的数量。但是令牌流会根据值发生变化。您可以做的是将其包含在词法分析器/解析器组合中。但是你不能仅仅通过简单的语法来创建这个结构。你可能想要一些类似的东西

    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++;
          }
    ...
    

    【讨论】:

      【解决方案2】:

      我不确定这是不是上下文无关的语法。如果不是,则不能告诉 ANTLR 解析语言。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        相关资源
        最近更新 更多