我有以下ABNF规则用于字符串定义。
STRING = ALPHA *(allowedchar)
allowedchar = "-" / "_" / DIGIT / ALPHA
ALPH = A-Z ,a-z
有效令牌:
aa1
a_1___a
a23
a
a-1
a_a
(如果第一个字符是 alpha,则重置可以是任何字符形式"允许字符")
无效令牌:
-e
--
-1
-a
--1
--a
1
(不以字母开头)。
到目前为止,我已经对所有输入(有效和无效)的语法都有效,除了"--a"
和"__a"
。
ANTL4 接受此令牌作为有效字符串。
我不确定为什么这不起作用。
我的语法
STRING : ALPHANUMERIC
ALPHA : [a-zA-Z]+ ;
fragment ALPHANUMERIC : ALPHA (ALLOWEDATTCHAR)* ;
fragment ALLOWEDATTCHAR : '-' | '_' | [0-9] | ALPHA ;
ANTL4 接受此令牌作为有效字符串。
我对此表示怀疑。
假设您的ALPHA
规则如下所示:
fragment ALPHA : [a-zA-Z];
我敢肯定 ANTLR 不会将"--a"
或"__a"
标记为STRING
.
检查输出流 ANTLR 正在将错误/警告写入:ANTLR 可能会通知您出现问题,然后从中恢复并继续解析/词法分析。
编辑
如果要覆盖 ANTLR 默认错误处理/报告,请参阅: 处理 ANTLR4 中的错误