从 明确的ANTLR 4参考
中给出以下示例STUFF: ~[\t\r\n]+ ; // match any chars except tab, newline
我正在尝试为以*
开头的行定义备用路径。例如:
line : ~ASTERIX keys ;
ASTERIX : '*';
但是,我不想匹配不是ASTERIX
的所有内容,我希望line
规则在行不以ASTERIX
开头时执行,然后开始其余的匹配。
答案 0 :(得分:4)
您可以将ASTERISK
规则重新定义为仅匹配出现在行首的*
。
ASTERISK : '*' {_input.LA(-2) == '\n'}?;
然后,您的line
规则无法引用ASTERISK
。
line : keys;
只要keys
不允许ASTERISK
作为第一个符号,line
就无法匹配第一个标记为ASTERISK
的行。