java - Antlr 4 中的匹配输入替代方案

标签 java antlr antlr4

我正在编写一个简单的解析器来将查询转换为 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");
    }
}

最佳答案

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

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

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

关于java - Antlr 4 中的匹配输入替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356633/

相关文章:

java - 程序可以运行,但有点关闭。 Java简单薪资程序

java - 我可以使用 ANTLR 进行双向解析/生成吗?

eclipse - Maven仅在默认包中生成Antlr源

parsing - 为什么 ANTLR4 token 的顺序很重要?

java - 在 RESTful API 中解析 URI 参数

java - 如何从springboot中的application.yml中读取带有特殊字符的属性

java - 如何将 jackson 与网络代理一起使用

antlr - 使用 ANTLR 解析字母范围

python - 具有相同标签的多个备选方案,只有最后一个获得分配给它的任何东西

java - RuleContext 类实现中的 invokingState 是什么?