【问题标题】:Matching input alternatives in antlr 4antlr 4 中的匹配输入选项
【发布时间】:2023-04-01 19:17:01
【问题描述】:

我正在编写一个简单的解析器来将查询转换为 SQL。我已经完成了解析器并获得了解析树,但现在我需要使用 ANTLR 4 将这些语法转换为 SQL。

如果我的部分语法看起来像

boolOp : OR|XOR|AND;

如果存在匹配项,我将如何打印?

实际上,如果我的查询存在AND 运算符或者如果我的查询存在OR,那么我正在尝试打印AND,那么我必须根据上面显示的语法boolOp 规则打印OR 运算符。

我的部分代码

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");
    }
}

【问题讨论】:

    标签: java antlr antlr4


    【解决方案1】:

    我在代码中注意到的明显问题是生成的AND()OR()XOR() 方法返回TerminalNode,但声明了ANDORXOR 常量作为int。你真正想要使用的是表达式:

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

    除此之外,您还需要包含更多关于所需输入和输出的具体示例。

    【讨论】:

    • 非常感谢您的友好回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2022-11-10
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多