Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Antlr 如何允许标识符以数字开头而不会导致不匹配的TokenException_Antlr_Antlr3 - Fatal编程技术网

Antlr 如何允许标识符以数字开头而不会导致不匹配的TokenException

Antlr 如何允许标识符以数字开头而不会导致不匹配的TokenException,antlr,antlr3,Antlr,Antlr3,我想匹配以下输入: statement span=1m 0_dur=12 使用以下语法: options { language = Java; output=AST; ASTLabelType=CommonTree; } statement :'statement' 'span' '=' INTEGER 'm' ident '=' INTEGER; INTEGER : DIGIT+ ; ident : IDENT | 'AVG' | 'COUNT'; IDENT :

我想匹配以下输入:

statement span=1m 0_dur=12
使用以下语法:

options {
language = Java;
output=AST;
ASTLabelType=CommonTree; 
}

statement :'statement' 'span' '=' INTEGER 'm' ident '=' INTEGER;

INTEGER 
:   DIGIT+
    ;

ident : IDENT | 'AVG' | 'COUNT';

IDENT
:   (LETTER | DIGIT | '_')+  ;

WHITESPACE  
:   ( ' '
    | '\t'
    | '\r'
    | '\n'
    ) {$channel=HIDDEN;}
    ;

fragment 
LETTER : ('a'..'z' | 'A'..'Z') ;

fragment 
DIGIT : '0'..'9';
但它会导致一个错误:

不匹配的TokenException:第1:15行不匹配的输入“1m”应为“\u0004”

有人知道如何解决这个问题吗

谢谢
Charles

我认为你的语法是上下文敏感的,即使是在词汇分析器(标记器)级别。字符串“1m”被识别为IDENT,而不是后跟“m”的整数。您可以重新定义语法,或者使用谓词解析,或者在语法中嵌入Java代码来检测上下文(例如,如果数字出现在“span”之后,后跟“=”,则将其解析为整数)