caclite parser程式碼生成詳解

caclite parser程式碼生成詳解

本文程式碼均已上傳到gitee https://gitee。com/shoothzj/calcite-examples caclite的parser程式碼生成分為如下兩個步驟

caclite parser程式碼生成詳解

生成Parse。jj

檔案目錄如下

├── pom。xml└── src ├── main │ ├── codegen │ │ ├── config。fmpp │ │ ├── includes │ │ │ ├── compoundIdentifier。ftl │ │ │ └── parserImpls。ftl │ │ └── templates │ │ └── Parser。jj

新增calcite dependency

org。apache。calcite calcite-core

配置

drill-fmpp-maven-plugin

外掛如下

org。apache。drill。tools drill-fmpp-maven-plugin src/main/codegen/config。fmpp ${project。build。directory}/generated-sources/fmpp src/main/codegen/templates generate-fmpp-sources validate generate

codegen 模組的檔案都複製自對應版本的

calclite

core/src/main/codegen

路徑 https://github。com/apache/calcite/tree/main/core/src/main/codegen

然後把https://github。com/apache/calcite/blob/main/core/src/main/codegen/default_config。fmpp 中的parser屬性與config。fmpp中的parser屬性合併。就可以透過

mvn package

命令生成Parser。jj了。當然,如果有定製化修改的需求,也可以在這個階段修改config。fmpp

caclite parser程式碼生成詳解

Parser。jj生成java程式碼

檔案目錄如下

├── pom。xml├── src│ ├── main│ │ ├── codegen│ │ │ └── Parser。jj

Parser。jj就是我們上一步生成的Parser。jj,如果有什麼想要的定製化修改,也可以在這個步驟改入到Parser。jj中。

新增calcite dependency

org。apache。calcite calcite-core

配置

javacc-maven-plugin

如下

org。codehaus。mojo javacc-maven-plugin javacc javacc ${project。basedir}/src/main/codegen **/Parser。jj

生成程式碼

caclite parser程式碼生成詳解

無Parser。jj定製化修改,一步生成

如果不需要對Parser。jj進行定製化修改,那麼可以透過連續執行兩個外掛來生成程式碼,這裡給出pom檔案樣例,不再贅述

org。apache。drill。tools drill-fmpp-maven-plugin src/main/codegen/config。fmpp ${project。build。directory}/generated-sources/fmpp src/main/codegen/templates generate-fmpp-sources validate generate org。codehaus。mojo javacc-maven-plugin javacc javacc ${project。build。directory}/generated-sources/fmpp **/Parser。jj 2 false javacc-test generate-test-sources javacc ${project。build。directory}/generated-test-sources/fmpp ${project。build。directory}/generated-test-sources/javacc **/Parser。jj false true true