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

版权声明:本文为Jurbo原创文章,转载请加上链接和作者名,标明出处。 https://blog.csdn.net/Jurbo/article/details/78012604

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


文法的基本概念

正如英语是由句子组成的集合,而句子又是由单词和标点符号组成的序列那样。程序设计语言 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

猜你喜欢

转载自blog.csdn.net/Jurbo/article/details/78012604