当前位置: 首页 > news >正文

java antlr sql_ANTLR SQL解析器代码

博客里有一篇文章ANTLR实现的SQL解析器 - OQL,大概描述了一下用antlr实现的一个简单的sql解析器

有不少人对antlr感兴趣,希望提供这个项目的源代码作为参考,一直没有放出来,原因有以下几个方面:

1. antlr版本问题。

开发时使用的antlr版本不久之后就更新了,与之前的老版本(包括项目中使用的)不兼容,项目中的语法文件已经无法在目前的antlr版本下使用

这次上传的项目中包括当时使用的antlr runtime dll文件(应该是3.0.1版本吧),代码中有生成好的lexer和parser cs文件。但如果要从.g语法文件重新生成lexer和parser,得使用相应的antlr java package,我这边已经没有了,可以看看antlr网站是否还提供下载

2. 实现上很乱。

这是创业的几年里为做项目而写的,这个东西的开发本身不在项目计划之内,因此从了解antlr到这部分代码只用了一个星期的时间赶出来,后来也只是稍微改改bug,没有结构性的调整过,因此实在不具备什么参考作用

主要思路倒是非常简单,用antlr生成AST,然后用visitor模式遍历AST生成sql,visitor的接口也是为了便于实现ORM映射而设计的。但是因为时间仓促,对antlr也没有深入了解,代码实现和语法文件都只能用一个字形容:乱。原来打算好好研究一下antlr,把这个项目也整理一下,不过一直懒的动

前2个星期看nhibernate的HQL解析,他的结构就好多了,建议真正想了解用antlr做sql解析器的,可以好好参考一下nhibernate或者hibernate

因为经常有人发消息留言希望学习一下,请在这里下载:ANTLR SQL解析器代码

说明:

1. 输出类型设置成了windows application形式,里面有个form用来测试解析效果

2. 只支持标准的select查询语句

posted on

2010-05-23 13:37

riccc

阅读(14423)

评论(9)

编辑

收藏

相关文章:

  • java cms gc_G1,CMS及PARALLEL GC的比较
  • java以class开头_JAVA基础:从.class文件中寻找类名
  • Java 习题6 参考答案及解析_java期末复习题答案及解析
  • 猜字小游戏java方法体_java实现猜字小游戏
  • java游戏开发包_LWJGL
  • java的人patch方法_java – 如何在CXF中使用PATCH方法
  • java func_Java通过匿名类来实现回调函数实例总结
  • Java关系表达式x y_Java正则逻辑运算符[X|Y]匹配
  • java将五元换成1元5角_C,一个代码来获得一笔钱转换成四分之一,硬币,镍币,便士[关闭]...
  • java 对方 GBK 乱码_【转】Java编码与乱码---GBK与UTF-8之间的转换
  • mySQL表变量和临时表的区别_SQL Server表变量和临时表的区别
  • 将java类的包注册到map中_java hashmap对象当实参是出现”java:11: 错误: 无法将类 Role中的构造器 Role应用到给定类型;”?...
  • JAVA不是主方法怎么输出_java主方法如何调用非静态方法
  • php显示缩小的图片代码,php等比例缩放图片及剪切图片代码分享
  • php代码转换工具,推荐几款格式化工具以及代码转换工具
  • $translatePartialLoader加载失败及解决方式
  • ES6核心特性
  • JavaScript异步流程控制的前世今生
  • Joomla 2.x, 3.x useful code cheatsheet
  • leetcode388. Longest Absolute File Path
  • Linux Process Manage
  • nodejs调试方法
  • 从零开始在ubuntu上搭建node开发环境
  • 技术胖1-4季视频复习— (看视频笔记)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一天一个设计模式之JS实现——适配器模式
  • AI算硅基生命吗,为什么?
  • elasticsearch-head插件安装
  • Spring第一个helloWorld
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • $.proxy和$.extend
  • %check_box% in rails :coditions={:has_many , :through}
  • (2)MFC+openGL单文档框架glFrame
  • (23)Linux的软硬连接
  • (java)关于Thread的挂起和恢复
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)springcloud实战之config配置中心
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十八)SpringBoot之发送QQ邮件
  • (四)模仿学习-完成后台管理页面查询
  • (五)IO流之ByteArrayInput/OutputStream
  • (五)关系数据库标准语言SQL
  • (转)原始图像数据和PDF中的图像数据
  • .“空心村”成因分析及解决对策122344
  • .describe() python_Python-Win32com-Excel
  • .mysql secret在哪_MySQL如何使用索引
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 的程序集加载上下文
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • [Android] Implementation vs API dependency
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作