我必须定义一个文件的语法,如下所示。
//示例文件
NameCount = 4
Name = a
Name = b
Name = c
Name = d
//文件结束
现在我可以为NameCount和Name定义标记。但是我必须定义文件结构,包括令牌Name的有效实例数,这是NameCount之后的值。我将值解析并转换为整数并存储在语法全局范围内的变量中(比如变量nc)。
如何在语法中定义Name应该精确重复nc次?
我必须定义一个文件的语法,如下所示。
//示例文件
NameCount = 4
Name = a
Name = b
Name = c
Name = d
//文件结束
现在我可以为NameCount和Name定义标记。但是我必须定义文件结构,包括令牌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++;
}
...
我不确定这是一个上下文无关的语法。如果不是,您不能告诉 ANTLR 解析语言。