编译原理(2):文法和语言

本文内容:介绍文法和语言的定义,字母表(符号集)和字符串上的操作,文法的类型,上下文无关文法及其语法树,提供典型例题和详细解答。


文法的基本概念

正如英语是由句子组成的集合,而句子又是由单词和标点符号组成的序列那样。程序设计语言 C 语言,是由 C 程序所组成的集合,而程序是由类似 if , begin, end 的符号,字母和数字这样一些基本符号所组成。

从字面上看,每个程序都是一个“基本符号”串,设有一基本符号串,那么 C 语言可看成是在这个基本符号集上定义的,按一定规则构成的一切基本符号串组成的集合。

字母表

字母表Σ 是一个有穷符号集合。字母表也称为符号集。

符号:字母、数字、标点符号…..例:ASCII 字符集。

字母表上的运算

字母表与字母表的乘积

这里写图片描述

字母表的 n次幂:长度为 n 的符号串构成的集合

这里写图片描述

字母表的正闭包:长度正数的符号串构成的集合

这里写图片描述

字母表的克林闭包:任意符号串(长度可以为零)构成的集合

这里写图片描述

符号串

由字母表中的符号组成的任何有穷序列称为符号串。

串 s 的长度,通常记作 |s| ,是指 s 中符号的个数。例:|aab|=3。

空串是长度为 0 的串,用 ε 表示,|ε|=0。

串上的运算

串的连接:如果 x 和 y 是串,那么 x 和 y 的连接,是把 y 附加到 x 后面而形成的串,记作 xy。

例如,如果 x=dog 且 y=house,那么 xy=doghouse。

空串是连接运算的单位元,即,对于任何串 s 都有, εs=sε=s。

串的幂运算:将 n 个 串连接起来。

这里写图片描述

文法的定义

分析一个自然语言的例子,得出句子的构成规则。

这里写图片描述

文法的形式化定义

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

例:

这里写图片描述

产生式的简写

这里写图片描述

语言的定义

推导和归约

这里写图片描述

这里写图片描述

例子:

这里写图片描述

句型和句子

这里写图片描述

例子:

这里写图片描述

语言的形式化定义

由文法 G 的开始符号 S 推导出的所有句子构成的集合称为文法 G 生成的语言,记作 L(G)。

例子:

这里写图片描述

语言上的运算

这里写图片描述

文法的分类

0型文法,无限制文法

这里写图片描述

1型文法,上下文有关文法

这里写图片描述

2型文法,上下文无关文法

这里写图片描述

3型文法,正规文法

这里写图片描述

四种文法之间的关系

这里写图片描述

上下文无关文法的分析树

这里写图片描述

分析树是推导的图形化表示

这里写图片描述

句型的短语

给定一个句型,其分析树中的每一颗子树的边缘称为该句型的一个短语

如果子树只有父子两代节点,那么这课子树的边缘称为该句型的一个直接短语。

这里写图片描述

二义性文法

如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的。

例:

这里写图片描述

二义性文法的判定

对于任意一个上下文无关文法,不存在一个算法,判断它是无二义性的,但能给出一组充分条件,满足这组充分条件的文法是无二义性的。

  • 满足,肯定无二义性
  • 不满足,也未必就是有二义性的

习题

这里写图片描述

解析:D。S->xSx->xxSxx->x…S…x->x…y..x->x^nyx^n。因为S->y,所以 n 可以为0,即 n 的范围为大于等于0。

这里写图片描述

解析:C。A->bA->bca。第二次替换A的时候,使用候选式A->ca 即可。

这里写图片描述

解析:D。S->S0(使用候选式S->S0)->S10(使用候选式S->S1)->Sc10(使用候选式S->Sc)->bc10(使用候选式S->b)。

这里写图片描述

解析:D。定义。

这里写图片描述

解析:A。0型文法定义。

这里写图片描述

解析:B。定义。

这里写图片描述

解析:B。定义。

这里写图片描述

解析:A。和第五题一样。

这里写图片描述

解析:D。① A->cc ⑤A->bA->bbA->bbbA(前面几步是用A->bA不停替换)->bbbcc(此处使用候选式A->cc,替换A)

这里写图片描述

解析:C。5棵树,自己画。知识点相关是语法树部分。按顺序画。

这里写图片描述

解析:C。S->aaS->aaaaS->a…(a的个数为偶数个,因为S前面总有2个a)S->a..abc(此处应用候选式S->abc)->a的2k-1次方 * bc(因为偶数个a再乘一个a,就变成奇数了,奇数是2k-1)

这里写图片描述

解析:A。如果应用了候选式“xSx”,则表示在S的左右分别增加一个x;如果应用了候选式“xS”,则表明只在S的左边增加一个x。最后结束递归时,将S替换成y,因此,y左边的x的个数不会比y右边的x的个数少。这里用表示将m个x连接起来,因此选择答案A。

这里写图片描述

解析:B。定义

这里写图片描述

解析:A。定义

这里写图片描述

解析:D。考察正闭包的定义

这里写图片描述

解析:D

  • 19
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《编译系统透视:图解编译原理》是一本以图解为主导的编译原理教材。编译原理是计算机科学中的一门重要课程,主要研究编译器的计和实现方法。 《编译系统透视:图解编译原理》通过直观的图解方式,清晰地阐述了编译器的工作原理和各个环节的具体实现。书中从语言的词法分析、语法分析、语义分析,到代码生成和优化等方面,系统地介绍了编译器的整个工作流程。 这本教材的一大特色是使用大量的图示来展示编译器的各个过程,这使得抽象和复杂的概念变得直观易懂。图解的方式可以帮助读者更好地理解编译器的工作原理,并且能够通过具体的例子更好地掌握编译器计和实现的方法。 《编译系统透视:图解编译原理》适合计算机相关专业的学生和从事编译器开发相关工作的人员阅读。对于初学者来说,这本书可以帮助他们建立对编译原理的基本理解和认知。对于已经具备一定编译器基础的人员来说,这本书可以帮助他们进一步深入理解编译器的实现细节和技术要点。 总之,《编译系统透视:图解编译原理》是一本十分优秀的编译原理教材,通过图解的方式生动展示了编译器的工作原理,不仅有助于读者理解编译原理的基本概念,也有助于读者掌握编译器的计和实现方法。 ### 回答2: 《编译系统透视:图解编译原理》是一本由高级程序语言编译原理方面的专家撰写的编译原理教材。该书结合图解的方式,以简明易懂的语言介绍了编译系统的基本概念和原理,帮助读者理解编译器的工作原理及其在程序开发中的作用。 书中首先介绍了编译器的基本功能和作用,以及编译器的主要组成部分,如词法分析器、语法分析器等。然后,通过具体的案例分析,详细解释了编译器的各个组成部分的工作流程和原理,并伴有大量的示意图,有助于读者更好地理解。特别是对一些较为复杂的编译原理概念,如语法分析树、中间代码生成等,通过图解的方式进行了详细解释。 同时,该书还介绍了一些实际的编译器实现技术和工具,如词法分析器生成器、语法分析器生成器等。这些工具的使用可以大大简化编译器的实现过程,并提高编译器的效率和可靠性。书中提供了对这些工具的简单介绍和使用方法,帮助读者快速上手。 总的来说,《编译系统透视:图解编译原理》是一本非常实用的编译原理入门教材,它不仅讲解了编译器的基本原理和工作流程,还介绍了一些实用的工具和技术。通过学习这本书,读者不仅可以对编译原理有一个全面的了解,还可以更好地理解和使用现有的编译器工具。无论是对正在学习编译原理的学生,还是对从事程序开发的程序员来说,这本书都是一本不可多得的参考书。 ### 回答3: 编译系统透视:图解编译原理是一本图文并茂的编译原理教材,通过图解的方式生动地介绍了编译系统的工作原理和过程。编译系统是将高级程序语言转换成可执行代码的工具,它包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个阶段。 该书首先介绍了编译系统的基本概念和作用,并通过图示来解释编译器的组成部分。然后,详细讲解了编译器的各个阶段,包括词法分析器的工作原理、语法分析器的LL(1)文法和LR分析方法、语义分析器的类型检查和符号表管理等内容。同时,还揭示了中间代码生成、代码优化和目标代码生成的关键技术和原理。 该书以通俗易懂的方式介绍编译器相关的核心概念和算法,通过图解的方式形象地展示整个编译过程,使读者能够更好地理解和掌握编译原理。此外,书中还提供了大量的实例和练习题,帮助读者加深对编译原理的理解和应用。 总之,编译系统透视:图解编译原理是一本理论与实践相结合的编译原理教材,适合计算机相关专业的学生和从事编译器开发的工程师阅读。它通过图解的方式使抽象的编译原理变得直观易懂,帮助读者深入了解编译系统的运作机制,提高编写高效编译器的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值