【发布时间】:2011-10-31 20:44:07
【问题描述】:
我对 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'
如果我将以下内容添加到“原子”规则中,则字符串会被拾取:
| '\'PUBLIC\''
【问题讨论】:
-
你如何测试这个?使用 ANTLRWorks 的解释器(或使用 ANTLR IDE Eclipse)?在这种情况下,请使用 ANTLRWorks 的调试器再试一次:它很可能与
string_literal匹配:ANTLRWorks 的解释器相当有问题,委婉地说。但是,调试器工作得很好。 -
我在 Eclipse 中使用 ANTLR IDE。感谢您的提示,我将尝试 ANTLRWorks。
-
没问题。请务必使用调试器(菜单:
Run->Debug或CTRL+D),不是解释器。
标签: string plsql antlr antlr3 string-literals