文章目录

  • 第二章 文法和语言
  • 2.1 文法概念
  • 2.2 符号和符号串
    • 2.2.1 字母表(符号集)
    • 2.2.2 符号串
    • 2.2.3 符号串的连接
    • 2.2.4 符号串集合的乘积
    • 2.2.5 符号串和符号串集合的方幂
    • 2.2.6 符号串集合的正闭包和星闭包
  • 2.3 文法和语言的形式定义(6个重点定义)
    • 定义2.1:形式文法
      • 重点:PL/0语言语法的EBNF描述
    • 定义2.2 推导与归约
    • 定义2.3 长度为n的推导
    • 定义2.4 广义推导、广义规约
    • 定义2.5 最左推导
    • 定义2.6 最右推导
    • 定义2.7 句型
    • 定义2.8 句子
    • 定义2.9 语言转文法
      • 重点:语言和文法之间的转换
    • 定义2.10 等价
      • 重点:递归规则与递归文法
  • 2.4 文法的类型—Chomsky分类
    • 2.4.1 0型文法
    • 2.4.2 1型文法
    • 2.4.3 2型文法
    • 2.4.4 3型文法(正规文法,正则文法)
  • 2.5 语法树和二义性 (重点)
    • 定义2.14 语法树
      • 树相关定义
    • 定义2.15 简单短语
    • 定义2.16 句柄
      • 练习1:写推导过程、语法树、
      • 练习2:语法树
    • 定义2.16 二义性
      • 为什么要避免文法产生二义性?
      • 对二义性的处理:
  • 2.6 句型的分析
    • 定义2.17 句型分析
    • 定义2.18 句型分析算法
      • 1.自上而下分析法
      • 2.自下而上分析法
      • 练习题
  • 2.7 文法的实用限制和变换(可略)
    • 定义 有害规则、多余规则
    • 定理 构造文法
      • 【学习笔记】
      • 【实验内容】
      • 【学习资料】

第二章 文法和语言

2.1 文法概念

  • 文法:描述语言的语法形式之一
  • 文法是描述语法的形式化工具。

例:以汉语为例,

① 句子是由主语和谓语构成;

② 主语是名词;

③ 名词是“王鸣” 或者“英文”;

④ 谓语是由动词和直接宾语构成;

⑤ 动词是“是” 或者“学习” ;

⑥ 直接宾语是名词。

2.2 符号和符号串

2.2.1 字母表(符号集)

符号的非空有穷集合,用V或∑表示。

例:V = { a, b } ∑ = { a, b, c } V1 = { a, b, c, …, z } 英语小写字母表 V2 = { book, pencil, pen, paper } 也是字母表(单词表)

2.2.2 符号串

由字母表中的符号组成的任何有穷序列,简称串或者字。

例:设V = { a, b, c },则V上的符号串有: a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, abc, acb, …

设 x 是一个符号串,其长度记作| x |,即 是 x 串中所含符号的个数。长度为0的串称 为空串,记作ε。

例:| a | = 1, | abca | = 4, |ε| = 0

2.2.3 符号串的连接

设x = abc, y = fgh是两个符号串,则 x和y的联结记作:

xy = abcfgh

也是一个符号串。这是一种隐式运算, 没有运算符。

注意:设x, y是任意符号串,

① 有εx = xε= x

② xεy = xy 但xy = yx不成立,

③ | xy | = | x | + | y |

设z = xy是符号串,则称x是z的头,y是z的尾。

若y非空,则x是z的真(固有)头或真前缀

若x非空,则y是z的真(固有)尾或真后缀

例: 设z = abc, 则

z的头有ε、a 、 ab、 abc;

z的真头有除了abc,其余都是z的真头;

2.2.4 符号串集合的乘积

(利用串的联结定义)

凡A,B是符号串集合,A和B的乘积定义为

AB = { xy | x∈A, y∈B }

例:设A = { a, b }, B = { c, d } , 则有

AB = { ac, ad, bc, bd }

注意:① {ε}A = A{ε} = A (∵εx = xε= x)

​ ② { }A = A{ } = { }

因为{ε}<>{ }, {ε}是空串ε组成的集合, 有一个元素,但{ }是空集,没有元素。

2.2.5 符号串和符号串集合的方幂

(利用串的连接定义和串集的乘积定义)

凡x是符号串,有x0=ε,x1 = x,x2 = xx,…, xn = xxn-1 = xn-1x (n>0)

凡A是符号串集合,有A0 = {ε}, A1 = A, A2 = AA, …, An = AAn-1 (n>0)

例:设A = { a, b }, 则

A0 = {ε}, A1 = { a, b},

A2 = AA = {aa, ab, ba, bb },

A3 = AA2 = {aaa, aab, aba, abb,baa, bab, bba, bbb}, …

2.2.6 符号串集合的正闭包和星闭包

凡A是符号串集合,则

A的正闭包定义为:A+=A1∪A2∪…∪An∪…

A的星闭包定义为:A*={ε}∪A+ =A0 ∪A+

例:设A = { a } 则

A+ = { a, aa, aaa, … } = { an | n>0 }

A* = {ε, a, aa, aaa, … } = { an | n>=0 }

2.3 文法和语言的形式定义(6个重点定义)

定义2.1:形式文法

定义2.1 文法G是一个四元组:G = ( VN, VT, P, S ),其中:

VN为非终结符的有穷集合。其中非终结符也称为语法成分或语法单元,它可分解为若干非终结符或终结符。

  • VT为终结符的有穷集合。

  • 终结符是基本符号,不能再分解。其中,VN和VT不含公共的元素,即VN∩VT = Ф。

  • 通常,V=VN∪VT称为字母表或字汇表。

  • P为产生式(或规则式)有穷集合。产生式形如:x→y

  • 其中,x∈VVNV,称为产生式的左部;y∈V*,称为产生式的右部。

  • S为文法的开始符号,S∈VN

  • 至少要在一条产生式的左部出现。

例:设文法G = ( VN, VT, P, S ),其中VN ={<句子>,<主语>,<谓语>,<名词>,<动词>,<直接宾语>} VT ={王鸣,英文 ,是,学习}P ={ <句子>→<主语><谓语> ,<主语>→<名词>, <名词>→王鸣 | 英文,<谓语>→<动词> <直接宾语> ,<动词>→是 | 学习,<直接宾语>→<名词>} S=<句子>例:文法G可描述如下,
G[<句子>]:<句子>→<主语><谓语> <主语>→<名词><名词>→王鸣 | 研究生<谓语>→<动词><直接宾语> <动词>→是 | 学习<直接宾语>→<名词>

补充:书写符号约定:

非终结符用大写字母A、B、C…表示,S和Z用作开始符

终结符用小写字母a、b、c… 表示

③ u、v、w、x… 表示符号串

④ 第一条产生式的左部符号是开始符 在上述约定下,给出规则式集合,也就给出了 文法。

例:文法G可描述如下:
G[<表达式>]:<表达式>→<表达式>+<表达式> <表达式>→<表达式>*<表达式><表达式>→(<表达式>) <表达式>→identG[E]:  E→E+E  E→E*E   E→(E)E→i

重点:PL/0语言语法的EBNF描述

(后面第三章会特别讲解)

定义2.2 推导与归约

设G是一个文法,若有符号串

v = xUy w = xuy

其中x, y∈V* 且U→u是G中的规则式,则说v直接产生w, 或说v直接推导出w ,记作v => w,也可 以说w直接归约到v。

例:对于文法G,G[E]: ① E→E+E  推导:E=>(E)②  E→E*E         => (E+E)③ E→(E)          => (i+E)④ E→i            => (i+i)v          w        所用规则    x       y      E        (E)          ③         ε      ε(E)      (E+E)        ①         (      )(E+E)    (i+E)             ④         (      +E)(i+E)    (i+i)        ④         ( i +   )

定义2.3 长度为n的推导

若存在一个直接推导序列 v = w0 => w1 => w2 => … => wn = w

n>0, wi∈V+, 则说v推导出w,或w归约到v,记作v => w

并称这个序列是长度为n的推导(用了n次规 则)。

定义2.4 广义推导、广义规约

若v => w或v = w,则说v广义推 导出w,w广义规约到v,记作v => w 。

例:已知文法G[E]:E→E+EE→E*E E →i
从开始符E出发,写出符号串i+i*i的推导过程。
方法一:
E=>E+E =>i+E =>i+E*E =>i+i*E =>i+i*i
方法二:
E=>E*E =>E*i =>E+E*i =>E+i*i =>i+i*i

定义2.5 最左推导

对于直接推导v=xAy=>xuy=w,若 x∈VT*,即A是v中最左非终结符,则称此直 接推导为最左直接推导,记作v=>w。

若推导v=>w中的每个直接推导都是最左的, 则称为最左推导,记作v=>w。

定义2.6 最右推导

与定义2.5类似,可以定义最右直接 推导和最右推导,分别记作 v=>w和v=>w 其中最右推导也称为规范推导。最右推导 的逆过程是最左归约,称为规范归约。

(6)

定义2.7 句型

设有文法G[S],若有S =>x,其 中x∈V* ,则称符号串x为G的句型。

定义2.8 句子

仅含终结符的句型称为句子。即 若有S =>x,且x∈VT*,则称x为G的句子。

例:已知文法G[E]:E→E+EE →i
写出该文法的所有句型和句子。注意:    1.最左(右)推导推出的句型称为左(右)句型。右句型又称为规范句型。2.i+E是句型,但不是规范句型

定义2.9 语言转文法

由文法G[S]定义的语言L(G)是 从S推导出的全部句子的集合:

L(G) = { x | S => x且x∈VT* } 显然,L(G)是VT*的一个子集

例1:已知文法G[S]: S→Ac|aBA→abB→bc
写出文法所定义的语言?L(G)={abc}例2:已知文法G[S]: S→aSb  S→ab
写出文法所定义的语言?L(G)={ambm | m>0 }例3:已知文法G[S]: S→AB A→aA   A→aB→bB   B→b
写出文法所定义的语言?L(G)={ambn | m,n>0 }

重点:语言和文法之间的转换

1.已知文法,写出相应语言描述(是唯一的)

例如:文法G[S]: S→bS | b

2.已知语言描述,写出相应文法(可能不止 一个)

例如:若语言由0、1符号串组成,串中0 和1的个数相同,构造其文法。

例:已知语言L={ an | n>0 },构造相应的文法。观察语言L中的句子 a , aa , aaa , …G1[S]:S → aS   S → aG2[S]:S → Sa   S → a

已知语言构造文法的方法小结

课后练习题:

例:已知文法G[S]:S→aSBC   ①S→aBC     ②      CB→BC     ③     aB→ab   ④bB→bb     ⑤        bC→bc     ⑥cC→cc     ⑦
则语言L(G)= {anbncn | n>0}

定义2.10 等价

若L(G1) = L(G2),则称G1和G2 等价,记作G1∽G2。

例:文法G1、G2和G3如下:
G1:S→AB      G2: S→AB     G3: S→ABA→aA | a       A→Aa | a      A→Aa | aB→bB | b       B→bB | b      B→Bb | b
因为L(G1) = L(G2) = L(G3) = { ambn | m,n>0 },所以说G1、G2和G3之间等价。

重点:递归规则与递归文法

1.递归的概念 所谓递归,是指:

① 同一个(或一组)操作的连续重复;

② 一种处理过程的性质,这种过程的某 一步要用到它自身的上一步(或上几步)的 结果。 递归定义是指在定义某事物时,又用到 该事物本身。

(待补充)

2.4 文法的类型—Chomsky分类

2.4.1 0型文法

(短语结构文法,可压缩的 上下文有关文法)

最一般的文法,对规则无限制,每一条 规则u→w,u∈VVNV ,w∈V*(可为ε)

2.4.2 1型文法

(上下文有关文法)

对每一条规则u→w的限制:

除了u→ε,|u|≤|w| ,意为串的长度不 可压缩。

或者也可定义为 :

xAy→xwy x和y就是上下文,

x,y∈V*,A∈VN , w∈V+,w≠ε

例:已知文法G[S]:S→aSBC   ①S→aBC    ②       CB→BC    ③      aB→ab   ④  ≠  B→bbB→bb    ⑤         bC→bc    ⑥cC→cc    ⑦
该文法是1型文法的,其中在句子anbncn中,
b和c的个数与a的个数有关。

2.4.3 2型文法

(上下文无关文法)

对每一条规则u→w的限制: u∈VN , w∈V*

例:简单表达式文法G[E]:E→E+T  | T   T→T*F  | F  F→(E)  | i

常用的程序设计语言都用2型文法定义。

2.4.4 3型文法(正规文法,正则文法)

对每一条规则的限制:

注意:如果文法的规则集中同时含有左和右线性规则,则该文法是2型的。在程序设计语言中,单词符号用3型文法定义

定义3.13 这四类文法所定义的语言分别称为0型语言、上下文有关语言、上下文无关语言和正规语言

四种文法之间的关系:

由于四种文法是按照将产生式做进一步限制而 定义的,所以它们之间是逐级“包含”的关系,由四 种文法产生的语言也是逐级“包含”的关系。即: 3型语言类 2型语言类 1型语言类0型语言类

2.5 语法树和二义性 (重点)

定义2.14 语法树

给定文法G[S],对于G的任何句型都能 构造与之关联的语法树(推导树)。

这棵树需满足 4个条件:

① 每个叶子结点都被标记某个终结符或非终结符。

② 非叶子结点只能用非终结符标记。

③ 树根用开始符S标记。

④ 如果结点A有n个孩子结点:X1,X2,…,Xn, 则G[S]有规则:A→X1X2…Xn Xi∈V

对语法树有以下结论:

① 语法树的叶子结点从左至右组成的符号串 对应文法中的一个句型

② 每一句型推导都有一棵对应的语法树,但 每一语法树至少对应一个推导。语法树与推 导顺序无关,更能从本质上反映语法结构。

③ 每一分支表示一个直接推导

树相关定义

语法树与短语、简单短语和句 柄之间的关系:

①每个子树的叶子串是相对于该子树的根的短语

②每个简单子树的叶子串是简单短语

③最左的简单子树的叶子串是句柄

定义2.15 简单短语

设有文法G[S],w=xuy是其一 个句型。若存在一个非终结符A,满足:

则称u是句型w相对于A的短语。若满足:

S=>xAy 且 A=>u

则称u是简单短语

定义2.16 句柄

句型的最左简单短语成为句柄。

练习1:写推导过程、语法树、

例:对于文法G,G[E]: ① E→E+E  ②  E→E*E                      ③ E→(E)④ E→i
(1)写出表达式(i+i)*i的推导过程
(2)画出表达式(i+i)*i的语法树
(3)指出表达式(i+i)*i的全部短语、简单短语和句柄

练习2:语法树

定义2.16 二义性

如果一个文法存在某个句子对 应两棵不同的语法树,则称该文法是二义 性的。或者,如果一个文法存在某个句子 对应有两种不同的最左(最右)推导,则 称该文法是二义性的。

注意:

① 二义性是指文法,不是指语言。

② 文法的二义性是不可判定的,实践中只能给 出一些判断的充分条件。

为什么要避免文法产生二义性?

①当编译程序对二义性文法生成的句子进 行语法结构分析时,就会产生两种甚至更 多种不同的理解。

②语法结构上的不确定性,必将导致语义 处理上的不确定性。因此,希望描述语言 的文法是无二义性的。

对二义性的处理:

对二义性的处理:

① 把二义性文法变换为无二义性的。如可把文法G[E]变换为文法G’[E]

G[E]: E→E+E|E*E|(E)|i

G’[E]: E→E+T|T

​ T→T*F|F

​ F→(E)|i

② 附加去掉二义性的信息。 如if语句,规定else只与紧前的未配对 的then配对。

2.6 句型的分析

定义2.17 句型分析

句型分析是一个识别输入符号串 是否为语法上正确的程序的过程。在编译程 序中,我们把完成句型分析的程序称为分析 程序或者是识别程序。

定义2.18 句型分析算法

句型分析算法采用自左向右的分 析算法,即总是从左到右地识别输入串,进 行语法分析的过程。

1.自上而下分析法

从开始符出发正向推导出所给的输入串,若能推出,则是正确句子。

推导方法的关键是确定当前推导的规则。

2.自下而上分析法

从给定的输入串开始逆向推导出(归约)文法的开始符。若能归约到开始符,则给定的终结符串是正确句子。

归约方法的关键是确定当前归约的句柄。

练习题

例:文法G:S → cAd

​ A → ab

​ A → a

识别输入串cabd是否该文法的句子

解法一:推导

解法二:规约

2.7 文法的实用限制和变换(可略)

定义 有害规则、多余规则

文法G中形如U—>U的规则,称为有害规则。

文法G中某一规则, U—>u,若满足下列条件之一, 称为多余规则:

(1)左部非终结符号U不出现在任何其他规则的 右部(开始符除外),即该非终结符是不可到达的;

(2)若在推导中使用该规则,则再也不能推出终 结符号串,即该非终结符是不可终止的。

例:请找出下面文法的有害规则和多余规则 S—>Be A—>Ae|A|e B—>Ce|Af C—>Cf D—>f

对于文法的实用限制主要有两点:

不能有有害规则和多余规则。

另外,实际处理中,可能还有以下的限制:

1)文法中开始符号S不出现在规则的右部;

2)文法中不含有形如 A—>B , A,B∈ Vn 的特殊规则;

3)文法中不含有左递归规则A—>Aa ;

4)文法中不允许有空规则 A—>ε。 如果文法G中所有规则均满足实用限制条件, 则称文法G是压缩或简化过的。

定理 构造文法

对任一个2型文法G,都可以构造 文法G’,使得L(G)=L(G’),并且G’具有下 述特点: (1) 开始符S不出现在规则的右部; (2) 每个非终结符A都能推出终结符串; (3) 每个非终结符A都能出现在某个句型中; (4) 没有A→B形式的规则; (5) 没有空规则(相差一个ε); (6) 不含左递归规则。

【学习笔记】

  • 编译原理01-引论

【实验内容】

【学习资料】

  • 教材:《编译原理(第三版)》
  • 课程资料:待上传

编译原理02--文法和语言相关推荐

  1. 编译原理:文法和语言总结与梳理

    1. 梳理第二章的内容,写一篇理解与总结. 一. 对程序设计语言的描述从语法.语义和语用三个因素考虑: 语法:对语言结构的定义: 语义:语言的含义: 语用:从使用的角度描述语言. 形式语言理论是编译的 ...

  2. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc

    西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...

  3. 编译原理课程作业-Cminus语言的词法及语法分析器实现

    Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 设计思想 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现. 语法分析 使用递归下降方 ...

  4. 编译原理 LL1文法的判断和句子识别

    编译原理 LL1文法的判断和句子识别 LL1文法概述 点击查看百度百科 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: ...

  5. 编译原理大作业-PL0语言编译器

    编译原理大作业-PL0语言编译器 一.实验目的 二.源码说明 1.头文件pl0.h (1 词法分析主要数据结构(通过enum symbol类实现) 1.保留字(13+4个): 2.运算符及界符(16+ ...

  6. 编译原理实验 -- 文法分析

    编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...

  7. 中山大学编译原理实验——实现PL0语言的编译程序(无坑有缩进版)

    PL0-Compiler 代码传送门 ps:吐槽一下,老师给的代码实在是太烂了.又没缩进又多编译错误,除此之外还有很多细节漏掉关键字,总之就很多坑,所以这里发一个无坑带缩进版,方便大家学习. 中山大学 ...

  8. c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc

    编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...

  9. 编译原理lr(0)c语言,关于编译原理:LR(1)LR(0)文法判断?

    "编译原理"是大学计算机类专业的一门主干课程.设置本课程的目的,在于系统的向学生讲述编译系统的结构.工程流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌 ...

  10. 【编译原理】第二章 语言及其文法

    第二章 语言及其文法 2.1 基本概念 字母表 字母表 ∑ \sum ∑是一个又穷的符号集合,其中符号包括字母.数字和标点符号等 如➢二进制字母表:{ 0,1 } :➢ASCII字符集 :➢Unico ...

最新文章

  1. Apache Pulsar中的地域复制,第1篇:概念和功能
  2. 2、掌握C++基本语法
  3. 抗炎饮食与混合坚果粉
  4. 复习深入笔记01:对象/可变与不可变类型/字符编码/闭包
  5. leetcode 897. 递增顺序搜索树(中序遍历)
  6. 中低频量化交易策略研发05_推进分析
  7. 西北农林科技大学计算机考研难吗,西北农林科技大学考研难吗?一般要什么水平才可以进入?...
  8. 案例-中国法律法规doc文档爬取
  9. 16比9尺寸是多少厘米_16:9是多大的尺寸?
  10. Excel金额大小写转换公式
  11. 计算广告学中的GFP、GSP和VCG对比
  12. AcWing 95. 费解的开关 (yxc代码保姆级题解+注释)
  13. 男生拍照姿势大全,这样拍才帅
  14. java如何添加同名的xml节点_java – 解组具有多个同名元素的XML JAXB
  15. 现如今市场竞争激烈,语音交友陪玩APP源码如何适配用户?
  16. 淘宝店小蜜配置手册——自定义知识库的应答模式与测试
  17. 当定频神器爱上多线程|ROS2定频话题发布Demo
  18. Java中的设计者模式
  19. JavaScript常用库—jQuery
  20. 随机森林:提供银行精准营销解决方案

热门文章

  1. 开讲啦:《Python3进阶实战》
  2. 培养成功人脉的交际经验
  3. 我也来“办”团购网站
  4. 基于LSM-Tree的键值存储引擎的设计与实现
  5. 创建一个Worker类,具有属性 name sex salary level 创建一个linkedlist作为容器.录入5条工人信息
  6. python入门教程小学生_Python快速入门!为什么小学生都能学会Python,附python教程...
  7. 8.Unity经验:TimeLine 制作过场动画
  8. 为什么要做黑盒测试?黑盒测试有什么作用?
  9. 使用无线信号特性,查找和终结快捷宾馆中摄像头的一种方法 (无线安全?一点都不安全 开篇)
  10. 超级强大的vim配置(vimplus)