2011-10-31 37 views
3

我很新ANTLR,試圖解析一個簡單的PL/SQL函數。如果這是一個愚蠢的問題,我很抱歉。NoViableAltException當分析字符串文字與ANTLR

function MyFunc return boolean is 
begin 

    IF :USER_ID_P IS NULL THEN 
     :USER_ID_P := 'PUBLIC'; 
    END IF; 
return (TRUE); 
end; 
是應該抓住它

語法摘錄:

atom 
: variable_or_function_call (PERCENT attribute)? 
    | SQL PERCENT attribute 
    | string_literal 
    | numeric_atom 
    | boolean_atom 
    | NULL 
    | LPAREN expression RPAREN 
    ; 


string_literal 
    : QUOTED_STRING 
    ; 

QUOTED_STRING 
    : ('n')? '\'' ('\'\'' | ~('\''))* '\'' 
    ; 

它獲得了「原子」的規則,然後給出了這樣的錯誤:

NoViableAltException: line 6:0 no viable alternative for input 'END' 

的字符串被拾起,如果我將以下內容添加到「原子」規則中:

| '\'PUBLIC\'' 
+0

你如何測試?使用ANTLRWorks的解釋器(或使用ANTLR IDE Eclipse)?在這種情況下,再次嘗試使用ANTLRWorks的調試器:它很可能與'string_literal'匹配:ANTLRWorks的解釋器相當麻煩。但是,調試器很好用。 –

+0

我在Eclipse中使用ANTLR IDE。感謝您的提示,我會嘗試ANTLRWorks。 – user897210

+0

沒問題。一定要使用調試器(菜單:'Run-> Debug',或者'CTRL + D'),而不是解釋器。 –

回答

1

我認爲你得到這個錯誤是因爲其他規則(或缺乏這些規則)。它說它達到了END令牌,但無法匹配任何規則。例如,您可能錯過了規則某處的分號標記。無論如何,理解它需要完整的語法。