插件的 github 地址为: https://github.com/prs1022/a_antlr_plugin
插件代码很简单,先说下布局和做这个的目的。 布局就是一段文本输入框,下面一行输入框,不带任何花里胡哨的按钮,下拉框等等。 输入 SQL 和 DSL 就可以得到自己想要的语法节点。我觉得这有点像很多正则表达式工具,你输入了一段文本,然后再输入一行正则,回车就能知道自己的正则结果,我们不希望在运行程序的时候才知道我们正则写错了,所以预先都会用这么个工具。我是这么用的,不知道正则大佬们会不会。
再来说下技术实现,这个是以 SQL 作为背景去使用的,当然 ANtlr 语法解析不止是可以做 SQL 文本的解析,有兴趣的可以一起讨论。SQL 的语法文件是取自 facebook 的开源项目 presto 。
我初衷是通过自定义语法查找指令,实现查找语法树节点的过程,完成了这个插件,方便在编码运行前预知自己的结果是否符合要求。
这个插件是 IDEA 插件,没有上传到官方的仓库,需要安装的可以下载源码然后打包成 zip 文件解压到本地安装即可。
最后,这个项目创建后八个多月都没更新过,也没有在别的地方推广过(只在知乎上写过一篇),虽然不是很牛逼的项目,但还是希望得到大家的 star 或是建议。
1
cookii 2020-04-07 17:21:49 +08:00
帮顶哈,不太理解这个是做什么的
|
2
purensong OP 有没有人 ![]( )
|
3
no1xsyzy 2020-04-08 12:15:56 +08:00
帮你 Reparagraphing 一下:
(此处第一人称为楼主,不代表 @no1xsyzy 的观点) 使用正则表达式的时候,常常会用到一些模拟运行的工具:输入模式和匹配文本,测试运行的结果。类似地,我希望我能用类似地方式去测试 SQL 。通过自定义的语法查找指令( DSL )来搜索 AST,方便在运行前预知自己的结果是否符合要求。 实现上,我使用了 ANtlr 和取自 facebook 的开源项目 presto 的语法文件进行语法解析。 这个插件没有上传官方仓库,可以 clone 到本地或者下载 zip 进行安装。 操作看这个动图: (下面是我的吐槽) 我不觉得一个 AST 检索和你举的 RegEx 的例子是相仿的。 RegEx 是进行了 testflight,也就是在独立环境中把部分代码真的跑起来。而你的这个插件似乎只是静态分析。 |
5
no1xsyzy 2020-04-08 13:59:49 +08:00
|
6
purensong OP @no1xsyzy 额,我的插件也是实际运行了代码去解析的,实现类在这个项目里,也是我的 git 项目,https://github.com/prs1022/antlr_query 。先根据自定义文法解析输入的 DSL,运行相应的实现类,实现类内部基于 antlr 的 listener 和 visitor 模式查找节点。
|
7
no1xsyzy 2020-04-08 14:16:50 +08:00
@purensong #6
我感觉你混淆了类比 正则表达式 → 某段待解析文本 = 你的 DSL → 某段 SQL 正则表达式工具中,想要调试的、产生价值的是正则表达式。 你的工具中,想要调试的、产生价值的是 SQL 。 位置是错位的。 |