antlr4 - 解析以字母开头的ALPHANUMERIC

时间:2014-12-15 22:19:37

标签: antlr4

我有以下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 ;

1 个答案:

答案 0 :(得分:0)

  

ANTL4接受此标记作为有效字符串。

我对此表示怀疑。

假设您的ALPHA规则如下:

fragment ALPHA : [a-zA-Z];

我确定ANTLR "--a""__a"标记为STRING

检查输出流ANTLR是否正在编写错误/警告:ANTLR可能会通知您有关出错的内容,然后从中恢复并继续解析/退出。

修改

如果要覆盖ANTLR默认错误处理/报告,请参阅:Handling errors in ANTLR4