首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当关键字是POINT时,Antlr在输入时没有可行的替代方案

当关键字是POINT时,Antlr在输入时没有可行的替代方案
EN

Stack Overflow用户
提问于 2021-05-06 17:20:01
回答 2查看 118关注 0票数 0
代码语言:javascript
复制
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();
    }
}

此代码将报告以下错误:

代码语言:javascript
复制
line 1:20 no viable alternative at input '(POINT'

当我使用其他列名时,这是可以的,但是POINT不起作用。为什么?

Java项目,pom.xml:

代码语言:javascript
复制
<dependency>
     <groupId>org.apache.shardingsphere</groupId>
     <artifactId>sharding-jdbc-spring-namespace</artifactId>
     <version>4.1.1</version>
</dependency>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-07 21:32:43

我怀疑所有(MySQL)或更多的关键字都会触发这个错误(POLYGON可能也会产生这个错误)。语法可能正在尝试匹配标识符,但由于输入POINTS已经作为关键字进行了匹配,因此无法正确匹配它。

如下所示:

代码语言:javascript
复制
insert_stat
 : INSERT INTO? table_name '(' column_names ')' ...
 ;

column_names 
 : IDENTIFIER ( ',' IDENTIFIER )*
 ;

看一下Github的问题,一个维护者表示5.0.0-alpha正确地处理了这个问题,这意味着他们可能做了类似这样的事情来修复它:

代码语言:javascript
复制
insert_stat
 : INSERT INTO? table_name '(' column_names ')' ...
 ;

column_names 
 : identifier ( ',' identifier )*
 ;

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

即:他们在解析器中扩展了一组有效的标识符。

票数 0
EN

Stack Overflow用户

发布于 2021-05-13 17:40:44

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

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

最好的,胡安

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67415281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档