我必须定义一个文件的语法,如下所示.
//示例文件
NameCount = 4
Name = a
Name = b
Name = c
Name = d
//文件结尾
现在我可以为NameCount和Name定义标记.但我必须定义文件结构,包括令牌名称的有效实例数,这是NameCount之后的值.我将值解析并转换为整数并存储在语法的全局范围内的变量中(例如在变量nc中).
如何在语法中定义Name应该重复nc次?
这不能用语法本身表达.如果数字已修复,您可以表达预期令牌的数量.但令牌流会根据值更改.你可以做的是将它包含在词法分析器/解析器组合中.但是你不能只通过普通的语法语法来创建这个构造.你可能想要一些东西
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++; } ...