关于给定文法G,如何产生语言L(G),将进一步给出其形式化定义。为此,首先给出一些基本术语的定义。
· 定义2.11(直接推导“→”)
有V=αA β=αγ β=W (α,β,γ∈(VN∪VT)*),当且仅当P中存在一条规则A→Y,称V直接推导出w(或W直接归约到V),记作:V→w。
· 定义2.12(直接推导序列)
如果存在V=a0→a1,a1→a2,...,an-1→an=W或a1→a2→a3→...→an-1→an,则V经过n步(n>0)可以推导出W,记作:v→+w。当v→+W或v=w,记作:v→*w。
· 定义2.13(最左(右)推导)
在推导过程中,总是对句型中的最左(右)边的非终结符进行替换,成为最左(右)推导。
· 定义2.14(句型)
设有文法G[S],若S=*α (α∈(VN∪VT)*),则称α为G[S]的句型。
· 定义2.15(句子)
设有文法G[S],若S=*α (α∈VT*),则称α为G[S]的句子。
· 定义2.16(规范推导/规范句型/规范归约)
最右推导也称为规范推导。仅用规范推导得到的句型称为规范句型,规范推导的逆序为规范归约。
· 定义2.17(文法的递归)
若文法G存在形如αAβ→αAβ'的推导,则称G是递归文法。
例2.5 设有文法G1:E→E+E|E*E|(E)|i
有E→E……则文法G1是直接递归文法。
例2.6 设有文法G2:
T→Qc|c
Q→Rb|b
R→Ta|a
有T→Qc→Rbc→Tabc,即T→Tabc,则文法G2是间接递归文法。
· 定义2.18(语言)
文法G所产生的语言L(G):
L(G)={α|α∈VT*∧S*→α,S是文法G的开始符号}
需要指出的是,文法和语言的相互关系并非是惟一对应的,形式语言理论可以证明
(1) 给定文法G,能从结构上惟一地确定相应的语言。
(2) 给定一种语言,能确定其文法,但这种文法不是惟—则,即
L(G1)=L(G2)=...=L(Gn)
为此,引出文法等价的概念。
· 定义2.19(文法等价)
若L(G1)=L(G2),则称文法G1和G2是等价的。
文法等价的概念说明,两个文法尽管它们的规则不尽相同,只要所产生的语言相同,则认为这两个文法是等价的。
例2.7 设有文法G1
G1={{S},{0},S,{S→S0,S→0}}
由于存在
S→S0→S00→S000→...→S0n-1→0n
则该文法表示的语言为 L(G1)={0n|n>=1}
设有文法G1',G1'={{S},{0},S,{S→0S,S→0}}
由于存在 S→0S→00S→000S→...→0n-1S→0n
则该文法表示的语言为 L(G1')=L(G1')=L(G1)
很显然,G1≠G1',但却存在L(G1')=L(G1),所以文法G1和G1'等价。
利用文法等价的概念,当讨论编译程序实现的有关问题的,某种分析技术对文法会有不同程度的限定。当文法不能满足某种分析技术的应用条件时,需要对文法进行等价变换,使之适应相应的分析技术。一般文法等价变换是针对
*使文法适用于某种分析技术
*消除文法的二义性
*使文法类与语言类一致
*使文法满足特殊需要
分享到:
相关推荐
书中包含了多位行业专家的评论和推荐,如Martin Fowler、Bob McWhirter、Neal Gafter等,他们从各自领域的角度分享了ANTLR3的应用经验和见解,为读者提供了多维度的学习参考。 ### 职业发展与技能提升 手册强调了...
py3antlr4book, 隐藏ANTLR4图书源代码到Python3版本 py3antlr4book隐藏ANTLR4图书源代码到 python 3版本。如何使用( Windows )安装 python安装 antlr4 python3运行时 pip install antlr4-python
在“Antlr3.Runtime_C#_”这个主题中,我们主要关注的是ANTLR针对C#目标的运行时库,即Antlr3.Runtime.dll。这个库是ANTLR 3版本的C#运行时组件,用于支持由ANTLR生成的C#解析器在.NET平台上运行。ANTLR 3.5是这个库...
在这个“ANTLR3学习以及简单的应用--使用sql语句查询集合中的对象”的主题中,我们主要关注如何利用ANTLR3解析SQL语句,以便在非关系型数据库(NoSQL)环境下进行查询操作。由于NoSQL数据库通常不支持标准SQL,因此...
这个"antlr-2.7.7.jar.zip"文件是ANTLR的一个特定版本——2.7.7的Java版本,包含ANTLR库的jar文件。 ANTLR的工作原理基于上下文无关语法(Context-Free Grammar,CFG),它可以解析符合给定语法的输入,并生成抽象...
学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一系列有效句子组成,每个句子包含短语,而短语又由子短语组成。语法是语言的语法规则的正式定义,它指定了子...
3. **LL(*)和预测LL(*)解析**:ANTLR 4使用预测LL(*)算法,这是一个自适应的左到右解析策略,能够处理许多复杂的上下文无关语法,包括左递归和右递归。 4. **树解析器**:ANTLR 4不仅生成词法分析器和语法解析器,...
3. **词法分析**:ANTLR 4同时处理词法和语法分析。词法分析阶段将输入分解成词法符号,书里会讲解如何定义词法规则和创建词法分析器。 4. **语法分析**:ANTLR 4使用LL(*)解析策略,能处理左递归和右递归的语法。...
通过本章的学习,我们了解到ANTLR4提供的两种强大工具——解析树监听器和访问者模式,可以帮助我们将特定于应用程序的代码与语法解耦,从而提高代码的可维护性和可复用性。无论是通过监听器响应规则事件还是通过访问...
总的来说,《The Definitive ANTLR 4 Reference》是一本详尽的ANTLR4参考书,对于那些希望利用ANTLR4进行语言解析和工具开发的人来说,这是一份宝贵的资源。通过学习笔记,读者不仅可以了解ANTLR4的基本概念,还能...
在编译原理的学习中,ANTLR4扮演了核心角色。编译器是将高级语言转换为机器语言的程序,这一过程分为词法分析、语法分析、语义分析和代码生成四个主要阶段。ANTLR4主要用于语法分析阶段,它通过解析源代码的语法结构...
《ANTLR 4权威指南》这本书详细介绍了ANTLR v4的使用和相关...总之,《ANTLR 4权威指南》是一本全面的ANTLR v4学习资源,无论对于初学者还是经验丰富的开发者,都是理解和掌握ANTLR v4这一强大工具不可或缺的参考书。
ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二...对于学习ANTLR,了解不同版本间的差异也是很重要的,这样可以根据具体需求选择合适的工具。
描述"antlr.jar"直接指出了这个压缩包解压后的主要内容——ANTLR的Java实现,即一个名为"antlr.jar"的文件。这个JAR文件包含了ANTLR解析器生成器的全部Java代码,开发者可以将其引入到Java项目中,利用ANTLR的能力来...
ANTLR(ANother Tool for Language Recognition)是一门强大的解析器生成器,主要用于读取、处理、...书中涵盖了从基本概念到高级特性的详细讲解,同时提供了丰富的实例和实战指导,是学习ANTLR不可或缺的参考资料。
ANTLR(ANother Tool for ...通过学习ANTLR,开发者可以快速构建出高效、灵活的解析器,实现对各种结构化文本的解析和处理,这对于开发语言工具、构建DSL(领域特定语言)或者进行代码分析等工作具有极大的价值。
书中的实例和练习帮助初学者快速掌握ANTLR的使用方法。同时,马维达的中文翻译确保了国内读者能无障碍地理解ANTLR的核心理念和技术。 ANTLR的应用场景非常广泛,比如构建自定义编程语言、解析配置文件、实现SQL查询...