NoViableAltException при разборе строковых литералов с помощью ANTLR - PullRequest
3 голосов
/ 01 ноября 2011

Я новичок в 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 Ответ

1 голос
/ 16 мая 2015

Я думаю, что вы получаете эту ошибку из-за других правил (или их отсутствия). Он говорит, что дошел до токена END, но не может соответствовать ни одному правилу.Например, вы могли пропустить маркер точки с запятой где-то в ваших правилах.В любом случае, полная грамматика необходима для ее понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...