解析ANTLR中的标识符

问题描述:

我遇到了一个问题,我试图在ANTLR4中匹配标识符,并且似乎在一段时间后关闭它们。这里是我的语法的相关部分:解析ANTLR中的标识符

prog: (EOL)* statements; 
statements: statement (EOL)+ (statement (EOL)+)* ; 
statement : declaration ; 
declaration : mutability ' '+ ident ' '* assign_operator ' '* expression ; 
block : '{' statements '}'; 
expression : ident 
      | number ; 
EOL : '\n' ; 
mutability : ('let'|'var') ; 
assign_operator : '=' ; 
number : ('-'?(DIGIT|'_')+('.')?(DIGIT|'_')*('e''-'?)?(DIGIT|'_')*) ; 
ident : ('_'|LETTER) ('_'|LETTER|DIGIT)* ; 
DIGIT : '0'..'9' ; 
LETTER : ('a'..'z'|'A'..'Z') ; 

,这里是我的测试情况:

let _1 = 5 
let _12 = 5 
let _123 = 5 
let _1234 = 5 
let _12345 = 5 
let _123456 = 5 
let _1234567 = 5 
let _12345678 = 5 
let _123456789 = 5 
let _1234567890 = 5 

let a = 5 
let ab = 5 
let abc = 5 
let abcd = 5 
let abcde = 5 
let abcdef = 5 

它适用于一切,但最后两个语句。它给我

line 33:8 no viable alternative at input 'let abcde' 
line 34:8 no viable alternative at input 'let abcde' 

他们和未能解析他们。我不明白为什么它起作用,如果我用_开头,并使用一堆数字,但每次都在相同数量的字母后失败。

+1

令牌流的转储显示了什么?哪些标记会让您的词法分析器返回测试输入? –

+0

OOOHHHH!我有这样一行:''e'= 45'因为我想让科学记数法!谢谢你指点我正确的方向! – CaseyB

+0

我想我可以发布这个答案:-) –

检查令牌流输出。通常,这些问题是由词法分析器生成的错误令牌产生的。