3

给出来自The Definitive ANTLR 4 Reference的以下示例

STUFF: ~[\t\r\n]+ ; // match any chars except tab, newline

我正在尝试为以*. 例如:

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

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

4

1 回答 1

4

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

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

那么你的line规则根本就不能参考ASTERISK

line : keys;

只要keys不允许ASTERISK作为第一个符号,则line不能匹配第一个标记所在的行ASTERISK

于 2013-06-20T15:49:15.993 回答