当前位置:  开发笔记 > 编程语言 > 正文

如何在ANTLR中指定令牌的确切出现次数?

如何解决《如何在ANTLR中指定令牌的确切出现次数?》经验,为你挑选了1个好方法。

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

//示例文件
NameCount = 4
Name = a
Name = b
Name = c
Name = d
//文件结尾

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

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



1> tcurdt..:

这不能用语法本身表达.如果数字已修复,您可以表达预期令牌的数量.但令牌流会根据值更改.你可以做的是将它包含在词法分析器/解析器组合中.但是你不能只通过普通的语法语法来创建这个构造.你可能想要一些东西

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

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有