使用ANTLR解析字符串文字时的NoViableAltException

时间:2011-10-31 20:44:07

标签: string plsql antlr antlr3 string-literals

我是ANTLR的新手,试图解析一个简单的PL / SQL函数。如果这是一个愚蠢的问题,我道歉。

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'

如果我将以下内容添加到“atom”规则中,则会拾取字符串:

| '\'PUBLIC\''

1 个答案:

答案 0 :(得分:1)

我认为你因为其他规则(或缺少规则)而收到此错误。它表示它已达到END令牌但无法匹配任何规则。例如,您可能在规则中的某处错过了分号标记。无论如何,需要完整的语法才能理解它。