halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点
【更新日志】
最近更新:
- 暂无编辑内容,持续更新中……
程序设计语言的描述
程序设计语言的三个考虑因素:语法、语义、语用
- 语法:对语言结构的定义
- 语义:描述了语言的含义
- 语用:从使用的角度描述语言
非形式化定义与形式化定义
- 非形式化定义:自然语言描述
- 形式化定义:用符号式子组成的序列描述
字母表、符号、符号串
基本概念
字母表: 字母表 ∑ 是一个元素的非空有穷集合
- 非空——至少包含一个元素
- 元素——可以是字母、数字或其他符号
符号(字符): 字母表中的元素
符号串(字): 指字母表中符号的有穷序列
- 建立在指定字母表上,有字母表上的有穷个符号组成
- 符号串中符号的顺序不可忽视,如 ab 与 ba 是字母表上的两个不同的符号串
串的长度: 符号串中符号的长度。eg:串 s 的长度,通常记作|s|
不包含任何符号的符号串称为符号串,其长度为0,用 ε 表示
运算法则
符号串的连接: 设 x 和 y 是符号串,则串 xy 称为它们的连接。eg:设 x = abc,y = 10a,则 xy = abc10a,yx = 10aabc
- 空串是连接运算的单位元,即对任意一个符号串x,有 ε x = x ε = x
- 设 x,y,z是三个字符串,如果x=yz,则称y是x的前缀,z是x的后缀
符号串的幂运算: 串s的n次幂,即将n个s连接起来
集合的乘积:(以字母表运算为例)
集合的幂运算: (以字母表运算为例)字母表 ∑ 的 n 次幂, 即长度为n的符号串构成的集合
集合的正闭包与闭包:(以字母表运算为例)
- 正闭包:字母表 ∑ 的正闭包,即长度正数的符号串构成的集合
- 闭包(也称克林闭包):字母表 ∑ 的克林闭包, 即任意符号串构成的集合
注:符号串的集合和元素的集合(即字母表)都遵循此集合运算法则
文法的形式定义
语言的形式定义
推导: 从文法开始符号开始,通过产生式的右部取代左部,最终产生句子(由终结符构成的符号串)的过程
规约: 从给定源语言的句子开始,通过产生式的左部取代右部,最终到达开始符号的过程
推导和规约的关系:
推导和规约的每一步只能用一个产生式进行替换
即一个句型中既可以包含终结符,又可以包含非终结符,也可能是空串
即句子是不包含非终结符的句型
语言: 由文法 G 的开始符号 S 推导出的所有句子构成的集合称为文法 G 生成的语言,记为L(G)
L( G[S] ) = { x|S正数步推导到x 且 x∈终结符号集合闭包}
【ps:S 经过正数步推导得到 x,而不是用广义推导】
∵ S∈非终结符号集合
若用广义推导,则有可能有S=x
则与x属于终结符号集合闭包相矛盾
- 由文法确定语言的中心思想:从文法符号出发,反复连续地使用规则,对非终结符施行替换和展开,找出句子的规律,用式子或自然语言描述出来
- 给定一个文法,就能从结构上唯一地确定其语言(即当文法给定,语言也就确定)
- 给定一种语言,能确定其文法,但文法不是唯一的
- 若G和G’是两个不同的文法,如果它们描述的语言相同,那么G和G‘为等价文法
最左推导: 对于一个推导序列中的每一步直接推导,都是对最左非终结符进行替换
最右推导: 对于一个推导序列中的每一步直接推导,都是对最右非终结符进行替换
- 也称规范推导
- 用规范推导推导出的句型称为规范句型
- 规范推导的逆过程称为最左规约,也称为规范规约
语法分析树
语法分析树: 对句型的推导过程给出一种图形表示,这种表示称为语法树,也称推导树;从左到右排列叶节点得到的符号串称为是这棵树的产出或边缘
语法分析树特点:
- 每个结点的符号均包含在集合V中
- 文法的开始符号作为树根
- 若某一结点至少有一个分支节点,则该节点上的标记一定是非终结符
- 若A的结点有k个分支结点,则 A→A1A2···Ak 一定是G的一条规则
- 若该语法树中的叶子节点自左向右排列为w,则w为该文法的句型;若w中所有符号都是终结符,则w是该文法的一个句子
子树: 由某一结点连同其所有分支组成的部分
简单子树: 只有单层分支的子树
短语、直接短语、句柄的直观解释:
- 短语:子树的末端结点形成的符号串是相对于子树根的短语
- 直接短语:简单子树的末端结点形成的符号串是相对于简单子树根的直接短语
- 句柄:最左简单子树的末端结点形成的符号串是句柄
文法化简变换
- 文法中不能含有形如 A→A 的规则,这种规则称为有害规则,没有必要存在,且还会引起文法的二义性
- 文法中不能有在推导文法的所有句子中始终都不可能用到的规则
- 对文法中的某个非终结符A无法从它推导出任何终结符号串来,这样的规则不能出现。如 C→Ce
文法的二义性
文法二义性的概念: 如果一个文法存在某个句子对应两棵或两棵以上不同的语法分析树,则称这个文法是二义性的
或如果一个文法存在某个句子有两个或两个以上不同的最左(最右)推导,则这个文法是二义性的
文法二义性的消除方法:
- 不改变文法中原有的语法规则,仅加进一些语法的非形式规定。如运算符运算规定好优先顺序和结合规则
- 构造一个等价的无二义性文法,把排除二义性的规则合并到原有文法中,改写原有的文法
【 PS:文法的二义性与语言的二义性是两个不同的概念 】
- 文法的二义性指存在某个句子是有二义性的
- 语言的二义性指描述该语言的文法全部是二义性的,对它不存在无二义性的文法,这样的语言称为先天二义性的语言
文法和语言的分类
常见题型
-
设计一个文法,定义一个已知的语言(已知语言,设计文法):
-
已知一个文法,确定该文法所定义的语言(已知文法,确定语言):
做题方法:从文法符号出发,反复连续地使用规则,对非终结符施行替换和展开,找出句子的规律,用式子或自然语言描述出来 -
求句型的短语、直接短语、句柄: 做题方法:画出语法分析树,通过剪枝,自左向右收集叶子结点,从而完成短语、直接短语、句柄的求解。eg:
-
判断文法的二义性: 做题方法:根据定义进行证明
-
文法的化简变换: 做题方法:根据限制条件进行化简
持续更新中……
我是桐小白,一个摸爬滚打的计算机小白