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
| ...
;