编译原理 第二章文法和语言

@ZHANGQIANYI2020

一、 文法的直观概念

1. 文法的概念

文法是以有穷的集合刻画无穷的集合的一个工具。

2. EBNF举例

<句子>::=<主语><谓语>
<主语>::=<代词>|<名词>
<代词>::=你|我|他
<名词>::=小明|大学生
<谓语>::=<动词><直接宾语>
<动词>::=是|学习
<直接宾语>::=<代词><名词>

“我是大学生”
<句子> => <主语><谓语>
      => <代词><谓语>
      => 我<谓语>
      => 我<动词><直接宾语>
      => 我是<名词>
      => 我是大学生

二、符号和符号串

1. 字母表

字母表是元素的非空集合,字母表中的元素称为符号,因此字母表也称符号集。

2. 符号串

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

例如:
字母表∑={0,1}的符号串有0,1,00,11,000,111······
字母表A{a,b,c}的符号串有a,b,c,ab,aaca······

如果某符号串有m个符号,则称其长度为m,表示为|x|=m。
允许空符号串,即不包含任何符号的符号串,用ε表示,其长度为0,即|ε|=0.

3. 符号串的运算

(1)符号串的头尾,固有头和固有尾。

例如:
设z=abc,那么z的头是ε,a,ab,abc,固有头是ε,a,ab;z的尾是ε,c,bc,abc,固有尾是ε,c,bc。

(2)符号串的连接

例如:
设x=ST,y=abu,则他们的连接xy=STabu。

(3)符号串的方幂

例如:
设x=AB,则xº=ε,x¹=AB,x²=ABAB,x³=ABABAB。

(4)符号串的集合

例如:
若A={a,b},B={c,d},则集合AB={ac,ad,bc,bd}。
例如:
字母表Σ={a,b}
闭包Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
正闭包Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}

三、文法和语言的形式定义

1. 规则(重写规则、产生式或生成式)

是形如α→β或α∷=β的(α,β)有序对,且α∈V+,β∈V*。
α称为规则的左部(或生成式的左部)。
β称为规则的右部(或生成式的右部)。

例如:
A->a读作“A定义为a”,也就是把它说成是一条关于A的规则(产生式)。

2. 文法的定义

(1)定义1
文法G定义为四元组(VN,VT,P,S)
VN :非终结符集
VT :终结符集
P:产生式(规则)集合
S:识别符或开始符号
VN∩VT= ∅, S∈VN
V=VN∪VT,V称为文法G的文法符号集合。

例如:
有文法G=(VN,VT,P,S)VN={S},  VT={0,1},P={S→0S1, S→01 },S为开始符号
例如:
有文法G=(VN,VT,P,S)
VN={标识符,字母,数字}
VT={a,b,c,…x,y,z,0,1,…,9}
P={<标识符>→<字母>
<标识符>→<标识
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验2 文法的读入、判定和处理 一、实验目的 熟悉文法的结构,了解文法在计算机内的表示方法。 二、实验内容 1、 计一个表示文法的数据结构; 2、 从文本文件中读入文法,利用定义的数据结构存放文法,并输出; 3、 本实验结果将来还有用。 三、实验要求 1、 了解文法定义的4个部分: G(Vn, Vt, S, P) Vn 文法的非终结符号集合,在实验中用大写的英文字母表示; Vt 文法的终结符号集合,在实验中用小写的英文字母表示; S 开始符号,在实验中是Vn集合中的一个元素; P 产生式,分左部和右部,左部为非终结符号中的一个,右部为终结符号或非终结符号组成的字符串,如S->ab|c 2、 根据文法各个部分的性质,计一个合理的数据结构用来表示文法, 1) 若使用C语言编写,则文法可以计成结构体形式,结构体中应包含上述的4部分, 2) 若使用C++语言或java语言编写,则文法可以计成文法类形式,类中至少含有4个数据成员,分别表示上述4个部分 文法数据结构的具体计由学生根据自己想法完成,并使用C或C++语言或Java实现计的数据结构。 3、 利用完成的数据结构完成以下功能: 1) 从文本文件中读入文法文法事先应写入文本文件); 2) 根据文法产生式的结构,分析出文法的4个部分,分别写入定义好的文法数据结构的相应部分; 3) 整理文法的结构,判断该文法文法类型,是否为0型,1型,2型或3型文法,并输出判断结果; 4) 在计算机屏幕或者文本框中输出文法文法输出按照一个非终结符号一行,开始符号引出的产生式写在第一行,同一个非终结符号的候选式用“|”分隔的方式输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值