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