`
jiandeh
  • 浏览: 20249 次
  • 性别: Icon_minigender_1
  • 来自: 福建 厦门
社区版块
存档分类
最新评论

基于ANTLR的语法编译器

阅读更多

(一)、背景

目前业务部门对业务数据的查询可以通过业务系统提供的查询功能进行,也可以通过数据库产商提供的数据库工具进行。业务系统提供的查询功能都是预先设计好的,这种方式功能有限,业务人员需要进行新的查询时,只能通过升级系统来实现,时间上存在滞后,且依然无法满足将来可能的新需求。通过数据库工具进行查询可以满足业务人员随时的新查询需求,但是这要求业务人员需熟练掌握数据库工具和SQL语法。<o:p></o:p>

为满足相关业务部门特别是审计部门在不用掌握数据库查询工具和SQL语法等技术的情况下也能灵活、自由查询数据库,可使用数据库灵活查询工具(简称DBQT)。该工具采用基于LLK)文法的编译器技术实现,旨在为各行业的业务系统特别是审计系统提供快速、灵活、高效的数据库查询。

(二)、工具的特点

1、采用ANTLR,语言识别的另一个工具(ANother Tool for Language Recognition),通过JAVA动作的语法描述来构造语言识别器、编译器和解释器。

2、采用基本LLK的文法编译原理技术实现,即编译器从左向右扫描输入串,使用最左推导法,每次向右扫描K个符号就可确定使用哪个产生式。

3、支持业务化的中文查询语句的语法验证,验证成功后通过翻译器将中文查询语句翻译成标准的英文查询语句。

4、支持常用的五种语句:常规语句、追加语句、比较语句、循环语句、自定义语句。

5、构件化功能组装强大、简单的业务延伸能力,工具提供了与业务系统无关性的二次开发接口。

<o:p></o:p>

(三)、工具的功能

本工具应用了当今最流行ANTLR元语言技术工具,使用BNF巴科斯范式(Backus-Naur Form)进行语法定义,采用基于LL(K)的文法编译原理技术实现的,该工具实现了数据库语句的灵活查询及强大语法验证功能,可以准确地分析复杂的语法,并能根据查询语句对应的数据库表、标准字段表等信息将业务化的中文查询语句翻译成标准的SQL语句,供业务系统提取使用。工具支持常规语句、追加语句、比较语句、循环语句、自定义语句等常用的五种查询语句。 

数据库表设置功能<o:p></o:p>

用户根据业务系统的英文库表名称,设置对应的业务化中文库表或帐表名称,以及对应的辅助信息,如库表所在的数据库(当使用多个数据库时)、库表的类别等。通过设置库表,用户在前台就可以用直接选择业务化的库表名称即可,而无需去记住其英文名称。<o:p></o:p>

标准字段表设置功能<o:p></o:p>

用户根据业务系统的库表名称,设置此库表对应的标准字段信息,主要为字段中文名称、业务系统中的英文名称、对应的库表名称以及该字段的数据类型、最大长度、精度等。当用户选择的某一中文库表名称后,可通过快捷键直接获取该表对应的字段信息,方便业务人员的操作。 

查询语句语法验证功能<o:p></o:p>

通过以上两个步骤进行库表及字段的设置后,业务人员就可在前台选择所需的数据库表名称、该数据库表的字段,根据业务需要输入自定义的查询语句后,工具可将用户输入的语句进行语法解析验证,一次扫描查询语句即可完成解析。语法的验证包含了对关键字(如:查询SELECT、来自FROM、条件WHERE)、标点符号、运算符号(如:加、减、乘、除)、聚合函数(如:求平均值AVG、求最大值MAX)、数学函数(如:取绝对值ABS、求余弦值COS)、日期时间函数(如:取当前日期时间SYSDATE)、字符串函数(如:求字符串长度LENGTH、字符串截取SUBSTR)、数据类型转化函数(如:转为日期TO_DATE)等的验证。如果发现此语句错误,则可提供较为准确的错误提示;如果语句验证正确,则业务系统就可对该语句进行业务操作。

 

查询语句翻译功能及业务数据获取<o:p></o:p>

对查询语句语法验证的最终目的是要将业务化的中文查询语句转化成业务系统所需要的标准英文SQL查询语句,本工具提供了将业务化查询语句转化成标准的可执行SQL语句的功能,业务系统可获取此语句直接在系统中使用。<o:p></o:p>

除了业务系统可对标准英文SQL查询语句的获取外,工具还可准确识别并获取不同子句下的内容项,包括SELECT子句的查询内容、FROM子句的表信息、WHERE子句的条件信息、GROUP BY子句的分组内容、ORDER BY子句的排序内容、表合并的表信息、循环语句的变量参数等。

  

(四)、工具的架构 

词法分析<o:p></o:p>

编译器在接收到查询语句后,首先对查询语句进行扫描,即阅读查询语句(通常以字节流表示),扫描程序就是执行词法分析(Lexer Analysis)的过程,并将字节流序列转成编译器可识别的记号流(TOKEN)。<o:p></o:p>

语法分析<o:p></o:p>

语法分析程序从扫描程序中获取记号形式的源代码,根据语法定义中的规则对查询语句进行语法分析(Parser Analysis)。如果查询语句都能应用到所定义的规则,没有产生任何错误的话,则表示此查询语句的语法是正确的,分析全部完成后,将构造出符合该语句的一棵抽象语法树(AST)。<o:p></o:p>

遍历抽象语法树<o:p></o:p>

在语法分析全部完成后,编译器则遍历这棵抽象语法树(AST),并根据需要提取相关的节点(根节点、叶子节点)信息,组成了编译器模型对象(QueryModel)。<o:p></o:p>

编译器模型对象<o:p></o:p>

编译器模型对象(QueryModel)包含查询语句的异常信息、查询语句的类型信息、查询语句的子句信息。查询语句的类型信息,如:常规语句模型对象(SelectStatementModel)、表合并模型对象(TableUnionModel)、表比较模型对象(TableCompareModel);查询语句的子句信息,如:SELECT子句模型对象(SelectListModel)、FROM字句模型对象(TableListModel)、WHERE字句模型对象(SearchConditionModel)等。同时,编译器模型对象负责接收翻译器传回的业务数据,如表名、字段名、表别名、字段别名等信息,进行各种相关的操作。<o:p></o:p>

翻译器<o:p></o:p>

翻译器提供了与业务系统查询语句的各种交互动作,包括常规语句、追加(合并)语句、比较语句、循环语句、自定义查询语句。翻译器负责接收业务系统的表名、字段名等信息及相关业务数据内容的处理,将编译器所需的数据传给编译器模型对象,并将结果传回给业务系统,供业务系统提取使用,完成对业务数据的中转控制与处理。

(五)、支持的平台

硬件环境:SUN / IBM / HP小型机/ PC SERVER
操作系统:WINDOWS、Linux、UNIX、AIX
数据库系统:Oracle、Sybase、DB2
服务器环境:WebSphere、WebLogic、JBoss、Tomcat

  • 大小: 160.9 KB
分享到:
评论

相关推荐

    antlr抽象语法树的构建

    详细介绍了antlr抽象语法树的构建,搞软件工程的相关人士可参考使用

    基于BER的ASN.1语法编译器及编解码器实现与应用

    介绍了ASN.1标记语言和BER基本编码规则。结合其在移动通信国际漫游话单中的应用场景,详细介绍了应用于移 动通信国际漫游话单处理系统中的ASN.1语法编译器和BER编解码模块的设计与实现。

    antlr4权威指南

     本书没有冗长的理论,而是从一些具体的需求出发,由浅入深地介绍了语言的背景知识、ANTLR语法的设计方法以及基于ANTLR 4实现语言识别程序的详细步骤。它尤其适用于对语言识别程序的开发感兴趣的开发者。不过,假如...

    mini_C_compiler:使用lexer(使用ANTLR4解析器生成器),语法语义分析器的C语言的编译器

    PS:确保在源文件中放入以下行(.bashrc,.zshrc等) export CLASSPATH= " .:/usr/local/lib/antlr-4.8-complete.jar: $CLASSPATH "alias antlr4= ' java -jar /usr/local/lib/antlr-4.8-complete.jar 'alias grun=...

    antlr-repackaged-4.0.jar

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的...

    编译器代码

    用antlr写语法代码, 生成java类,实现其中的接口函数。完成语法树的遍历,输出四元式。

    ANTLR指南(v3.0)第1~5章HTML版

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的...

    antlr-3.1.1.jar

    ANTLR包,一种编译器的编译器,可以根据自定义的语法规则自动生成词法/语法分析器

    antlr-3.4.jar

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的...

    关于antlr的详细教材

    ANTLR是ANother Tool for Language Recognition的缩写“又一个语言识别工具”。从名字上可以看出在ANTLR出现之前已经存在其它语言识别工具了(如LEX...定义提到的语言识别器,编译器和翻译器我们以后统称为语法分析器。

    ANTLR指南(v3.0)第1~5章WORD版

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的...

    antlr-2.7.7.jar

    使用ANTLR,用户可以轻松地编写自己的语言,并生成相应的解析器和编译器。 该JAR包中包含的主要类包括: 1. Lexer和Parser类:用于定义词法分析和语法分析的规则。 2. Token类:表示词法单元的类型和值。 3. ...

    CG.rar_antlr_antlr g4_throughqqq

    一个类C语言编译器,使用Antlr 4 生成语法CG.g4文件

    antlr的测试工程

    ANTLR 语言识别的一个工具 (ANother Tool for Language Recognition ) 是一种语言工具,它提供了一个框架,可以通过包含 Java, C++, 或 C# 动作(action)的语法描述来构造语言识别器,编译器和解释器

    grammar-tools:使用ANTLR Kotlin语法进行标记化和解析Kotlin代码

    请注意,解析树可能与PSI(由Kotlin编译器生成的解析树)不完全匹配。 这是由于这样的事实:为用户方便起见,某些错误不是在解析器级别生成的,而是稍后生成的。 反过来,语法会考虑到这种情况,

    基于JAVA实现的Tiger编译器【100012929】

    提示错误类型(词法错误、语法错误、语义错误等)、出错位置等(词法错误,语法错误ANTLR默认行为,部分语义错误:变量作用域及基本类型检查) 错误修复(ANTLR默认行为 single-token insertion and single-token ...

    antlr4-4.5

    一种关于编译原理的开发工具,通过其语法可以自动生成编译器。

    antlr中文文档(ANother Tool for Language Recognition)

    ANTLR, 语言识别的另一个工具(ANother Tool for Language Recognition ),(前身是 PCCTS)是一种语言工具,它提供了一个框架,可以通过包含Java,C++,或C#动作(action)的语法描述来构造语言识别器,编译器和解析器...

    An Introduction To ANTLR

    它是在旧金山大学的Terence Parr 领导下完成的,Terence Parr 从上世纪80年代就开始了对编译器的执着研究,开发了很多的编译工具,但最终这些工具都让他感到厌恶,而开发一种自动化的万能语法分析器一直是它的梦想,...

    Antlr简介及中文手册

    ANTLR的安装使用图解 Antlr(ANother Tool for Language Recognition)是一个工具,前身是 PCCTS,它为我们构造自己的识别器(recognizers)、编译器(compiler)和转换器(translators)提供了一个基础。

Global site tag (gtag.js) - Google Analytics