`
jiandeh
  • 浏览: 20590 次
  • 性别: 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的编译器项目中,主要目标是实现Swift编程语言到JavaScript的翻译。Swift是一种由Apple开发的开源编程语言,广泛应用于iOS、macOS和其他Apple平台的应用开发;而JavaScript则是Web开发中不可或缺的一...

    基于ANTLR4的CMM语言编译器

    总结来说,"基于ANTLR4的CMM语言编译器"项目展示了如何使用ANTLR4工具来设计和实现一个编译器,包括文法定义、词法分析、语法分析、语义分析和代码生成等关键步骤。对于学习编译原理和实践编译器开发的人员来说,这...

    编译原理中 语法编译器

    在实现语法编译器时,我们通常会用到一些工具和库,如ANTLR、Flex和Bison等。ANTLR是一个强大的解析器生成器,能处理各种语言的语法;Flex用于词法分析,Bison则用于语法分析。 对于C++环境下的语法编译器实现,...

    基于ANTLR的SQL语法分析策略与实现.pdf

    SQL是一种广泛使用的高级数据库语言,随着数据库应用范围的扩大,其语法分析的准确性对于数据库系统的设计和实现变得...在未来的开发中,这种基于ANTLR的SQL语法分析模型将进一步优化,为数据库应用提供更强的支持。

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

    ### 基于BER的ASN.1语法编译器及编解码器实现与应用 #### 一、引言 随着全球化的发展,国际漫游已成为移动通信领域的重要组成部分。为了确保不同运营商之间的通信服务顺利进行,国际漫游话单(Call Detail Records,...

    antlr抽象语法树的构建

    例如,在编译器设计中,编译器通常会首先解析源代码并构建抽象语法树,然后基于这个树来生成目标代码。 #### 三、构建抽象语法树 在本章节中,我们将详细介绍如何使用 ANTLR 构建抽象语法树。 ##### 3.1 构造语法...

    基于antlr的java解释器

    1. **ANTLR语法文件**:编写ANTLR语法文件是整个过程的第一步。你需要定义Java的语法规则,包括类定义、方法声明、表达式、控制流语句等。ANTLR会根据这个文件生成词法分析器和解析器的源码。 2. **词法分析**:...

    C#编写的语法编译器

    本文将深入探讨使用C#编写语法编译器的相关知识点,以及如何实现语句的语法分析。 首先,我们需要理解编译器的基本工作流程,这通常包括词法分析、语法分析、语义分析和代码生成四个阶段。在C#中编写编译器,我们...

    antlr java语法分析程序

    1. **定义语法规则**:开发者编写一个ANTLR语法文件(通常扩展名为.g4),在这个文件中定义语言的文法规则。 2. **生成解析器和词法分析器**:使用ANTLR工具将语法文件转换为Java源代码,生成解析器和词法分析器类。...

    编译器的编译器antlr的教程

    6. 验证安装:通过创建简单的ANTLR语法文件并尝试解析,确认ANTLR和相关插件已经正确安装和配置。 ANTLRWorks是ANTLR的一个集成开发环境,特别适合新手入门。你可以通过ANTLRWorks: 1. 创建语法文件:在...

    基于ANTLR的信号表达式解析

    ANTLR能够通过包含Java、C++或C#动作的语法描述来帮助开发者定义自己的语言规则,并基于这些规则生成相应的解析代码。在本文中,ANTLR被用于实现对信号表达式的解析功能,增加了表达式的形式,并允许在表达式中使用...

    ANTLR V3 语法解析工具

    - 构建工具:ANTLR生成的解析器和词法分析器可以用于构建各种工具,如编译器、解释器、SQL处理器等。 - 教育和研究:ANTLRWORKS的图形化界面和调试功能对教学语言处理概念非常有帮助,同时也适用于语法和编译原理的...

    一种基于ANTLR的MongoDB数据库SQL转化模型.pdf

    它是基于语法的,并能够为编译器的构建提供完整的解决方案,包括语法分析、语义分析、中间代码生成等。本文采用ANTLR来构建MongoDB数据库的SQL转化模型,说明了ANTLR在构建复杂语言模型中的应用。 3. SQL转化模型的...

    antlr实现的计算器

    在这个案例中,我们使用的描述文件很可能是用ANTLR的语法定义语言(通常称为ANTLR语法文件,扩展名为.g4)编写的。这个文件定义了计算器可以识别的表达式和运算符的语法规则。 ANTLR语法文件可能包含以下部分: 1....

    antlr 五分钟入门

    2. **ANTLR语法文件(.g4)**: - ANTLR使用类似LALR(1)的解析算法,其规则定义在.g4文件中,分为词法规则和语法规则两部分。 - 词法规则定义了输入字符串中的各种符号(如关键字、标识符、数字等)。 - 语法规则...

    Antlr简介及中文手册

    ANTLR主要用于帮助开发者构建识别器、编译器和转换器,它基于用户自定义的语言规则生成相应的解析器。这个工具可以接受文法语言描述,并生成能够识别这些语言的程序,支持Java、C++、C#等多种编程语言。 ANTLR的...

    基于抽象语法树和改进粒子群算法的代码同源性分析

    本文将详细探讨基于抽象语法树(Abstract Syntax Tree, AST)和改进粒子群优化算法(Improved Particle Swarm Optimization, IPSO)的代码同源性分析方法,并结合ANTLR工具进行解析。 首先,让我们理解抽象语法树。...

    基于simple语言的简单编译器

    对于想要深入学习编译器设计的学生,可以从这个项目中了解基本的编译器构建过程,例如使用ANTLR或Flex&Bison等工具进行词法和语法分析,以及如何实现简单的类型系统和控制流。 9. **项目扩展** 要完善这个编译器...

Global site tag (gtag.js) - Google Analytics