我正在编写一个简单的解析器来将查询转换为 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
,但 AND
、OR
和 XOR
常量声明为 int
。您真正想要使用的是表达式:
if (ctx.AND() != null) {
...
除此之外,您还需要包含所需输入和输出的更具体示例。
关于java - Antlr 4 中的匹配输入替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356633/