我有一个组合的 ANTLR 语法,用于解析多行信息。可能在编写语法时,并非所有行都已经完全知道并在语法中定义。这应该得到承认。下面的例子是一个简化的例子:
rule: (line)+ EOF;
LF: ('\n'|'\r\n');
WS: ' ';
INTEGER: ('0'..'9');
VALUE: ('a'..'z'|'A'..'Z'|'0'..'9');
line: 'car' WS VALUE WS LF (subline LF)*;
subline: '>' (description | id | type | unknownsubline);
description: ('description' WS VALUE);
id: ('id' WS INTEGER);
type: ('type' WS VALUE);
unknownsubline: (VALUE | WS | INTEGER)*; /*don't known yet -> shall be logged...*/
我输入以下输入:
car car1
>description redPorsche
>id 123
>type pkw
>tires 4
>specifica fast,car
car car2
>description blueTruck
该行在>tires 4
Eclipse 的 ANTLR 解释器中被成功识别。但是下一行>specifica fast,car
会导致 NoViableAltException,因为这个词car
是一个已经定义的标记,这里使用的是一个未知的上下文。
有没有可能避免这种行为?是否可以识别VALUE
包含已经定义的令牌?