我是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\''
答案 0 :(得分:1)
我认为你因为其他规则(或缺少规则)而收到此错误。它表示它已达到END令牌但无法匹配任何规则。例如,您可能在规则中的某处错过了分号标记。无论如何,需要完整的语法才能理解它。