【发布时间】:2022-01-01 05:55:22
【问题描述】:
我正在使用 ANTLR4 来分析和解析字符串。字符串是这样的:
alpha at 3
语法是这样的:
access: IDENTIFIER 'at' INT;
IDENTIFIER: [A-Za-z]+;
INT: '-'? ([1-9][0-9]* | [0-9]);
但是,这个 ANTLR 给了我line 1:6 mismatched input 'at' expecting 'at'。我发现这是因为IDENTIFIER 是'at' 的超集,如this answer 所示。所以,我试着把语法改成这样:
access: identifier AT INT;
identifier: NAME | ~AT;
NAME: [A-Za-z]+;
INT: '-'? ([1-9][0-9]* | [0-9]);
AT: 'at';
但是我得到一个相同的错误。
我如何匹配alpha at 3,其中alpha 是[A-Za-z]+,而at 也在[A-Za-z]+ 中?
【问题讨论】:
-
你的第一个语法版本没有给我错误(但你的第二个版本有)。
-
如果您在第二版语法中将
AT移到IDENTIFIER之前,我认为这也应该有效。