Antlr4 当关键字为POINT时,输入时Antlr没有可行的替代方案

Antlr4 当关键字为POINT时,输入时Antlr没有可行的替代方案,antlr4,Antlr4,此代码将报告以下错误: import org.antlr.v4.runtime.tree.ParseTree; import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor; import org.junit.Test; import javax.xml.bind.SchemaOutputResolver; public class T1 { @Test public void t1() {

此代码将报告以下错误:

import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
import org.junit.Test;

import javax.xml.bind.SchemaOutputResolver;

public class T1 {
    @Test
    public void t1() {
        ParseTree parseTree = new SQLParserExecutor("MySQL", "insert into T_NAME (POINT) values (?)").execute().getRootNode();
    }
}
当我使用其他列名时,这没关系,但POINT不起作用。为什么?

Java项目,pom.xml:

line 1:20 no viable alternative at input '(POINT'

org.apache.shardingsphere
切分JDBCSpring命名空间
4.1.1
我怀疑所有(MySQL)关键字或更多关键字都会触发此错误(
POLYGON
可能也会产生此错误)。语法可能试图匹配标识符,但由于输入的
已作为关键字匹配,因此无法正确匹配

大概是这样的:

<dependency>
     <groupId>org.apache.shardingsphere</groupId>
     <artifactId>sharding-jdbc-spring-namespace</artifactId>
     <version>4.1.1</version>
</dependency>
在查看Github问题时,其中一名维护人员表示5.0.0-alpha正确地处理了这个问题,这意味着他们可能做了类似的事情来修复它:

insert_stat
 : INSERT INTO? table_name '(' column_names ')' ...
 ;

column_names 
 : IDENTIFIER ( ',' IDENTIFIER )*
 ;

例如:他们在解析器内部扩展了一组有效标识符。

感谢@Bart的评论。此错误已从5.0.0-alpha修复

顺便说一句,ShardingSphere支持许多主流RDBMS,如MySQL、PostgreSQL、SQLServer和Oracle。因此,您将在本回购协议中看到大量g4文件。理想情况下,Antlr g4文件中的这些定义应该与相应的官方SQL文档保持一致。因此,如果存在任何不匹配,请在上报告。非常感谢

最好的,
Juan

请编辑您的问题并包含完整的语法,以便其他人可以复制。此处无需pom,请添加您正在使用的语法。这是以
g4
结尾的文件。或者解析器是切分JDBCSpring命名空间依赖项的一部分?我也是10259。解析器是切分jdbc-*依赖项的一部分。是的,我发布了该问题的链接,以防有人想回答并检查Github问题中是否还没有提供建议。我刚刚测试了POLYGON确实报告了一个错误,是的,对我来说这似乎是一个错误。该项目似乎使用了自己的MySQL语法。在我的语法中,这根本不是问题,因为所有非保留关键字都是特定标识符规则的一部分。也许apache.shardingsphere应该换成更完整的语法?是的,我试着在apache.shardingsphere的Github repo上研究它,但它有很多导入语法,我不清楚是哪个(许多)语法导致了这一点。顺便问一下,你知道5.x的官方版本何时发布吗?嗨,我们正在准备一个5.0.0测试版,预计将于本月发布。所以5.0.0将在5.0.0测试版之后发布,我想这将发生在7月或8月。
insert_stat
 : INSERT INTO? table_name '(' column_names ')' ...
 ;

column_names 
 : identifier ( ',' identifier )*
 ;

identifier
 : IDENTIFIER
 | POINT
 | POLYGON
 | ...
 ;