Сопоставление альтернатив ввода в antlr 4

Я пишу простой парсер для перевода запроса в SQL. Я завершил синтаксический анализ и получил дерево синтаксического анализа, но теперь мне нужно перевести эту грамматику в SQL с помощью ANTLR 4.

Если часть моей грамматики выглядит как

boolOp : OR|XOR|AND;

Как распечатать его, если есть совпадения?

На самом деле я пытаюсь распечатать AND, если мой запрос существует AND оператор или если мой запрос существует OR, тогда мне нужно вывести OR оператор в соответствии с правилом грамматики boolOp, показанным выше.

ЧАСТЬ МОЕГО КОДА

public void exitBoolOp( Parser.BoolOpContext ctx)
{
    if (ctx.AND() == AND)
    {
        System.out.print(" AND "+"\t");
    }
    else if (ctx.OR() == OR)
    {
        System.out.print(" OR "+"\t");
    }
    else
    {
        System.out.print(" XOR "+"\t");
    }
}

person user2085189    schedule 21.08.2013    source источник


Ответы (1)


Очевидная проблема, которую я заметил в коде, - это сгенерированные методы AND(), OR() и XOR() возвращают TerminalNode, но константы AND, OR и XOR объявлены как int. На самом деле вы хотите использовать выражение:

if (ctx.AND() != null) {
    ...

Помимо этого, вам нужно будет включить более конкретные примеры желаемых входных и выходных данных.

person Sam Harwell    schedule 24.08.2013
comment
Большое вам спасибо за ваш любезный ответ. - person user2085189; 30.08.2013