ANTLR4 - 如何指定行不以特定字符开头?

时间:2013-06-20 15:45:59

标签: antlr grammar antlr4

明确的ANTLR 4参考

中给出以下示例
STUFF: ~[\t\r\n]+ ; // match any chars except tab, newline

我正在尝试为以*开头的行定义备用路径。例如:

line : ~ASTERIX keys ;
ASTERIX : '*';

但是,我不想匹配不是ASTERIX的所有内容,我希望line规则在行不以ASTERIX开头时执行,然后开始其余的匹配。

1 个答案:

答案 0 :(得分:4)

您可以将ASTERISK规则重新定义为仅匹配出现在行首的*

ASTERISK : '*' {_input.LA(-2) == '\n'}?;

然后,您的line规则无法引用ASTERISK

line : keys;

只要keys不允许ASTERISK作为第一个符号,line就无法匹配第一个标记为ASTERISK的行。