`
庄表伟
  • 浏览: 1151335 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ANTLR学习心得——抄书(1)

阅读更多

我的BLOG很少,或者说几乎从不抄书,大多数都是原创。但是,这一次,我觉得大抄而特抄一把,因为关于"编译原理"的很多知识,我实在是了解得太少了,东鳞西爪的看各种互联网上的资料,也始终无法认识透彻,我买的那本裘老师翻译的书,又实在是写得过于飘忽,不能明白。还好我是"超星图书馆"的会员,前两天我在图书馆里找到了一本《编译原理》的教材,由陈英编著,一看之下,顿时明白了好多。因此决定照抄出来,至于是不是侵犯陈老师的版权,也不多想了,到时候陈老师要是找我的麻烦,我再给他赔礼道歉吧。
 
定义2.1(字母表)
字母表是元素的非空有穷集合。字母表中的元素称为符号,因此字母表也称为符号集,它包含了语言中允许出现的全部符号。不同的语言可以有不同的字母表,例如,汉语的字母表中包括汉字、数字和标点符号等。二进制数语言的字母表是{0,1}。C语言的字母表可以认为是一切可打印字符组成的集合。通常用希腊字母Σ或大写英文字母等表示字母表,用集合元素表示形式枚举字母表中的符号。例如,字母表A={a,b,c,d}与字母表Σ={0,1}等:

定义2.2(符号串)
由字母表中的符号组成的任何有穷序列称为符号串。
例如,001110是字母表Σ={0,1}上的符号串,字母表A={a,b,c}上的一些符号串有:a,b,c,b,ba,aaca等。通常使用小写字母表示符号串,x=STR表示x是由符号S、T和R,并按此顺序组成的符号串。
符号串总是建立在某个特定字母表上的,且仅由字母表上的有穷多个符号组成。在符号串中,符号的顺序是很重要的,例如符号串ab就不同于ba,abca和aabc也不同。
如果某符号串x中有m个符号,则称其长度为m,表示为|x|=m。例如,定义在字母表Σ={0,1}上的符号申00lll0的长度是6。
允许不包含任何符号的符号串,称其为空符号串或空串。空串用ε表不,其长度为0,即|ε|=0。
从离散数学的角度定义符号串,则有:
(1)字母表Σ上的符号串;
(2)若x是Σ上的符号串,且a∈Σ,则xa或ax是Σ上的符号串;
(3)y是Σ上的符号串,当且仅当y可由(1)和(2)产生。
习惯上,也称符号串为字符串或字。
下面说明符号串的前缀、后缀和子符号串及与符号串相关的概念。
符号串的前缀、后缀和子符号串:设x是一个符号串,把从x的尾部删去0个或者若干个
符号之后剩余的部分称为x的前缀。类似,从x的首部删去0个或若干个符号之后剩余的部
分称为x的后缀。例如,设x=abcd,则ε,a,ab,abc都是x的前缀:而ε,c,bc,abc都是x
的后缀。若x的前缀(后缀)不是x自身,则将其称为x的真前缀(真后缀)。
从—个符号串中删去它的一个前缀或一个后缀之后剩余的部分称为该符号串的子符号
串或子串。例如,x=abc,则ε,a,b,c,ab,bc,cd,abc,bcd及abcd都是x的子字符串。
在给出符号串定义的基础上,讨论有关符号串的一些运算。

定义2.3〔符号串的连接)
设x和y是两个符号串,如果将符号串y直接拼接在符号串x之后,则称此操作为符号
串x和y的连接,记作xy。
例如,j=abc,k=xyz,则jk=abcxyz,kj=xyzabc。显然连接运算是有序的。—般来
说xy≠yx,仅当s为空串,则有εx=xε=x。

定义2.4(符号串的方幂)
设x是某字母表上符号串,把x自身连接n次得到符号串z,即z=xx…x(n个x),称是符号串x的n次幂,记作z=x^n。
设x是符号串,则有定义
x^0=ε
x^1=x
x^2=xx
x^3=x^2x=xx^2=xxx
......
x^n=xx..x(n个x)
例如:x=abc,x^2=abcabc,x^3=abcabcabc。

下面定义几个符号串的集合运算。
定义2.5(符号串集合的乘积)
设A、B是两个符号串集合,AB表示A与B的乘积,则有定义
AB={xy|x∈A,y∈B}
例如,设A={ab,c},B={d,ef},则
AB={abd,abef,cd,cef}

注意有{ε}A=A{ε}=A,⊙A=A⊙=⊙,其中⊙为空集。

定义2.6(符号串集合的方幂)
设A是符号串集合,A自身的乘积可以用方幂表示。则有定义
设P为字符串集:
A^0={ε}
A^1=A
A^2=AA
A^3=A^2A=AA^2=AAA
......
A^n=AA...A(n个A)
显然有:
A^(i+j)=A^iA^j
例如,P=(ab,x,aby),则PP={abab,abx,ababy,xab,xx,xaby,abyab,abyx,abyaby}。

定义2.7(符号串集合的并)
设P、Q为字符串集,集合P∪Q为P和Q的并,它的元素是P或Q中的元素。
例如,  P={0,1,01}  Q={0,10,11,00},则
P∪Q={0,1,01,10,11,00}

定义2.8(符号串集合的闭包)
设A为符号串集,A的正闭包记作A+,则有
A+=A^1∪A^2∪...∪A^n∪...
A的自反闭包记作A*,则有
A*=A^0∪A+={ε}∪A+=A+∪{ε}
由定义知,A+=AA*。
例如,A={01,10},则有
A*={ε,01,10,0110,1001,010101,100110,...}
A+={01,10,0110,1001,010101,100110,...}

分享到:
评论

相关推荐

    antlr3最终手册

    书中包含了多位行业专家的评论和推荐,如Martin Fowler、Bob McWhirter、Neal Gafter等,他们从各自领域的角度分享了ANTLR3的应用经验和见解,为读者提供了多维度的学习参考。 ### 职业发展与技能提升 手册强调了...

    JavaEE源代码 antlr-2.7.6rc1

    JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源...

    antlr-2.7.7.jar.zip

    这个"antlr-2.7.7.jar.zip"文件是ANTLR的一个特定版本——2.7.7的Java版本,包含ANTLR库的jar文件。 ANTLR的工作原理基于上下文无关语法(Context-Free Grammar,CFG),它可以解析符合给定语法的输入,并生成抽象...

    The Definitive ANTLR4Reference 学习笔记

    学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一系列有效句子组成,每个句子包含短语,而短语又由子短语组成。语法是语言的语法规则的正式定义,它指定了子...

    The Definitive ANTLR 4 Reference.pdf_antlr_

    1. **高级语法定义**:ANTLR 4支持基于EBNF(扩展巴科斯范式)的语法规则定义,使得语法表达清晰易懂。它允许在规则中使用动作代码,使解析过程与目标代码紧密集成。 2. **自动错误恢复**:ANTLR 4具有内置的错误...

    The Definitive ANTLR 4 Reference.pdf

    1. **ANTLR 4概述**:首先,书籍会介绍ANTLR 4的基本概念,包括它的历史、目标以及与前代版本的区别。ANTLR 4引入了许多改进,例如更高效的解析算法、高级的错误处理机制以及对Unicode的全面支持。 2. **语法规则**...

    antlr4读书笔记七八章

    通过本章的学习,我们了解到ANTLR4提供的两种强大工具——解析树监听器和访问者模式,可以帮助我们将特定于应用程序的代码与语法解耦,从而提高代码的可维护性和可复用性。无论是通过监听器响应规则事件还是通过访问...

    The+Definitive+ANTLR+4+Reference 学习笔记word

    总的来说,《The Definitive ANTLR 4 Reference》是一本详尽的ANTLR4参考书,对于那些希望利用ANTLR4进行语言解析和工具开发的人来说,这是一份宝贵的资源。通过学习笔记,读者不仅可以了解ANTLR4的基本概念,还能...

    编译原理学习框架antlr4

    在编译原理的学习中,ANTLR4扮演了核心角色。编译器是将高级语言转换为机器语言的程序,这一过程分为词法分析、语法分析、语义分析和代码生成四个主要阶段。ANTLR4主要用于语法分析阶段,它通过解析源代码的语法结构...

    The Definitive ANTLR 4 Reference

    《ANTLR 4权威指南》这本书详细介绍了ANTLR v4的使用和相关...总之,《ANTLR 4权威指南》是一本全面的ANTLR v4学习资源,无论对于初学者还是经验丰富的开发者,都是理解和掌握ANTLR v4这一强大工具不可或缺的参考书。

    antlr.jar.zip

    描述"antlr.jar"直接指出了这个压缩包解压后的主要内容——ANTLR的Java实现,即一个名为"antlr.jar"的文件。这个JAR文件包含了ANTLR解析器生成器的全部Java代码,开发者可以将其引入到Java项目中,利用ANTLR的能力来...

    antlr权威指南

    ANTLR(ANother Tool for Language Recognition)是一门强大的解析器生成器,主要用于读取、处理、...书中涵盖了从基本概念到高级特性的详细讲解,同时提供了丰富的实例和实战指导,是学习ANTLR不可或缺的参考资料。

    ANTLR

    1. **ANTLR的基本概念**:讲解ANTLR的基本组成和工作原理,包括如何定义语法规则、如何生成解析器和词法分析器。 2. **ANTLR的安装与配置**:介绍如何在不同的开发环境中安装ANTLR库,如在Java、Python等环境下的...

    ANTLR入门 中英文

    书中的实例和练习帮助初学者快速掌握ANTLR的使用方法。同时,马维达的中文翻译确保了国内读者能无障碍地理解ANTLR的核心理念和技术。 ANTLR的应用场景非常广泛,比如构建自定义编程语言、解析配置文件、实现SQL查询...

    antlr-2.7.6.jar

    标题“antlr-2.7.6.jar”指的是ANTLR库的特定版本——2.7.6,这是一个Java版本的库文件。.jar(Java ARchive)文件是Java平台上的可执行文件,包含了ANTLR的相关类和资源,使得开发者能够在Java环境中使用ANTLR的...

    Antlr4 C++ 计算器

    总之,"Antlr4 C++ 计算器"是一个学习ANTLR4和语言解析技术的好起点,它展示了如何使用ANTLR4生成的解析器和词法分析器在C++环境中解析和执行数学表达式。通过深入理解和实践这个项目,你可以提升对编译原理和语言...

    antlr-2.7.7.jar和antlr-2.7.6.jar

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR被广泛应用于各种编程语言的编译器和解释器的构建,它能生成Java、C#、Python...

    antlr4-master 源码

    总之,深入学习ANTLR4的源码,不仅可以帮助我们成为ANTLR4的专家,也能加深对解析理论、编译器构造和语言设计的理解。这是一项有价值且富有挑战性的任务,对于任何从事相关领域工作的人来说都是一个宝贵的资源。

Global site tag (gtag.js) - Google Analytics