2015-04-21 3 views
0

Мне нужно разобрать SQL Server если выписки в ANTLR 3. SQL Server, если заявления являются:Можно ли изменить токен-ток во время выполнения?

IF expression BEGIN? statements END? 

С НАЧАТЬ и END не являются обязательными. Мне просто нужно добавить BEGIN и END токены в ANTLR поток токенов во время выполнения, если они не указаны в потоке токенов.

+0

Почему бы вам просто не отметить маркеры как необязательные в грамматике? –

+0

Я сделал эти дополнительные, но я получил предупреждения Решение может соответствовать нескольким альтернативам ... На самом деле у меня есть грамматика, которая импортирует другую грамматику, и как-то, если разбор операторов противоречит правилам, написанным в импортированной грамматике. Я пытался выяснить предупреждения через ANTLR, но он показывает массу ошибок NoViableAlt, не запуская тестовые примеры, и не создает синтаксические диаграммы или дерево. – user82504

+0

Синтаксис SQL не является тривиальным для синтаксического анализа, посмотрели ли вы на существующие грамматики, как в http://www.antlr3.org/grammar/list.html? –

ответ

0

решаемая проблема путем добавления предикатов, как:

ЕСЛИ выражение {input.LA (1) == НАЧАТЬ}? => BEGIN statements_list END | statements_list

Смежные вопросы