650 likes | 840 Views
第3章 文法和语言. 主要内容. 3.1 文法的直观概念 3.2 符号和符号串 3.3 文法和语言的形式定义 3.4 文法的类型 3.5 上下文无关文法及其语法树 3.6 句型分析 3.7 有关文法实用中的一些说明. 第 二 讲. 课题 : 符号与符号串、文法的形式定义 目的要求 : 1. 理解并掌握符号和符号串的概念及运算; 2. 理解并掌握文法的形式定义。 教学重点: 符号和符号串的概念及运算、文法的形式定义 教学难点 : 符号和符号串的运算 教学课时: 2 教学方法: 多媒体教学 教学内容和步骤 : (如下).
E N D
第3章 文法和语言
主要内容 3.1 文法的直观概念 3.2 符号和符号串 3.3 文法和语言的形式定义 3.4 文法的类型 3.5 上下文无关文法及其语法树 3.6 句型分析 3.7 有关文法实用中的一些说明
第 二 讲 课题:符号与符号串、文法的形式定义 目的要求: 1. 理解并掌握符号和符号串的概念及运算; 2.理解并掌握文法的形式定义。 教学重点: 符号和符号串的概念及运算、文法的形式定义 教学难点 : 符号和符号串的运算 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下)
关于语言 • 语言是一个记号系统,包括语法和语义两个方面。 语法:是一组规则, 定义符号如何排列,排列与符号含义无关。 语义:研究语法的含义 语言 静态语义 动态语义
3.1 文法的直观概念 以自然语言为例: (用 EBNF 描述) 〈句子〉::= 〈主语〉〈谓语〉 〈主语〉::= 〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::= 〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::= 〈代词〉|〈名词〉 “我是大学生”是否是该语言的句子?
〈句子〉::= 〈主语〉〈谓语〉 〈主语〉::= 〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::= 〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::= 〈代词〉|〈名词〉 〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
〈句子〉::= 〈主语〉〈谓语〉 〈主语〉::= 〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::= 〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::= 〈代词〉|〈名词〉 比较右边的两组句子: • 1.下列是否是句子 • 我是大学生 • 王明是大学生 • 王明学习英语 • 他学习英语 • 你是工人 • 2.下列是否是句子 • 我大学生是 • 大学生是王明 • 英语学习王明 • 大学生学习他 • 工人是英语
3.2 符号和符号串 • 有关概念: • 1. 字母表:是元素的非空有穷集合,字母表中的元素称为符号,因此字母表也叫符号集 。 • 2. 符号串:由字母表中的符号组成任何有穷序列。 • 例1:字母表∑={0,1},那么 • ∑上的符号串有:0,1,00,01,10,11等 • 例2:字母表∑={a,b,c},那么 • ∑上的符号串有:a,b,c,ab,aaca等
3. 符号串的顺序: 如abc与cab是不同的符号串。 4. 符号串的长度:符号串x有m个符号,则长度就为m,表示为:|x|=m 如: ababa 则长度是5 5. 空符号串ε : ε的长度为0(不含任何符号) 若符号串x ,则有εx = xε= x 6. 符号串的运算: (1) 符号串的头和尾 若串z=xy,则x是z的头,y是z的尾。
例3:设符号串z=abc ,那么 z的头是ε,a,ab,abc z的z的尾是ε,c,bc,abc (2)符号串的固有头和固有尾 若符号串z=xy中,若x非空,则y是固有尾; 若y非空,则x是固有头。 例4:设符号串z=abc,那么 z的固有头是ε, a, ab z的固有尾是 ε,c ,bc
(3)符号串的连接: 设x,y是符号串,连接xy是y符号写在x符号之后。 例5:x=ab, y=MN 则xy=abMN 显然:εx=xε=x (4)符号串的方幂: 设x是符号串,则z=xx……xx,称z为x的方幂, 记作z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然当n>0时, 有xn =x·x n-1= x n-1·x N个
(5)符号串的集合: 若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。 两个符号串集合A、B之间的乘积定义为: AB={xy| x∈A且y∈B} 例:A={a,b},B={c,d} 则AB={ac,ad,bc,bd} 并且{ε}A=A{ε}=A (6)闭包(∑*) 字母表∑,用∑* 表示∑上所有有穷长的串集合,∑*称为∑的闭包。
例:字母表∑={0,1} ,则 ∑*={ε,0,1,00,01,10,11,000,001,010……} =∑0∪∑1 ∪ ∑2∪. …∪∑n (7)正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n ∑+称∑的正闭包。 显然:∑*= ∑0∪∑+ ∑+ = ∑∑*=∑*∑ 若x是∑*中的元素,则表示为x ∑*,否则x ∑*, 但 ∑* 根据前面连接的定义
Σ* = Σ0 ∪ Σ1 ∪ Σ2 … ∪ Σn … Σ+ = Σ1 ∪ Σ2 … ∪ Σn … Σ* = Σ0 ∪ Σ+ Σ+ = ΣΣ* = Σ* Σ Σ+ = Σ* -{ε} 例:设Σ={a,b},则 Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
3.3 文法和语言的形式定义 • 基本概念和术语 • 1. 规则(重写规则、产生式、生成式) • 形如→β或 ::= β的(,β)有序对。 • 其中(α∈V+,β∈V*) • 称规则的左部,β称规则的右部。 • 2. 文法 • (1)文法G定义为四元组(VN,VT,P,S)
其中: VN —— 非终结符号集 VT —— 终结符号集 P —— 产生式(规则) S —— 开始符号或称作识别符号,它是一个非终结符,至少要在一条规则中作为左部出现。 且:(1)VN ,VT,P是非空有穷集合; (2)VN∩VT= (不含公共元素)
例1: 文法G =(VN ,VT ,P,S), 其中 VN={S},VT ={0,1}, P={S → 0S1,S → 01}。 非终结符集中只含一个元素S; 终结符集由两个元素0和1组成; 有两条产生式; 开始符号是S。
例2:文法G =(VN ,VT,P,S) 其中 VN ={标识符,字母,数字} VT={a,b,c,…,x,y,z,0,1,…,9} P = { <标识符> →<字母> <标识符> → <标识符><字母> <标识符> → <标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符> “< >” 表示非终结符
(2) 文法的第二种表示法: 例1改为: G: S → 0S1 S → 01 (3) 文法的第三种表示法: 例1改为: G[S]: S → 0S1 S → 01 一般约定,第一条产生式的左部是开始符号;用尖括号括起来的是非终结符号,不用尖括号括起来的是终结符号,或者用大写字母表示非终结符号,小写字母表示终结符号;G可写成G[S],其中S是开始符号。
教学总结 字母表是元素的非空有穷集合,字母表中的元素称为符号。 符号串是由字母表中的符号组成任何有穷序列。 符号串的运算有求串的头和尾、串的连接、串的方幂。 集合的运算有乘积及集合的闭包、正闭包等。 文法G可定义为四元组(VN,VT,P,S),其中VN ,VT,P是非空有穷集合,且VN∩VT=。
作 业 教材P49:18
第三讲 课题:文法的形式定义、类型及语法树 目的要求: 1.掌握推导、句型、句子等概念 2.掌握文法的四种基本类型、语法树及句型推导方法 教学重点: 1.推导、句型、句子等概念; 2.文法类型定义和句型的推导方法; 教学难点: 文法类型定义及句型推导 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下)
3、推导的定义 (1) → 是文法G=(VN ,VT ,P,S)的规则,和是V*中的任意符号(串),若有符号串V,W满足: V= ,W= 则说 V直接产生W 或者 W是V的直接推导 或者 W直接规约到V 记作 V W 所谓推导,就是从识别符号开始,不断将当前符号串中的非终结符号替换为该符号的某个规则的右部。
使用规则:S →01 =0,=1, =S,=01 例3: 在例1中 V=0S1,W=0011 直接推导:0S10011 规则: S → 0S1 = , = =S,=0S1 V=S,W=0S1 直接推导:S 0S1 V=0S1,W=00S11 直接推导: 0S100S11 规则: S → 0S1 =0 , = 1 =S,=0S1
例4:根据例2中给出的文法,指出下面直接推导所使用的规则:例4:根据例2中给出的文法,指出下面直接推导所使用的规则: <标识符> <标识符><字母> <标识符><字母> <数字> <标识符><字母> <字母> <数字> <字母> <字母> <字母> <数字> abc <数字> abc5
(2)长度 1的推导 若存在直接推导的序列: V=W0 W1 W2 … Wn =W (n>0) 则 称V推导W (或W规约到V) ,记作 V W + + (3)长度 0的推导 若有 V=W ,或 V W ,记作 V W 例5: 在例1中存在序列: V=0S1 00S11 000S111 00001111 =W 记作: 0S1 00001111 或者 0S1 00001111 * + * + *
例6 G: <标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 <标识符> <标识符><数字> <字母> <数字> x <数字> x 1 即: <标识符> x1 或者:<标识符> x1 + *
4. 句型、句子的定义: 设G[S]是文法,如果符号串x是从识别符号(开始符号)推导出来的(即S x)则称x是文法G[S]的句型。 若x仅由终结符号组成(S x , xVT*)则称x为G[S]的句子。 * * + 例: S,0S1,000111都是文法G的句型,000111是G的句子。 〖结论〗句子一定是句型,句型不一定是句子。
5. 语言的定义: 文法G产生的语言定义为: 集合 {xS x, S为文法开始符号,xVT* } 该集合为文法G描述的语言,用L(G)表示。 从定义可知: x是句型且x是文法G的句子。 注:语言是文法所产生的所有句子组成的集合。 * 因为S0S100S11 … 0n1n 重复利用规则S → 0S1 例: 例1的句子表示为: L(G)={0n1nn1}
例7 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→eeL(G)={ anbnen | n≥1 }
文法G[S]: • (1)S→aSBE • (2)S→aBE • (3)EB→BE • (4)aB→ab • (5)bB→bb • (6)bE→be • (7)eE→ee 如:证明aabbee是G的句子: Sa S BE (S→aSBE) a aBEBE (S→aBE) aabEBE (aB→ab ) aabBEE ( EB→BE ) aabbEE (bB→bb) aabbeE (bE→be) aabbee (eE→ee) Sa S BE aaSBEBE aaaBEBEBE G生成的每个串都在L(G)中L(G)中的每个串确实能被G生成
6. 文法的等价性 若L(G1)=L(G2),则称文法G1和G2是 等价的。 例:文法G1[A]:A→0R A→01 R→A1 文法G2[S]:S→0S1 S→01 显然有L(G1)=L(G2)
3.4 文法的类型 • 通过对产生式施加不同的限制,Chomsky将文法分为四种类型,即0型、1型、2型、3型。 设有文法G=(VN ,VT ,P,S) • 0型文法: 文法G中的任一产生式α→β,都满足: α、β∈(VN∪VT)* ,且α中至少含有一个非终结符。0型文法也叫短语文法。
1型文法:也称上下文有关文法。 • 文法G中任一产生式α→β,都有|β|≥|α|, ( S→ε除外)。 • 2型文法:也称上下文无关文法 文法G中任一产生式α→β,都有α∈ VN , β∈(VN∪VT)*。 • 3型文法:也称正规文法 文法G中任一产生式α→β的形式都为 A→aB或A→a,其中A∈ VN ,B∈ VN , a∈ VT。
逐 渐 增 加 限 制 0型 短语文法 1型 上下文有关文法 2型 上下文无关文法 3型 正规文法 文 法 类 型 结论: 一个3型文法必然也是上下文无关文法,一个2型文法必然也是上下文有关文法,一个1型文法必然也是0型文法。 每种文法所产生的语言分别称为0型语言、上下文有关语言、上下文无关语言和正规语言。
例1:下列为1型(上下文有关)文法 文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee 引入或符号“|”,文法变为 文法G[S]: S→aSBE | aBE EB→BE aB→ab bB→bb bE→be eE→ee
例2:上下文无关文法G=({S,A,B},{a,b},P,S),P的产生式如下:例2:上下文无关文法G=({S,A,B},{a,b},P,S),P的产生式如下: S→aB S→bA A→bAA A→a A→aS B→b B→bS B→aBB 或者G[S]: S→aB|bA A→a|aS|bAA B→b|bS|aBB
例6:正规文法G=({S,A,B},{0,1},P,S),P的产生式如下:例6:正规文法G=({S,A,B},{0,1},P,S),P的产生式如下: S→0A S→1B S→0 A→0S A→0A A→1B B→1 B→0 B→1B 该文法可以写成: S→ 0 | 0A | 1B A→ 0S | 0A | 1B B→ 0 | 1 | 1B
3.5 上下文无关文法及其语法树 • 上下文无关文法有足够的能力描述现今程序设计语言的语法结构 例1:算术表达式上下文无关文法表示 文法G=({E}, {+,*,i,(,)}, P, E} P: E → i E → E+E E → E*E E → (E) 例2:条件语句上下文无关文法表示 <条件语句>→if<条件>then<语句> | if<条件>then<语句>else <语句>
语法树(推导树)的定义: • 给定文法G=( VN,VT ,P,S),对G的任何句型都能构造与之关联的语法树,须满足条件: • 1.每个结点都有一个标记,此标记是V的一个符号。 • 2. 根的标记是S • 3. 若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在VN中。 • 4. 如果结点n的直接子孙,从左到右的次序是结点n1,n2,…,nk,其标记分别为A1,A2,…,A k ,那么A A1A2…Ak一定是P中的一个产生式。
句子aabbaa的语法树: S a A S a S b A a b a 例2:G=( {S,A},{a,b},P,S ),其中P为: • 语法树是用于描述上下文无关文法的句型推导的直观方法 S aAS S a A SbA A SS A ba
语法树的理解: • 语法树表示了在推导过程中用到什么样的产生式和用到哪些非终结符,并没有表明采用的顺序。 • 最左(最右)推导:若在推导中的任何一步αβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换,则称为最左(最右)推导。 • 最右推导也称为规范推导。 • 由规范推导所得的句型称为规范句型
例3:上述推导树是aabbaa句型的语法树, 其推导过程如下: G[S]: S→aAS A→SbA A→SS S→a A→ba 最右推导:SaAS aAa aSbAa aSbbaaaabbaa 最左推导:SaASaSbAS aabAS aabbaSaabbaa 其他方式:SaASaSbASaSbAaaabAaaabbaa
问题:一个句型是否对应唯一的一棵语法树? 例4:文法G=( { E}, {+, * ,i,(,) },P,E ),其中P为: E → i E → E + E E → E * E E → ( E ) 句型 i*i+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 E E + E E * E i i i E E * E i E + E i i 推导2 推导1
文法的二义性 • 如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的; • 若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的; • 文法的二义性不同于语言的二义性,如果产生某2型语言的每个文法都是二义的,那么该语言是先天二义的; • 不存在这样的算法,能够在有限的步骤内确切的判定任给的一个文法是否具有二义性。
对于例题4,如果规定“*”和“+”的优先性,并服从左结合,就可以构造出无二义性文法:对于例题4,如果规定“*”和“+”的优先性,并服从左结合,就可以构造出无二义性文法: 文法G[E]: E T | E+T T F | T*F F( E ) | i
教学总结 规则也叫重写规则、产生式、生成式 。 语言是文法所产生的所有句子组成的集合。 通过对产生式施加不同的限制, Chomsky将文法分为四种类型,即0型、1型、2型、3型。 一个3型文法必然也是上下文无关文法,一个2型文法必然也是上下文有关文法,一个1型文法必然也是0型文法。 给定文法G=( VN ,VT ,P,S),对G的任何句型都能构造与之关联的语法树。 对句型的推导有最左推导、最右推导。最右推导也称为规范推导,所得的句型称为规范句型。
作 业 教材P47-49: 1、2、3、5、8
第 四 讲 课题:句型分析与文法的实用限制 目的要求: 1.理解并掌握句型分析的方法; 2.理解并掌握短语、直接短语和句柄; 3.理解并能识别文法中的有害规则和多余规则。 教学重点: 1.句型分析的关键问题; 2.分析句型的短语、直接短语和句柄; 教学难点 : 句柄的概念及文法中多余规则的识别 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下)