【编译原理复习笔记】(2)语言与文法概述

基本概念

字母表

字母表是一个有穷符号集合

例如数字,字母,标点符号

  1. 字母表的乘积等于每个字母表的元素单独与另一字母表中每个元素相乘
    e.g. {0,1}*{a,b} = {0a,0b,1a,1b}
    注意:顺序非常重要
  2. 字母表的 0 次幂等于{ ϵ \epsilon ϵ}
  3. 字母表的 n 次幂等于长度为 n 的符号串构成的集合,符号串个数为 m n m^n mn
  4. 正闭包与克林闭包:
    正闭包:使用字母表中的符号串构成的任意长度为正数符号串的字母表
    克林闭包:正闭包加空字符串

任取 x 都满足在 σ \sigma σ的克林闭包内,称 x 为 σ \sigma σ上的串
串是字母表中的有穷序列
|x|用来表示 x 的长度
ϵ \epsilon ϵ|= 0
串的运算
  1. 串的连接:xy
  2. 对任何一个串 ϵ \epsilon ϵx = x ϵ \epsilon ϵ = x
  3. xyz 为三个字符串连接,则 x 称为 y 的前缀,z 称为 y 的后缀
  4. 串的幂运算: s 2 = s s s^2 = ss s2=ss

文法定义

自然语言实例
<sentence> -> <n. phase><v. phase>
<n.phase> -> <adj><n. phase>
<n.phase> -> <n>
<v.phase> -> <v><n. phase>
<adj> -> littile
<n> -> apple,boy
<v> -> likes

文法的形式化定义

G = ( V T , V N , P , S ) G = (V_T,V_N,P,S) G=VTVNPS

VT:终结符,也称为 token
VN:非终结符
VT 并 VN 为文法符号集合
产生式:

α → β \alpha \rightarrow \beta αβ

其中 alpha 属于 文法符号集合的克林闭包,且至少包含一个非终结符,被称为产生式的左部
beta 也属于文法符号集合的克林闭包,称为产生式的右部

S 属于非终结符,为开始符号,表示文法中最大的语法成分,如 S = <句子>
产生式的简写

对于以下拥有相同左部的产生式:
α → β 1 , α → β 2 , α → β 3 , \alpha \rightarrow \beta1, \alpha \rightarrow \beta2, \alpha \rightarrow \beta3, αβ1,αβ2,αβ3,
可以表示为:
α → β 1 ∣ β 2 ∣ β 3 \alpha \rightarrow \beta1|\beta2|\beta3 αβ1∣β2∣β3
各 beta 称为 alpha 的候选式

以下符号为终结符
  1. 字母表中排在前面的小写字母
  2. 运算符
  3. 标点符号
  4. 数字
  5. 粗体字符串
以下符号为非终结符
  1. 字母表中排在前面的大写字母
  2. 字母 S 通常用来表示开始符号
  3. 斜体
  4. 代表特殊含义(通常为程序构造)的大写字母,如 E(expression)

语言的定义

推导与规约

直接推导

给定文法 G,产生式包含 alpha 推导 beta,则对于符号串 γ α δ \gamma\alpha\delta γαδ可以重写为 γ β δ \gamma\beta\delta γβδ,记作: γ α δ → γ β δ \gamma\alpha\delta \rightarrow \gamma\beta\delta γαδγβδ,称前者直接推导出后者,若经过 n 次直接推导则记为 n 步推导: → n \rightarrow^n n

规约就是推导的逆过程
句型与句子
  1. S → ∗ α S \rightarrow^* \alpha Sα,且 alpha 属于文法符号集合,则称 alpha 是 G 的一个句型,一个句型既可以包含终结符,也可以包含非终结符,也可以为空
  2. 若句型不包含非终结符,则称为句子
语言

由开始符号 S 推导出的所有句子 w 的集合被称为是该文法生成的语言,L(G)

文法的分类

0 型文法

  1. 无限制文法,只有左部至少包含一个非终结符
  2. 由 0 型文法 G 生成的语言 L(G)为 0 型语言

1 型文法

  1. 上下文有关文法 CSG
  2. 左部字符串长度<右部字符串长度
  3. 产生式中不包含空产生式
  4. 上下文有关语言

2 型文法

  1. 上下文无关文法 CFG
  2. 产生式的左部必须都是非终结符

3 型文法

  1. 正则文法 RG
  2. 左部必须为非终结符
  3. 右线性文法:产生式的右部为终结符或仅包含一个非终结符,且该非终结符必须位于其他终结符右侧
  4. 左线性文法:产生式的右部为终结符或仅包含一个非终结符,且该非终结符必须位于其他终结符左侧

四种文法之间的关系

0 >1>2>3

CFG 的分析树

  1. 根结点为文法开始符号
  2. 内部结点为对产生式的表示,该结点为左部,该结点的子节点从左至右为产生式的右部
  3. 叶节点既可以是终结符也可以是非终结符,从左至右排列的叶节点被称为是这棵树的产出或者边缘
  4. 对于一个推导过程中的每一个句型,都可以构造出一个边缘为该句型的分析树
  5. 对于一个特定句型,分析树中每一棵子树的边缘都为该句型的一个red:短语
  6. CFGtree

若子树只有父子两代节点,那么该子树的边缘就称为句型的直接短语,如 E+E

二义性文法

bi-meaning

需要添加消除歧义的规则:每个 else 与最近的 if 匹配
red:对于任意一个上下文无关文法,不存在一个算法来判断其是无二义性的,但是可以给出充分条件使满足条件的文法不具有二义性

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值