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'
他們和未能解析他們。我不明白爲什麼它起作用,如果我用_開頭,並使用一堆數字,但每次都在相同數量的字母后失敗。
令牌流的轉儲顯示了什麼?哪些標記會讓您的詞法分析器返回測試輸入? –
OOOHHHH!我有這樣一行:''e'= 45'因爲我想讓科學記數法!謝謝你指點我正確的方向! – CaseyB
我想我可以發佈這個答案:-) –