第2讲 程序设计语言及其文法

基本概念

字母表
字母表∑是一个有穷的符号集合
符号包括: 字母,数字,标点符号

字母表的运算包含4种:乘积、n次幂、正闭包、克林闭包

乘积:把头一个闭包与后面的闭包的每一项相乘,以此类推。。。
在这里插入图片描述

n次幂:就是把乘积里的每一个闭包,都替换成相同的闭包,几次幂就几个
在这里插入图片描述

正闭包:每一个n次幂都添加到一个闭包里头,而且幂必须大于零
在这里插入图片描述

克林闭包:每一个n次幂都添加到一个闭包里头,而且幂可以为零
在这里插入图片描述


字母表里面的一项就是一个串
在这里插入图片描述

串主要有连接运算和幂运算
在这里插入图片描述

文法定义

文法里主要有两种符号:语言基本符号 and 语法成分

<形容词> : 语法成分
little :语言基本符号

<形容词> -> little

文法的形式化定义
文法的表示形式
G = (Vt , Vn , P , S)

Vt:终结符(terminal symbol) 集合, 主要由 基本符号构成
Vn: 非终结符(nonterminal) 集合,主要由语法成分构成
P : 产生式 集合,定义语法规则,各种终结符与非终结符,是如何产生或者生成的
S : 开始符号,该文法里头最大的语法成分,语法就是由这个S开始,推出后面的最小项(句子), 就是具体的语句

在终结符集合与非终结符集合不引起歧义的前提下,可以只写产生式

在这里插入图片描述
当产生式的左部都一样的时候,可以把右部合在一起,中间用竖杠(|)隔开在这里插入图片描述

符号的约定
终结符:一般为小写英文字母
非终结符:一般为大写英文字母

文法符号:终结符 & 非终结符
X,Y,Z 和 α, β, γ 为文法符号
在这里插入图片描述

如何判定一个句子是否符合文法
有两种方式:
1.推导
2.归约

推导是用产生式的右部替换左部

归约式用产生式的左部替换右部
在这里插入图片描述

因此,推导是从生成语言的角度去判断,
归约是从识别的角度去判断
在这里插入图片描述

推倒出来的式子,叫做 句型
如果不包含非终结符的话,就叫做句子
在这里插入图片描述

由文法G的开始符号S所推导出来的所有句子的集合,称为文法G生成的语言,记为L(G)
在这里插入图片描述
在这里插入图片描述

文法的分类
0型文法
1型文法
2型文法
3型文法

α -> β

0型文法:α至少包含一个非终结符
1型文法:α的符号个数少于等于β ,|α| <= |β|
2型文法:α必须是非终结符
3型文法:又叫 正则文法
右线性文法 :A -> wB 或A->w
左线性文法 :A -> Bw 或A->w

四种文法逐级限制,逐级包含
在这里插入图片描述

CFG(上下文无关文法)分析树

树的子节点为边缘
在这里插入图片描述

每一棵树的子节点为一个短语
只有父子两代节点的为直接短语

在这里插入图片描述

二义性文法
如果一个文法可以生成出多棵分析树,则该文法是二义性的

在这里插入图片描述

当给定一组充分条件,例如上边的if-else,规定离哪个if近的,该else就属于这个if,
则该文法就不存在二义性。
不满足,则存在二义性。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值