今天,和师兄合作完成的基于Eclipse的文本编辑器插件的基本功能已经实现了。在词法语法的分析上做得还不是特别好,所以准备学习Antlr以加强我们的文本编辑器插件的词法语法分析能力。今天先对Antlr做一个简单的介绍。
1 ANTLR简介
ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。ANTLR可以通过断言(Predicate)解决识别冲突;支持动作(Action)和返回值(Return Value)来;更棒的是,它可以根据输入自动生成语法树并可视化的显示出来(这一点我将在下面的例子中演示)。由此,计算机语言的翻译变成了一项普通的任务—在这之前YACC/LEX显得过于学院派,而以LL(k)为基础的ANTLR虽然在效率上还略有不足,但是经过近些年来的升级修改,使得ANTLR足以应付现存的绝大多数应用。感谢Terence Parr博士和他的同事们十几年来的出色工作,他们为编译理论的基础和语言工具的构造做了大量基础性工作,也直接导致了ANTLR的产生。
1.1 词法分析器(Lexer)
词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字,标识符,符号(symbols)和操作符供语法分析器使用。
1.2 语法分析器(Parser)
编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。
无论是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是类似的东西,而只是在分工上有所不同而已。
1.3 树分析器 (tree parser)
1.4 ANTLR
ANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的词法分析规则。然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用他们将输入的文本进行编译,并转换成其他形式(如AST—Abstract Syntax Tree,抽象的语法树)。
其官方网站为: http://www.antlr.org/
相关推荐
学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一系列有效句子组成,每个句子包含短语,而短语又由子短语组成。语法是语言的语法规则的正式定义,它指定了子...
这本书的学习笔记将帮助读者深入理解ANTLR4的工作原理和实践应用。 ANTLR4的核心功能包括: 1. **语法定义**:ANTLR4允许用户使用EBNF(扩展巴科斯范式)来定义语法规则,这是一种形式化的语法描述语言。这些规则...
这篇笔记主要涵盖了ANTLR的相关知识,结合了“编译原理LL(K).ppt”的内容,我们将深入探讨ANTLR的工作原理以及在源码分析和工具开发中的应用。 ANTLR的工作流程主要包括以下几个步骤: 1. **语法定义**:ANTLR使用...
### ANTLR4读书笔记七八章详解 #### 第七章:从特定于应用程序的代码解耦语法 在学习了如何使用ANTLR定义语言语法后,我们了解到语法本身虽然能够验证一个输入句子是否符合语言规范,但对于实际开发语言应用程序来...
例如,Terence Parr本人就使用ANTLR开发了一个名为TML(Terence's Markup Language)的简单标记语言,用于撰写课程笔记和其他文档。TML被设计为易于编写,通过ANTLR转换成HTML或PDF格式,从而简化了文档创作的过程。...
ANTLR 4简明教程是一本介绍ANTLR 4使用方法的书籍,内容基于最新版ANTLR 4的语法编写,作者在阅读官方参考书时整理了自己的读书笔记,并在此基础上增加了新的内容。这本书以开源形式编写,源码托管在GitHub上,方便...
【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...
为了搭建 Spring 开发环境,我们需要在项目中引入必要的库文件,如 Ant、ANTLR、AOP Alliance、ASM、DOM4J、JTA、Jakarta Commons、CGLIB 和 Log4j 等。同时,还需要在 XML 配置文件中指定 DTD(Document Type ...
【CXF Webservice初学笔记】 Apache CXF 是一个开源的 Web 服务框架,它允许开发者创建和消费各种类型的 Web 服务。CXF 整合了 XFire 和 Celtix 两个项目,提供了一套全面的工具和服务接口,支持 SOAP、RESTful、WS...
7. **antlr-2.7.6rc1.jar**:ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。在DWR中,它可能用于解析配置文件或生成动态Java代码。 8. **standard-1.1.2.jar**:可能是用于...
本文主要基于一份关于 Hibernate 的学习笔记,详细阐述 Hibernate 的基本配置流程及常见问题。 #### 二、Java 配置 Hibernate 配置 Hibernate 并不是一项特别复杂的工作,但需要注意一些细节,否则很容易出现错误...
压缩包内的文档文件可能是陈意云教授的课程补充资料或学生的学习笔记。例如,"chap1.doc"到"chap6.doc"可能对应课程的六个主要章节,详细阐述了编译原理的各个主题。"contents.doc"可能是课程大纲,列出了每个章节的...
Hibernate 运行需要一系列的 jar 包,包括:antlr.jar、cglib.jar、asm.jar、commons-collections.jar、commons-logging.jar、jta.jar 和 dom4j.jar。这些库分别用于解析 HQL 语句、动态生成类、集合操作、日志记录...
### Hibernate初学笔记知识点概述 #### 一、Hibernate环境的搭建 - **1.1 引入基础Jar包** - **hibernate3.jar**:这是Hibernate的核心库,可以在Hibernate项目的根目录下找到。 - **Required Jars**:位于`lib/...
线性代数、计算机体系结构、概率统计和编程课程的笔记1 为SIS (第一学期)和组装(第二学期)的计算机体系结构课程进行处理 II anno (AY 2018-2019): 算法(交叉问题示例)、系统(练习指南)、软件工程和...
通过参与 TigerWorks 项目,学生将深入理解编译器的工作原理,学习如何使用 ANTLR 设计和实现解析器,以及如何进行语义分析、中间代码生成和优化。此外,他们还将学习如何编写测试用例以确保编译器的正确性,这对于...