Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
antlr4-解析以字母表开头的字母数字_Antlr4 - Fatal编程技术网

antlr4-解析以字母表开头的字母数字

antlr4-解析以字母表开头的字母数字,antlr4,Antlr4,对于字符串定义,我有以下ABNF规则 STRING = ALPHA *(allowedchar) allowedchar = "-" / "_" / DIGIT / ALPHA ALPH = A-Z ,a-z 有效令牌: aa1 a_1___a a23 a a-1 a_a -e -- -1 -a --1 --a 1 (如果第一个字符是alpha,则重置可以是任何字符形式的“allowedchar”) 无效令牌: aa1 a_1___a a23 a a-1 a_a -e

对于字符串定义,我有以下ABNF规则

STRING   = ALPHA *(allowedchar)

allowedchar   = "-" / "_" / DIGIT / ALPHA

ALPH = A-Z ,a-z
有效令牌:

aa1
a_1___a
a23
a
a-1
a_a 
-e
--
-1
-a
--1
--a
1 
(如果第一个字符是alpha,则重置可以是任何字符形式的“allowedchar”)

无效令牌:

aa1
a_1___a
a23
a
a-1
a_a 
-e
--
-1
-a
--1
--a
1 
(不以字母开头)

到目前为止,除了
“--a”
“\uuu 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”
“\uu a”
标记为
字符串

检查输出流ANTLR正在向其写入错误/警告:ANTLR很可能正在通知您发生了错误,然后从中恢复并继续解析/词法分析

编辑
如果要覆盖ANTLR默认错误处理/报告,请参阅:

ALPHA:[a-zA-Z]+;它将解析为“a”,并调用visiter实现方法,其中context.getText()只返回“a”。我希望该行为会使令牌无效,并调用BaseErrorListener.syntaxError(..)。感谢Bart Kiers,在为解析器和lexer添加错误处理程序后,我能够报告错误。