第二章 文法和语言 2.1 文法的基本概念 符号和符号串 2.2 句型的分析 文法和语言的形式定义 推导与递归 文法的分类 语法树

Slides:



Advertisements
Similar presentations
九族文化村兩天一夜遊 組員 : 傅淳鈺 9A0E0019 黃湘蓉 4A 陳誌龍 9A0K0026 潘韋舜 9A0B0951 何奇龍 4A
Advertisements

高考数学专题之概率 高考数学冲刺 主讲人 : 北京大学光华管理学院 何洋. 北京师范大学京师大厦 9810 室 电话 : 传真 : 写在前面的话 概率是高中数学新教材中新增的内容, 在 实际生活中应用非常广泛, 并且由于概率 论是统计学的基础,
2016/9/41 12 年國教 入學方案宣導資料. 2016/9/42 安全快樂 健康發展 活力多元 創意發展 適性揚才 特色發展 務實致用 卓越發展 學前教育 國中小教育 高級中等教育 大專以上教育 教育促進個人向上發展教育促進個人向上發展 教育是國家最有利的投資教育是國家最有利的投資.
实数与代数式是初中数学中重要的基础知识, 是中考的必考内容.这部分知识散布于多个章节之中, 知识点琐碎,但概念性强,在中考试卷中多以填空题、 选择题、化简、探索或求值的形式出现.在复习中, 一定要加强对各个概念、性质和公式的辨析和理 解.注重让学生在实际背景中理解基本的数量关系和 变化规律,注重使学生经历从实际问题中建立数学模.
12 届减数分裂复习(蔡志敬) 给你一双翅膀,让你自由翱翔!. ※真核细胞分裂的方式 有丝分裂 无丝分裂 减数分裂.
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
苏教版小学语文 二年级下册(五~八)单元教材分析
温 度 定义: 表示物体冷热程度的物理量。 国际单位:开尔文(K) 单位 常用单位:摄氏度(℃) 原理: 根据液体热胀冷缩的性质制成的。
行政诉讼法.
新课程背景下高考数学试题的研究 ---高考的变化趋势
江苏省2008年普通高校 招生录取办法 常熟理工学院学生处
不会宽容人的人, 是不配受到别人的宽容的。 贝尔奈.
复习回顾 a a×a a×a×a a a×a×a= a×a= 1.如图,边长为a厘米的正方形的面积 为 平方厘米。
第六课 遗传与变异 第四课时 基因的分离定律.
新准则与老准则 主要变更内容.
巧用叠词,妙趣横生.
2017/3/16 上 (興) 櫃 公 司 僑外資持股情形申報作業.
机械制造工艺的基础知识 -基本概念 生产过程 工艺过程 机械加工工艺过程.
专题20 现代生物进化理论.
104年振聲國中 志願選填個別序位 說明會 104年06月08日 輔導室關心您.
民法总论 北京师范大学珠海分校 法律与行政学院 白 非.
第2章 LR分 析 法 LR分析法是一种自下而上进行规范归约的语法分析方法,LR指“自左向右扫描和自下而上进行归约”。LR分析法比递归下降分析法、LL(1)分析法和算符优先分析法对文法的限制要少得多,对大多数用无二义的上下文无关文法描述的语言都可以用LR分析器予以识别,而且速度快,并能准确、及时地指出输入串的任何语法错误及出错位置。LR分析法的一个主要缺点是,若用手工构造分析器则工作量相当大,因此必须求助于自动产生LR分析器的产生器。
第五章 电流和电路 制作人 魏海军
课标版 政治 第十一课 经济全球化与对外开放.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
离散数学 Discrete mathematics
第一节 孟德尔的豌豆杂交实验.
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
江苏省2009年普通高校 招生录取办法 江苏省教育考试院
编译原理与技术 课程总结.
大綱: AAA 性質 SAS 性質 SSS 性質 顧震宇 台灣數位學習科技股份有限公司
第十三章 收入和利润.
1-2 正負數的乘除法.
Part5语法分析 授课:胡静.
第2节 孟德尔的豌豆杂交实验(二).
2008 年 11 月 26 日星期三 离散  数学 计算机学院 冯伟森 年 11 月 26 日星期三.
第6章 自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析 返回目录.
语言及其文法.
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
第四章 语法分析.
3章 习题 1、设有文法G[N]: N→D|ND D→0|1|2|…|9 (1)试写出021和4321的最右推导和 最左推导。
Part5语法分析 授课:胡静.
第2次课 上下文无关文法
LL分析法 LL分析法的分析器由一张预测分析表(LL(1)分析表),一个控制程序(表驱动程序)及一分析栈组成 输入
第五章 语法分析——自下而上分析 自上而下分析法(Top-down) 自下而上分析法(Bottom-up) 国防科技大学计算机系602教研室.
第三课时 匀变速直线运动的位移与时 间的关系
第三章 文法和语言 本章目的为语言的语法描述寻求工具,以便: 对源程序给出精确无二义的语法描述。(严谨、简洁、易读)
编译原理 第四章 语法分析—自上而下分析 编译原理.
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
行列式.
第3章 组合逻辑电路.
第1课时 不等式的性质及比较法证明不等式 要点·疑点·考点 课 前 热 身   能力·思维·方法   延伸·拓展 误 解 分 析.
第四章 自顶向下语法分析方法 语法分析的主要工作:是识别由词法分析给出的单词 序列是否是给定的正确句子(程序)。
第二部分 集合论 第六章 集合代数 主要内容 集合的基本概念 属于、包含 幂集、空集 文氏图等 集合的基本运算 并、交、补、差等 集合恒等式
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
大綱: 母子相似性質 內、外分比性質 重點複習 顧震宇 台灣數位學習科技股份有限公司
SLR(1)分析方法.
第四章 语法分析 南京大学计算机系 戴新宇
1.8 完全平方公式(一) 锦州市实验学校 数学组(3).
 遺 傳    習題.
第2讲 实数的运算及大小比较 考点知识精讲 中考典例精析 举一反三 考点训练.
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
幂的乘方.
集合的基数 (Cardinal Number)
数列求和 Taojizhi 2019/10/13.
3.1.3 空间向量运算的坐标表示 1.了解空间向量基本定理、意义及其表示. 2.理解空间向量的正交分解、长度公式、夹角公式和空间
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
Presentation transcript:

第二章 文法和语言 2.1 文法的基本概念 符号和符号串 2.2 句型的分析 文法和语言的形式定义 推导与递归 文法的分类 语法树 第二章 文法和语言 2.1 文法的基本概念 符号和符号串 文法和语言的形式定义 推导与递归 文法的分类 2.2 句型的分析 语法树 文法的约定 句型的分析方法

主要内容 本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: 文法与语言的形式定义 Chomsky文法及其分类 上下文无关文法的主要特性 文法的等价变换 句型分析的概念

文法与语言 一个程序设计语言的确切定义是构造编译程序的重要前提。 文法被用来精确而无歧义地描述语言的构成方式. 文法描述语言的时候不考虑语言的含义。

2.1 语言和文法的直观概念 程序设计语言的定义 语言是一个记号系统。 汉语--符合汉语语法的句子的全体 英语--符合英语语法的句子的全体 程序设计语言--该语言的程序的全体 程序设计语言由语法和语义定义:

语法(syntax) 定义: 是一组规则,用它可以形成和产生一个合适的程序 描述工具:文法 作用: 定义什么样的符号序列是合法的,与符号的含义无关。

语义(semantics) 分类: 静态语义:一系列限定规则,确定哪些合乎语法的程序是合适的 动态语义:表明程序要做什么 描述工具: 指称语义,操作语义等 作用: 检查类型匹配,变量作用域等

文法的直观概念 如何来描述一种语言?文法是描述语言的语法(形式)结构的形式规则。 如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示 如果语言是无穷的,要找出语言的有穷表示。 有两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造 识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,要么永远继续下去。

形式语言 Chomsky于1956年提出了一种用来描述语言的数学系统。人们把用一组数学符号和规则来描述语言的方式称为形式描述,而把所用的数学符号和规则称为形式语言。 形式语言,只是从语法上研究语言。它是抽象的数学系统,用于模拟程序设计语言的语法,或者是并不很成功地模拟自然语言如英语的语法。 形式语言理论是编译理论的重要基础,它主要研究组成符号语言的符号串的集合及它们的表示法、结构与特性。

形式语言和编译理论中的 最基本概念 ——符号串和符号串集合 基本定义 它们的运算

2.2 符号和符号串 字母表 定义:元素的非空有穷集合 例:∑={0‚1} Α={a‚b,c} 元素也称为符号,字母表也称符号集。 程序语言的字母表由字母数字和若干专用符号组成。

符号串 定义:由字母表中的符号组成的任何有穷序列 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 在符号串中,符号是有顺序的,顺序不同,代表不同的符号串,如:ab和ba不同 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0

子符号串 设有非空符号串u=xvy,其中符号串 ,则称v为符号串u的子符号串。 V≠ε 例如 符号串x=a+b*(c+d),则 a, a+b*, 与(c+d)等都是x的子符号串,且 其长度分别为|a|=1, |a+b*|=4, |(c+d)|=5 设有非空符号串u=xvy,其中符号串 ,则称v为符号串u的子符号串。 V≠ε

符号串的头与尾 例如:字母表A={a,b,c}上的符号串x=abc, 则x的 头:ε, a, ab, abc, 尾:ε, c, bc, abc 固有头: ε, a, ab, 固有尾:ε, c, bc 如果z=xy是一个符号串,则x是z的头,而y是z的尾。如果y非空,则x是z的固有头;如果x非空,则y是z的固有尾。

符号串的连接:设x、y是符号串,它们的连接是把y的符号写在 x的符号之后得到的符号串xy 符号串的运算 符号串的连接:设x、y是符号串,它们的连接是把y的符号写在 x的符号之后得到的符号串xy 例如 x="ST",y="abu" ,则 xy="STabu" 显然εx = xε=x 符号串的方幂:把符号串a自身连接n次得到的符号串an = aa…aa 例如 a1=a a2=aa a0=ε

符号串集合: 定义: 若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 符号串集合的乘积:符号串集合A和B的乘积定义为: AB ={xy|x∈A且y∈B},即AB是由A中的串x 和B中的串y连接而成的串xy组成的集合。 若集合A = ab,cde B = 0,1 则 AB = ab0,ab1,cde0,cde1 显然 {ε}A = A{ε} = A

符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的方幂,其中i是非负整数。具体定义如下: A1 = A , A2 = A A AK = AA......A(k个)

集合的闭包 闭包 集合Σ的闭包Σ *定义如下: Σ * = Σ 0∪ Σ1∪ Σ 2∪ Σ 3∪… 例:设有字母表Σ={0,1} 则Σ*=Σ0∪Σ1∪Σ2∪… ={ε,0,1,00,01,10,11,000,…} 即Σ*表示Σ上所有有穷长的串的集合。

正闭包 Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 + 表示上的除ε外的所有用穷长串的集合 Σ* = Σ0∪Σ+ Σ+ = ΣΣ* = Σ* Σ

字母表上的一个语言是上符合某种规则的一些符号 串的集合 ,是*的一个子集。 例如:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 1. 集合{ab,aabb,aaabbb,…,anbn,…}或 {w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言。 集合{a,aa,aaa,…}或{w|w∈Σ*且w=an,n≥1}为字母表上的一个语言。 ε是一个语言。 即 是一个语言。

小结 1 符号与字母表 2 符号串 3 符号串的运算 4 符号串集合 5 集合的闭包 6 字母表的闭包

2.3 文法和语言的形式定义 1.文法的定义 2.文法形式上的约定 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价

“我是大学生”是汉语的一个句子 用::=表示的汉语句子的构成规则: 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我|你|他 〈名词〉∷= 王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉

句子“我是大学生”的推导过程如下: 从句子出发,反复把规则中的”::=”左边的成分替换成右边的成分。 〈句子〉  〈主语〉〈谓语〉  〈代词〉〈谓语〉  我〈谓语〉   我〈动词〉〈直接宾语〉  我是〈直接宾语〉  我是〈名词〉  我是大学生

文法——介绍 包括四个组成部分: 一组终结符号(不能被替换的符号,单词符号) 一组非终结符号(能够被替换为终结符号或非终结符号,语法单位) 一个开始符号(从这个符号开始替换,最大语法单位-程序) 一组产生式(替换规则,把左边的字符串替换为右边的字符串)

关键思路 从文法的开始符号出发, 反复使用产生式,对非终结符进行替换(展开), 直到整个字符串中不在包含非终结符。 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导

1.文法的形式定义 产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production):产生式(规则)集合 S:开始符号或识别符号

说明: V=VN∪VT,V称为文法G的字母表 P中产生式形如:α→β,其中α∈V+且至少含一个非终结符,β∈V* VN,VT和P是非空有穷集 VN∩VT=φ S是一个非终结符,且至少要在一条产生式的左部出现 非终结符代表一个语言中的语法成分,如<赋值语句>,它是构成程序的一个语法成分,这个符号本身不会在程序中出现,而终结符是组成程序的具体的符号。

2 文法形式定义上的约定 文法习惯上只将产生式写出。并有如下约定: 第一条产生式的左部是开始符号,或用G[S]表示S是开始符号 用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符 G可写成G[S],S是开始符号 希腊字母代表由终结符号和非终结符号组成的符号串 α、β、γ 左部相同的产生式A→α,A→β可以记为A→α|β, 其中“|”是“或”的意思,α,β分别称为侯选式

其中:VN={S},VT={0,1},P={S→0S1,S→01} 如:对于文法 G:S→0S1 可写成 G[S]:S→0S1 S→01 S→01 例:文法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}, <标识符>→<标识符><字母> <标识符>→<标识符><数字>, <字母>→a, …, <字母>→z, <数字>→0,…,<数字>→9 }, S=<标识符> 例如: 文法G[S]: S→A|SA|SD A→a|b|…|z D→0|1|…|9

3. 推导(Derivation)与归约(Reduction) 直接推导和直接归约: α→β是文法G的产生式,若有v,w满足: v=γαδ,w=γβδ, 其中γ,δ∈V* 则称v直接推导出w,也称w直接归约到v, 记作 v  w 直接推导就是用产生式的右部替换产生式的左部的过程 直接归约就是用产生式的左部替换产生式的右部的过程

例 文法G: S→0S1,S→01 有直接推导: S 0S1 ( S→0S1 ) 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111( S→01 )

推导例题1 文法G1:S->bA, A->aA|a定义了一个什么样的语言? S=>bA=>ba S=>bA=>baA=>baa S=>bA=>baA=>baaA=>baaa …… S=>bA=>baA=>…=>ba…a L(G1)={ban|n>=1} L(G1) = { 以b开头后跟一个或多个a的串}

推导例题2 e.g. 文法产生的语言 L(G4)={ambn|m,n1} L(G5) = {anbn|n 1} G4: S A B A a A | a B b B | b G5: S a S b | ab

e.g. 文法产生的语言 A=> aB => ab A=> Ab => ab 文法G4对句子aaabb的推导: S => A B S A B => a A B A a A => a a A B A a A => a a a B A a => a a a b B B b B => a a a b b B b

e.g. 文法产生的语言 文法G5对句子aaaabbbb的推导: S => a S b S a S b => a a S b b S a S b => a a a S b b b S a S b => a a a a b b b b S a b

直接推导序列和广义推导 直接推导序列: 或  + 若存在v =u0 u1 ... un=w, (n>0) 直接推导序列: 或  + 若存在v =u0 u1 ... un=w, (n>0) 则称v  + w,v推导出w,或w归约到v(至少有1步推导),这个直接推导序列的长度为n。 广义推导: 或  * 若有v  + w 或 v=w, 则记为v  * w,v广义推导出w,w广义规约到v(可以包含0步推导) +  * 

三种推导的比较 直接推导()的长度为1 直接推导序列( +)的长度n≥1 广义推导( *)的长度≥0

规范推导与规范规约 考虑两种特殊推导:最右推导和最左推导,即 对于一个推导序列中的每一步直接推导,都是对最左(最右)非终结符进行替换。 最右推导也称规范推导,它的逆过程称为最左规约,也称规范规约。 . 若用表示规约,设A→a是文法G中的一个规则,则对于 xAy  xay 有 xay  xAy

例1: 文法G[S]: S→AB A→A0|1B B→0|S1 举例 例1: 文法G[S]: S→AB A→A0|1B B→0|S1 请给出句子101001的最左和最右推导。 最左推导: S AB 1B B10B 10S1 10AB1 101BB1 1010B1 101001 最右推导: S AB AS1AAB1 AA01 A1B01 A1001 1B1001 101001

例2 文法G: E→E+T|T T→T×F|F F→(E)|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

递归规则 借助于自身来定义的规则,称为递归规则。如 <数字序列>::=<数字序列><数字> 递归规则的存在,使得能用有穷个规则来定义无穷的语言。 如果一个规则形如U::=…U…(或U→xUy),则该规则是递归的; 如果规则形如U::=U… (或U→Uy),则称左递归的; 如果规则形如U::=…U (或U→xU),则称右递归的。 例:<标识符表>::=<标识符表>,<标识符> (左递归规则) <因式>::=!<因式> (右递归规则)

文法的递归性 定义:对于某文法,存在U∈VN, 如果U  + …U..., 则称该文法递归于U; 例1:C语言中: <语句>  + …<语句> (文法右递归于<语句>) 例2: U→Vx V→Uy|z (都不递归) 有 U  + Uxy,所以该文法是左递归的。 注:描述程序设计语言的文法必定都是递归的。

4.句型、句子、语言的定义 句型和句子 设有文法G[S],若符号串α是从开始符推导出来的,即 S =>* α ,则称α是文法G的句型。若α仅由终结符组成,即 S =>* α ,且α∈VT*,则称α是文法G的句子。 例 文法G[S]: S→0S1, S→01 因为S  0S1  00S11  000S111  00001111 所以S,0S1 ,00S11 ,000S111,00001111都是G的句型00001111是G的句子 由规范推导所得的句型称为规范句型

语言的定义 由文法G生成的语言记为L(G),它是文法G的一切句子的集合,即 L(G)={x|S =>* x,且 x∈VT* } 例 文法G: S→0S1, S→01 S0S1  00S11  03S13 … 0n-1S1n-1  0n1n L(G)={0n1n|n≥1} 文法和语言的关系: 文法G生成的每个串都在L(G)中 L(G)中的每个串确实能被G生成

根据文法,可以通过推导得到该文法相应的语言; 例:G[E]:E→E+T|T T→T×F|F F→(E)|a E E+T T+T F+T a+T a+T×F a+F×F a+a×F a+a×a 表示一切能用符号a,+,×,(,)构成的算术表达式 有了语言的要求,也可以为该语言设计文法 例:若语言由0、1符号串组成,串中0和1的个数相同,构造其文法为: A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC

5.文法的等价 若L(G1)=L(G2),则称文法G1和G2是等价的。 例如 文法 G1[A]:A→0R A→01 R→A1 G2[S]:S→0S1 S→01 所定义的语言都是0n1n 两文法等价

2.4 文法的类型 0型文法(PSG)  0型语言或短语结构语言 1型文法(CSG)  1型语言或上下文有关语言 Chomsky对文法中的规则施加不同限制,将文法和语言分为四大类: 0型文法(PSG)  0型语言或短语结构语言 1型文法(CSG)  1型语言或上下文有关语言 2型文法(CFG) 2型语言或上下文无关语言 3型文法(RG)3型语言或正则(正规)语言

0型文法 如果对于某文法G,P中每个规则具有下列形式: 如文法G,其中VN={A,B,S} VT={0,1} P={ S→0AB 1B→0 α→β 其中α∈V+ , β ∈ V*,则该文法G为(Chomsky)0型文法或短语结构文法,缩写为PSG。相应的语言称为0型语言或短语结构语言。 如文法G,其中VN={A,B,S} VT={0,1} P={ S→0AB 1B→0 B→SA|01 A1→SB1 A0→S0B } L0(G[S])={ }

1型文法(上下文有关):它是0型文法的特例, 1型文法(上下文有关):它是0型文法的特例, 对P中的任一产生式α→β,都|β|≥|α|, 仅仅 S→ε除外,但S不得出现在任何产生式的右部。 例 文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee 1型文法产生式的一般形式是 A→, , ∈ V* ,A∈VN , β∈V+ ,它表示当A的上文为且下文为时可把A替换成,因此称1型文法为上下文有关文法。

2型文法(上下文无关文法) :它是1型文 法的特例,对任一产生式α→β,都有 α∈VN , β∈(VN∪VT)* 例 文法G[S]: S→AB A→BS|0 B→SA|1 2型文法产生式的一般形式是: A→,它表示不管A 的上下文如何都可把A替换成,因此被称为上 下文无关文法。 通常程序设计语言的文法,可用2型文法来描述, 因此我们重点研究2型文法。如C,Pascal

3型文法(正规文法):它是2型文法的特例, 任一产生式α→β的形式都为 A→aB或 A→a,其中A ,B∈VN ,a∈VT 例如 文法G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0 在程序设计语言中,3型文法通常用来描述单词的结构。

文法类别 产生式形式 产生的语言 说明 0型文法 (短语文法) α→β α∈V+ ,且至少含一个非终结符,β∈V* 0型语言 对产生式基本无限制 1型文法 (上下文有关文法) α→β,|β|≥|α| 1型语言(上下文有关语言) 将A替换成时,必须考虑A的上下文 2型文法 (上下文无关文法) A→β,A∈VN , β∈V* 2型语言(上下文无关语言) 无需考虑A在上下文中的出现情况 3型文法 (正规文法) A→aB 或 A→a, A,B∈VN ,a∈VT 3型语言 (正规语言) 产生式全部是规定的形式

四种文法之间的逐级“包含”关系 2型文法 1型文法 3型文法 0型文法

2.5 上下文无关文法及其语法树 1.上下文无关文法(Context-Free Grammar) 自然语言是上下文有关的。 2.5 上下文无关文法及其语法树 1.上下文无关文法(Context-Free Grammar) 自然语言是上下文有关的。 上下文无关文法有足够的能力描述现今程序设计语言的语法结构 例:算术表达式:E→i|E+E|E*E|(E) <赋值语句>→i:=E <条件语句>→if <条件>then <语句> | if <条件> then <语句> else <语句> 我们更关心上下文无关文法产生的句子的分析

2.语法树(推导树Parse Tree) 作用:直观地描述上下文无关文法的句型推导过程。给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树

语法树的概念 定义:语法树是这样的一个语法结构,它的结点由符号组成。根结点对应于识别符号。只有非终结符号对应的结点有子结点。并且,一个结点和它的子结点分别对应于文法中的一个规则的左部和右部。 引入语法树的意义:作为识别句子的辅助工具,语法树可以表示句子的结构。这一点对于其后的语义分析有非常重要的意义。

语法树的相关概念 结点:每个树的结点对应于一个符号。结点的名字就是该符号。 边:两个结点之间的连线。 根结点:没有边进入的结点。 分支:某个结点向下射出的边和其结点称为分支。(父子结点,兄弟结点) 子树:语法树的某个结点和它向下射出的部分 末端结点:没有向下射出的边的结点成为末端结点。在相对于句型的语法树中,末端结点可能是非终结符号。

语法树的特征 给定文法G,G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。这棵树具有下列特征: 3、若一棵子树的根结点为A,且其所有直接子孙的标记从左向右的排列次序为A1A2…AR,那么 A::=A1A2..AR一定是P中的一条规则; 4、若一标记为A的结点至少有一个除它以外的子孙,则A∈VN 5、若树的所有叶结点上的标记从左到右排列为字符串w,则w是文法G的句型;若w中仅含终结符号,则w为文法G所产生的句子。

从推导构造语法树 例如:推导 S AB AcBd Accdd abccdd 方法:把识别符号做为根结点,对每一个直接推导画一个分支,分支的名字是直接推导中被替换的非终结符号,直到再无分支可画结束。 例如:推导 S AB AcBd Accdd abccdd S A B a b c B d c d

语法树的构造过程 S AB AcBd Accdd abccdd (1) (2) (3) (5) (4) S S S A B A B

E T + E T + T F T × T F T × 例:文法G:E→E+T|T T→T×F|F F→(E)|i 从左到右读出叶子结点得到的符号串,为文法的句型。也把该语法树称为该句型的语法树。 E=>E+T =>E+T×F =>T+T×F E=>E+T =>T+T =>T+T×F E T + E T + T F T × T F T × 从语法树中看不出句型中的符号被替代的顺序

从语法树构造推导 方法:从分支建立直接推导,然后从语法树中剪去之这个分支,直到无分支可剪。 语法树表明了在推导过程中使用了哪条规则和使用在哪个非终结符号上,但它并没有表明使用规则的顺序。 一棵语法树可能对应不止一种推导。

从语法树构造推导的过程 例如文法G[S]: S::=AB A::=aAb|ab B::=cBd|cd 存在下面的推导可能: S AB AcBd (4) (3) Accdd abccdd (2) (1) S AB abB abcBd abccdd (从后往前看) S (4) A B (3) a b c B d (1) c d (2)

4.文法的二义性(Ambiguity) 文法G:E→E+E|E×E|(E)|i 句子 i×i+i 对应的语法树 i E + × E × i 两个不同的最左推导: 推导1:E  E+E  E×E+E  i×E+E  i×i+E  i×i+i 推导2:E  E×E  i×E  i×E+E  i×i+E i×i+i

如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。二义性文法存在某个句子,它有两个不同的最左(右)推导 定义: 如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。二义性文法存在某个句子,它有两个不同的最左(右)推导 文法G1: E→ E+E | E×E |(E) | i 文法G2: E→T|E+T T→F|T×F F→(E)| i 等价的无二义文法

为什么要避免文法产生二义性? 二义性的文法将给编译程序的执行带来问题。当编译程序对二义性文法生成的句子结构进行语法分析时,就会产生两种甚至更多种不同的理解。语法结构上的不确定性,必将导致语义处理上的不确定性。因此,希望描述语言的文法是无二义性的。

如何消除文法的二义性?(1) 方法一:不改变文法中原有的语法规则,仅加进一些语法的非形式规定。 如1:对于文法 G[E]: E → i E → E+E E → E*E E → (E) 规定运算符优先顺序和结合律,即*优先于+,+、*服从左结合。 如2:Pascal中二义性的消除是通过约定,如在符合if 语句中,else子句总是属于最近的尚无else子句的那个if语句。

如何消除文法的二义性?(2) 方法二:构造一个等价的无二义性的文法,即把排除二义性的规则合并到原有文法中,改写原有的文法。 如文法 G[E]: E → i E → E+E E → E*E E → (E) 将运算符的优先顺序和结合规则加到原有文法中,则可构造无二义性的文法 G’[E]: E → T|E+T T → F|T*F F → (E)|i

二义性文法的改造 文法的二义性是不可判定的: 注意:文法的二义性性与语言二义性的区别 因为可能有两个不同的文法G1和G2,其中有一个是二义性的,但却有L(G1)=L(G2)。如果产生某上下文无关语言的每个文法都是二义性的,则说明该语言是先天二义性的,即该语言是二义性的。

2.6 句型的分析 任务: 句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。 2.6 句型的分析 任务: 句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。 对于程序设计语言来说,句型分析就是一个识别输入符号串是否为语法上正确的程序的过程。 它是一种推导或语法树的构造过程。对于一个给定的符号串,试图按照文法的规则构造其对应的推导,或语法树。

从左到右的分析算法,即总是从左到右地识别输入符号串.句型分析算法采用从左到右的分析算法 句型的分析算法分类 自上而下分析法 (Top-Down parsing) 自下而上分析法 (Bottom-Up parsing)

2.6.1 自上而下的分析方法 定义: 从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。 2.6.1 自上而下的分析方法 定义: 从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。 语法树的构造:将文法的开始符号作为语法树的根,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串。

例 文法G:S → cAd A → ab A → a 识别输入串w=cabd是否为该文法的句子 推导过程: S =>cAd =>cabd S c A d a b

假定要被代换的最左非终结符号是B,且有n条规则:B→A1|A2|…|An,那么如何确定用哪个右部去替代B? 自上而下方法的主要问题 对输入串cabd自上而下构造语法树的另一过程 S 不成功,不成功的原因是选错产生式A→a c A d a 自上而下分析的主要问题是选择产生式 : 假定要被代换的最左非终结符号是B,且有n条规则:B→A1|A2|…|An,那么如何确定用哪个右部去替代B?

2.6.2 自下而上的分析方法 定义:从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。 2.6.2 自下而上的分析方法 定义:从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。 语法树的构造:从输入符号串开始,以它作为语法树的末端结点符号串,自底向上的构造语法树

例 文法G:S → cAd A → ab A → a 识别输入串w=cabd是否为该文法的句子 归约过程: cabd |-cAd |-S 用“|-”表示归约,下划线部分为被归约符号 S A c a b d

自下而上分析的主要问题 对输入串cabd的两种归约过程 (1)cabd|-cAd|-S 归约到开始符 (2)cabd|-cAbd 不能归约到开始符 在自下而上的分析方法中,每一步都是从当前串中选择一个子串加以归约,该子串暂称“可归约串”。 如何确定“可归约串”是自下而上分析的主要问题。 为了刻划“可归约串”,引入下面的概念

短语,直接短语和句柄 定义: 设αβδ是文法G[S]中的一个句型,如果有S=>*αAδ且A=>+β,则称β是句型αβδ相对于非终结符A的短语 特别的如有A=>β,则称β是句型αβδ相对于规则A→β的简单短语。 一个句型的最左简单短语称为该句型的句柄(Handle)。 句柄就是“可归约串”

用语法树求短语、句柄 短语:(子)树的末端结点形成的符号串是相对于(子)树根的短语。 简单短语(直接短语):简单子树的末端结点形成的符号串是相对于简单子树根的简单短语。 句柄:最左简单子树的末端结点形成的符号串是句柄。 例:对于文法G[S]:S::=AB A::=Aa|bB B::=a|Sb 求句型baSb的全部短语、直接短语和句柄? baSb为句型baSb的相对于S的短语; ba为句型baSb的相对于A的短语; a为句型baSb的相对于B的短语,且为直接短语和句柄; Sb为句型baSb的相对于B的短语,且为直接短语。 S A B b a

例:文法G[E]: E→E+T|T T→T×F|F F→(E)| i 的一个句型是 T×F+i,相应的语法树见右图: . 因为E=>* T+i 且 T=>T×F,所以T×F 是句型相对于T的短语,且是相对 于T→T×F的直接短语 . 因为E=>* T×F+F 且 F=>i,所以i是句 型相对于F的短语,且是相对于F→i 的直接短语 . 因为E=>* E 且E=>+ T×F+i,所以 T×F+i是句型相对于E的短语 . T×F是最左直接短语,即句柄 E T + F × i

E T + F i 文法G[E]: E→E+T|T T→T×F|F F→(E)|i 的一个句型 是T×F+i 虽然F+i是句型T×F+i的一部分, 但不是短语,因为尽管有E=>+ F+i, 但是不存在从文法开始符 E=>* T×E的推导

E T + F i 短语与语法树 从句型的语法树上很容易找出句型的短语 语法树中每棵子树的末端结点构成相对于子树根的短语 例:文法G[E]的句型T×F+i语法树: E T + F × i 五棵子树对应三个短语T × F,i,T × F+i 两层子树的末端结点构成直接短语 两棵两层子树对应两个直接短语: T×F,i 位于最左边的两层子树的末端结点构成句柄: T×F

2.7 有关文法实用中的一些说明 有关文法的实用限制 有害规则和多余规则 有害规则:U→U ,无用且引起文法的二义 2.7 有关文法实用中的一些说明 有关文法的实用限制 有害规则和多余规则 有害规则:U→U ,无用且引起文法的二义 多余规则:所有句子推导都用不到的规则,表现形式: 不可到达:不在任何句型中出现的非终结符的规则,即除了开始符号外,U不出现在该文法的任何其他的规则的右部。 不可终止:不可推出终结符号串的非终结符的规则,若在推导中使用该规则,则在也不能推出终结符号串。

例:文法G[S]: (1)S→Be (2)B→Ce (3)B→Af (4)A→Ae (5)A→e (6)C→Cf (7)D→f 多余规则为: (7)不可到达 (6)不可终止 (2)也是多余的

第2章小结 文法←→语言←→句子 句型→推导的语法树→短语→简单短语→句柄 1 形式语言基础 字母表、符号串、空串、 2 文法和语言的定义★ 认真看书,理解概念。 文法←→语言←→句子 句型→推导的语法树→短语→简单短语→句柄 1 形式语言基础 字母表、符号串、空串、 符号串的长度、连接、(正则)闭包 2 文法和语言的定义★ 3 重要概念★★ (规范)推导、(规范)规约、句子、语言、 句型、短语、简单短语、句柄 4 文法的表示 5 文法和语言的分类

给出串aaabbabbba的最左、最右推导及推导树 作业1 :给出生成下述语言的上下文无关文法: (1) { an bn am bm | n,m>=0 } (2) { 1n 0m 1m 0n | n,m>=0 } (3) { an b bn | n>=1 } (4) { an b an | n>=0} 作业2:设有文法G    G:S→aB∣bA  A→aS∣bAA | aR   B→bS ∣ aBB | b  给出串aaabbabbba的最左、最右推导及推导树

作业3 :有下面的文法G: E->E+T|E-T|T T->T*F|T/F|F F->(E)|i 求句型(F+i)-T*(E-T)的短语、简单短语和句柄。 作业4:.为句子i+i*i构造两棵语法树,从而证明     下述文法G[<表达式>]是二义的。 〈表达式〉->〈表达式〉〈运算符〉〈表达式〉   |(〈表达式〉)|i 〈运算符〉->+|-|*|/ 作业5: 文法G1: P->PaP|PbP|cP|Pe|f  证明文法G1是二义文法.