2017-02-09 34 views
1

我遇到了一個問題,我試圖在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

我想我可以發佈這個答案:-) –

回答

1

檢查令牌流輸出。通常,這些問題是由詞法分析器生成的錯誤令牌產生的。