第二章 总结及作业(6789B)【编译原理】

简介: 第二章 总结及作业(6789B)【编译原理】

前言

2023-5-10 13:08:16

以下内容源自《编译原理》

仅供学习交流使用

推荐

第一章 总结及作业【编译原理】

第二章 总结

2.1程序语言的定义

2.1.1语法

任何语言程序都可看成是一定字符集(称为字母表)上的一字符串(有限序列)。

所谓一个语言的语法是指这样的一组规则,用它可以形成和产生一个合式的程序。这些规则的一部分称为词法规则,另一部分称为语法规则(或产生规则)。

2.1.2语义

对于一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义。这就是语义问题。

2.2高级语言的—般特性

2.2.1高级语育的分类

2.2.2程序结构

2.2.3 数据类型与操作

2.2.4语句与控制结构

2.3程序语言的语法描述

空集、连接、闭包

2.3.1上下文无关文法

文法是描述语言的语法结构的形式规则(即语法规则)。
一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符号,一个开始符号,以及一组产生式。


巴科斯范式


形式上说,一个上下文无关文法G是一个四元式(VT, VN,S,ξ),其中

VT是一个非空有限集,它的每个元素称为终结符号;

VN是一个非空有限集,它的每个元素称为非终结符号,VT∩ VN=φ;

S是一个非终结符号.称为开始符号;

ξ是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,α∈(VT∪VN)*。开始符号S至少必须在某个产生式的左部出现一次。

推导

句型、句子、语言:

假定G是一个文法,S是它的开始符号。如果S=*>α,则称α是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G)。

L(G)= {α|S=+>α&α∈VT*}

例2.1、例2.2、例2.3:


最左推导、最右推导

2.3.2语法分析树与二义性



如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。

人们已经证明,二义性问题是不可判定的。即,不存在一个算法,它能在有限步骤内,确切地判定一个文法是否为二义的。


2.3.3形式语言鸟瞰

0型语法、1型语法、2型语法、3型语法:

总结:

  • 0型文法:短语文法,递归可枚举
  • 1型文法:上下文有关文法,一般不允许替换成空串ε
  • 2型文法:上下文无关文法,非终结符的替换不必考虑上下文
  • 3型文法:线性文法、正规文法,单词结构,左/右

第二章 作业

6

6.令文法G6

N→D|ND

D→0|1|2|3|4|5|6|7|8|9

(1)G6的语言L(G6)是什么?

(2)给出句子0127、34和568的最左推导和最右推导。

(1)L(G~6~)={0,1,2,3,4,5,6,7,8,9}^+^
(2)
①0127
左 N=>ND=>NDD=>NDDD=>DDDD=0DDD=>01DD=>012D=>0127
右 N=>ND=>N7=>ND7=>N27=>ND27=>N127=>D127=>0127.
②34
左 N=>ND=>DD=>3D=>34
右 N=>ND=>N4=>D4=>34
③568
左 N=>ND=>NDD=>DDD=>5DD=>56D=>568
右 N=>ND=>N8=>ND8=>N68=>D68=>568

7

7.写一个文法,使其语言是奇数集,且每个奇数不以0开头。

G~7~(S):
    S->NZO|O
    N->1|2|3|4|5|6|7|8|9
    Z->XZ|ε
    X->0|1|2|3|4|5|6|7|8|9
    O->1|3|5|7|9

8

8.令文法为

E→T|E+T|E-T

T→F|T*FIT/F

F→(E)|i

(1)给出i+ i * i、i * (i+i)的最左推导和最右推导;

(2)给出i+i+ i、i+i *i和i-i- i的语法树。

①i+ i*i
左 E=>E+T=>T+T=>F+T=>i+T=>I+T*F=>i+F*F=>I+i*F=>i+i*i
右 E=>E+T=>E+T*F=E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>i+i*i
②i* (i+i)
左 E=>T=>T*F=>F*F=>i*F=>i*(E)=>i*(E+T)=>i*(T+T)=>i*(F+T)=>i*(i+T)=>i*(i+F)=>i*(i+i)
右 E=>T=>T*F=>T*(E)=>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)=>T*(F+i)=>T*(i+i)=>F*(i+i)=>i*(i+i)
(2)语法树如图



9

9.证明下面的文法是二义的:

S→iSeS|iS|i

需证明:存在一个句子的语法树是不同的
iiiei的语法树如图
所以S→iSeS|iS|i是二义的


扩展:

上面这个就是条件语句的文法啊

可以在2.3.3形式语言鸟瞰(P35)中找到

S->   if 条件 then 语句 
  | if 条件 then 语句 else 语句
  |   其他语句
这是一个二义文法。例如,下面的语句
if C1 then if C2 then S1 else S2
就对应有两棵不同的语法树。

11

11.给出下面语言的相应文法

L1= {anbnci|n≥1, i≥0}

L2= {aibncn|n≥1,i≥0}

L3= {anbnambm|n, m≥0}

L4= {1n0m1m0n|n,m≥0}

①G1(S):
    S->XC
    X->aXb
    C->cC|ε
②G2(S):
    S->AX
    X->bXc
    A->aA|ε
③G3(S):
    S->XY
    X->aXb|ε
    Y->aYb|ε
④G4(S):
    S->1S0|0S1|ε

修正:

①G1(S):
    S->XC
    X->aXb|ab 此处需有ab,因n≥1
    C->cC|ε
②G2(S):
    S->AX
    X->bXc|bc 此处需有bc,因n≥1
    A->aA|ε   

第二章作业 参考答案

来源:编译原理习题讲解PPT

通过参考答案,修正作业解答

6



7



8





9




11




最后

2023-5-10 13:35:40

祝大家逢考必过

点赞收藏关注哦

相关文章
|
1月前
|
C++
c++primer Plus 6 的课后题(第三章3.6)
c++primer Plus 6 的课后题(第三章3.6)
|
1月前
|
存储 编译器 C++
c++primer plus 6 读书笔记 第三章 处理数据
c++primer plus 6 读书笔记 第三章 处理数据
|
2月前
|
存储 算法 Python
Python编程作业一:程序基本流程
Python编程作业一:程序基本流程
32 0
|
2月前
|
自然语言处理 算法 前端开发
编译原理 -概述
编译原理 -概述
27 0
|
10月前
|
自然语言处理 网络安全 C语言
|
11月前
|
自然语言处理 前端开发 Java
第一章 总结及作业【编译原理】
第一章 总结及作业【编译原理】
373 0
|
11月前
|
数据库
第二章作业【数据库原理】
第二章作业【数据库原理】
52 0
|
数据采集 存储 SQL
ETL的基础知识,看完你就全明白了!
随着企业的发展,各业务线、产品线、部门都会承建各种信息化系统方便开展自己的业务。
1626 0
ETL的基础知识,看完你就全明白了!
|
前端开发 C语言
带你读书之“红宝书”:第三章 语法基础(中)之 3.6. 流控制语句②,3.7. 函数简介
带你读书之“红宝书”:第三章 语法基础(中)之 3.6. 流控制语句②,3.7. 函数简介
54 0
带你读书之“红宝书”:第三章 语法基础(中)之 3.6. 流控制语句②,3.7. 函数简介
|
C# Windows
【C#】【平时作业】习题-4-流程控制
【C#】【平时作业】习题-4-流程控制
102 0
【C#】【平时作业】习题-4-流程控制