600 likes | 772 Views
第三章 文法和语言. 编译原理. 计算机系 张熠. 语言的定义方法 当某种语言只有有限个句子时,可采用 枚举法 一一罗列出来,如: L={ I love you. you don’t love me. } ; 制定有限条规则,用来产生所要描述的语言之中的全部句子 ( 规则有限,但句子无限 ) ,这些规则称为 文法 ; 建立一种装置 ( 或称为算法 ) ,当输入的符号串为规定语言的句子时,接收该符号串,反之,则拒绝。称之为 自动机 。. 程序设计语言的组成 语法 :一系列的组合规则,可形成一个明确的程序规范。 语义 ( 静态和动态 )
E N D
第三章 文法和语言 编译原理 计算机系 张熠
语言的定义方法 • 当某种语言只有有限个句子时,可采用枚举法一一罗列出来,如:L={ I love you. you don’t love me. }; • 制定有限条规则,用来产生所要描述的语言之中的全部句子(规则有限,但句子无限),这些规则称为文法; • 建立一种装置(或称为算法),当输入的符号串为规定语言的句子时,接收该符号串,反之,则拒绝。称之为自动机。 数学与信息工程学院 计算机系
程序设计语言的组成 • 语法:一系列的组合规则,可形成一个明确的程序规范。 • 语义(静态和动态) • 静态语义:一系列的限定规则,确定哪些符合语法的程序是合适的; • 动态语义:也称为运行语言或执行语义,表明程序在运行过程中是否合适。 数学与信息工程学院 计算机系
3.1 文法的概念 文法的ENBF表示 数学与信息工程学院 计算机系
汉语的EBNF表示 • 汉语中句子的组成规则: • <句子>::= <主语><谓语> • <主语>::= <代词>|<名词> • <谓语>::= <动词><直接宾语> • <直接宾语>::= <代词>|<名词> • <代词>::= 你 | 我 | 他 • <名词>::= 王明 | 大学生 | 工人 | 英语 • <动词>::= 是 | 学习 数学与信息工程学院 计算机系
EBNF应用举例 • <句子> ::= <主语><谓语> • ::= <代词>|<名词><谓语> • ::= 我<谓语> • ::= 我<动词><直接宾语> • ::= 我是<直接宾语> • ::= 我是<名词> • ::= 我是大学生 数学与信息工程学院 计算机系
<句子> ::= <主语><谓语> • ::= <代词>|<名词><谓语> • ::= <名词><谓语> • ::= <名词><动词><直接宾语> • ::= <名词><动词><名词> • ::= 英语学习大学生 数学与信息工程学院 计算机系
3.2 符号和符号串 • 字母表:是元素的非空有穷集合,也称为符号集。 • 符 号:字母表中的元素。 • 符号串:由字母表中的符号组成的任何有穷序列。 • ⑴、空符号串ε(没有符号的符号串)是上的符号串 ; • ⑵、若x是上的符号串,a是的元素,则xa或ax均是上的符号串 ; • ⑶、y是上的符号串,当且仅当它可以由⑴和⑵导出。 数学与信息工程学院 计算机系
符号串举例: • 例 3.1Σ = { 0, 1 } • ε,0,1,00,01,11,10011等都是上的符号串。 • 例 3.2Σ= { a, b, c }上的符号串有: • a,b,c,ab,ba,aa,aaca,acaa等。 • 注意: • ⑴、符号串中的符号排列是有顺序的。 • ⑵、可以用字母表示符号串,如 x=aaca。 数学与信息工程学院 计算机系
3.2.1 字符串的头、尾、固有头和固有尾 • 如果 z = xy 是一个符号串,那么: • x 是 z 的头,y 是 z 的尾; • 如果 x 非空,那么 y 是固有尾;如果 y 非空,那么 x 是固有头。 • 例3.3设 z = abc, 那么 • z 的头是: ε,a ,ab , abc(除 abc 外都是固有头); • z 的尾是:ε,c ,bc , abc(除 abc 外都是固有尾)。 数学与信息工程学院 计算机系
3.2.2 符号串的运算 • 符号串的长度:符号串中符号的个数.符号串s的长度记为|s|, ε的长度为0; • 连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy。 • 例3.4 x = ST,y =123 则 xy = ST123 |x|=2,|y|=3,|xy|=5。 • εx = xε= x。 数学与信息工程学院 计算机系
方幂:符号串x自身连接n次得到的符号串 xx…xx(n个x)定义为 xn; • x0=ε, x1=x, x2=xx, x3=xxx。 • 例3.5x=AB, 则 x0=ε, x1=AB, x2=ABAB, x3=ABABAB; • 对于 n>0, xn = xxn-1 = xn-1x 。 数学与信息工程学院 计算机系
符号串集合:若集合A中一切元素都是某字母表上的符号串,则称A为字母表上的符号串集合。符号串集合:若集合A中一切元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 • 两个符号串集合A和B的乘积定义为: • AB = xy | x A 且 y B 例3.6集合A= a,b B = c,d ,则 AB = ac,ad,bc,bd ; • {ε} A = A {ε}= A (∵ε x = x ε= x)。 • 练习={ a, b, 0, 1 },问:A={ a, ab, 0b }和{ 1, 10, a1b }是否为上的符号串集合, AB=? 数学与信息工程学院 计算机系
使用 * 表示上的所有有穷长的串(包括ε)的集合,Σ*称为Σ的闭包。 • Σ* = Σ0∪Σ1∪Σ2∪…Σn∪… • 从*中除去ε得到的集合记为+, +称为Σ的正闭包。显然有: • Σ* = Σ0∪ +; • + = ΣΣ* = Σ*Σ。 数学与信息工程学院 计算机系
例3.7设Σ = { a, b },则求: • Σ* ,Σ+ 数学与信息工程学院 计算机系
3.3 文法和语言的形式定义 • 规则(重写规则、产生式或生成式):是形如α→β或α∷=β的(α,β)有序对,其中α是某字母表V的正闭包V+中的一个符号,β是V*中的一个符号。即(α∈V+,β∈V*)。 • α称为规则的左部(或生成式的左部)。 • β称为规则的右部(或生成式的右部)。 • α→β读作α定义为β,同时称它为一条关于α的规则(产生式)。 数学与信息工程学院 计算机系
3.3.1 文法的定义 • 文法G定义为四元组(VN,VT,P,S) • VN:非终结符集; • VT:终结符集; • P:产生式(规则)集合; • S:开始符号(识别符号); • VN、VT和 P 是非空有穷集。S 至少在一条规则中作为左部出现。 • VN ∩VT= φ, S∈ VN; • V= VN ∪VT,称为文法G的字母表(字汇表)。 数学与信息工程学院 计算机系
例3.8文法G=(VN,VT,P,S) • VN = { S }, VT = { 0, 1 }; • P={ S→0S1, S→01 }; • S为开始符号。 数学与信息工程学院 计算机系
例3.9文法G=(VN,VT,P,S) • VN = { 标识符,字母,数字 } • VT = { a, b, c,…x,y,z,0,1,…,9,_ } • P = { <标识符>→<字母> | _ • <标识符>→<标识符><字母>| _ • <标识符>→<标识符><数字>| _ • <字母>→a,…, <字母>→z • <数字>→0,…, <数字>→9 } • S = <标识符> 数学与信息工程学院 计算机系
习惯上只将产生式写出。并有如下约定: • ⑴、第一条产生式的左部是开始符号; • ⑵、用尖括号括起的是非终结符,否则为终结符; • ⑶、大写字母表示非终结符,小写字母表示终结符; • ⑷、G可写成G[S],其中S是开始符号; 数学与信息工程学院 计算机系
例3.8可写成: • G:S→0S1 • S→01 • 或写成: • G[S]:S→0S1 • S→01 数学与信息工程学院 计算机系
课堂练习:请写出以下推导的文法G[S] • <句子> ::= <主语><谓语> • ::= <代词>|<名词><谓语> • ::= 我<谓语> • ::= 我<动词><直接宾语> • ::= 我是<直接宾语> • ::= 我是<名词> • ::= 我是大学生 数学与信息工程学院 计算机系
练习: • 1、试写出文法G[S],表示二进制数。 • 2、试写出文法G[S],表示无符号数。 数学与信息工程学院 计算机系
3.3.2 直接推导 “ ” • α→β是文法G的产生式,γ,δ∈V*,若有v,w满足:v=γαδ,w= γβδ, • 则说:v(应用规则α→β)直接产生w; • 或者:w是v的直接推导; • 或者:w直接归约到v; • 记作v w。 数学与信息工程学院 计算机系
例3.9G[S]: S→0S1, S→01 • 直接推导: • S 0S1 (v=S,w=0S1,使用规则S→0S1,γ=ε,δ= ε ); • 0S10011 (v=0S1,w=0011,使用规则S→01,γ=0,δ=1); • 0S100S11 (v=0S1,w=00S11,使用规则S→0S1,γ=0,δ=1); 数学与信息工程学院 计算机系
3.3.3 推导 “ ”和“ ” • 若存在v =w0 w1 ... wn=w, (n>0) • 则称 v 推导出(产生)w(推导长度为n),或称 w 归约到 v。记作 v w • 若有v w,或v=w, • 则记为v w • G: S→0S1, S→01 • 0S1 00S11 000S111 00001111 即 : • 0S1 00001111 • 也记作 0S1 00001111 + * + + * + * 数学与信息工程学院 计算机系
3.3.4 句型和句子 • 句型:设G[S]是一文法,如果符号串x是从识别符号推导出来的,即S x,则称x是文法G[S]的句型。 • 句子:x仅由终结符号组成(即S x,且x∈VT*),则称x是G[S]的句子。 • 例3.10G: S→0S1, S→01 • S 0S1 00S11 000S111 00001111; • 则: S ,0S1 ,00S11 ,000S111 ,00001111都是G[S]的句型; 00001111是G[S]的句子。 * * 数学与信息工程学院 计算机系
3.3.5 语言的定义 • 由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)={x | S x,其中S为文法的开始符号,且x ∈VT*} • 例:G[S]: S→0S1, S→01 • 则:L(G) = {0n1n|n≥1} * 数学与信息工程学院 计算机系
例3.11文法G[S]: (1)S→aBE (2)S→aSBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee • L(G)={ anbnen | n≥1 } 数学与信息工程学院 计算机系
3.3.6 文法的等价 • 若L(G1)=L(G2),则称文法G1和G2是等价的。 • 如文法G1[A]:A→0R 与G2[S]:S→0S1 等价。 A→01 S→01 R→A1 数学与信息工程学院 计算机系
3.4 文法的类型 • 通过对产生式施加不同的限制,Chomsky将文法分为四种类型: • 0型文法:对任一产生式α→β,都有α∈(VN∪VT)*且至少含有一个非终结符,而 β∈(VN∪VT)* 。 • 0型文法也称为短语文法,它的能力相当于图灵机,或者说任何0型语言都是递归可枚举的。 • 对0型文法产生式的形式作某些限制,给出1,2和3型文法的定义。 数学与信息工程学院 计算机系
1型或上下文有关文法 • 定义1:对任一产生式α→β,都有|β|≥|α|, 仅仅 S→ε除外; • 定义2: α1Aα2→α1βα2(A在VN中,其他在V*中,β≠ε); • 定义2更能体现“上下文有关”这一术语,因为只有A出现在α1和α2的上下文中,才允许用β取代A。 数学与信息工程学院 计算机系
2型或上下文无关文法 • 定义1:对任一产生式α→β,都有α∈VN (即α 是一个非终结符), β∈(VN∪VT)* ; • 定义2:A→β(A在VN中,β在V*中); • 定义2更能体现“上下文无关”这一术语,因为在任何条件下都有A→β。 数学与信息工程学院 计算机系
3型或正规文法 • 任一产生式α→β的形式都为A→aB或A→a,其中A∈VN,B∈VN,a∈VT 。 • 显然,4个文法类的定义是逐渐增加限制的,因此: • 每一种正规文法都是上下文无关文法; • 每一个上下文无关文法都是上下文有关文法; • 每一个上下文有关文法都是0型文法。 数学与信息工程学院 计算机系
判断下列文法是什么类型: • 例3.8文法G[S]: 例3.10文法G[S]: • S→0S1 (1)S→aSBE| aBE • S→01 (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee 数学与信息工程学院 计算机系
文法G[S]: S→CD Ab→bA C→aCA Ba→aB C→bCB Bb→bB AD→aD C→ε BD→bD D→ε Aa→bD 数学与信息工程学院 计算机系
例 3.12文法G[S]: S→aB|bA A→a|aS|bAA B→b|bS|aBB 例3.13文法G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0 数学与信息工程学院 计算机系
3.5 上下文无关文法及其语法树 • 3.5.1 上下文无关文法 • 上下文无关文法有足够的能力描述现今程序设计语言的语法结构,比如描述算术表达式,描述各种语句等。 数学与信息工程学院 计算机系
例3.14算术表达式上下文无关文法的表示 • 结合下面规则所定义的表达式,试用上下文无关文法来表示: • ⑴、任何标识符是表达式; • ⑵、任何常数是表达式; • ⑶、若exp1和exp2都是表达式,那么:exp1 + exp2, • exp1 * exp2, (exp1)都是表达式; 数学与信息工程学院 计算机系
G=( { E }, { +, *, i, d,( , ) }, P, E } P: E → i; E → d; E → E+E; E → E*E;E → (E)。 • 这里的非终结符E表示一类算术表达式,i表示标识符,d表示常量,该文法定义了由变量、常量、+、*、(、)组成的算术表达式的语法结构。 数学与信息工程学院 计算机系
3.5.2 上下文无关文法的语法树 • 给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之相关联的语法树,这棵树满足下列4个条件: • ⑴、每个结点都有一个标记,此标记是V的一个符号; • ⑵、根的标记是S; • ⑶、若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在VN ; • ⑷、如果结点n(标记为A)的直接子孙,从左到右的次序是:A1,A2…An,则A→A1A2…An一定是P中的一个产生式。 数学与信息工程学院 计算机系
S→aAS • A→SbA • A→SS • S→a • A→ba • G的语法树如右所示: • 例3.15 G=({ S, A } , { a, b }, P, S),其中P为: S a A S S b A a a b a 数学与信息工程学院 计算机系
3.5.3 文法G的句型推导过程 • ⑴、 SaASaAaaSbAaaSbbaaaabbaa • ⑵、 SaASaSbASaabASaabbaSaabbaa • ⑶、SaASaSbASaSbAaaabAaaabbaa • 推导⑴和⑵每次都是对产生式中的最右(最左)非终结符进行替换,因此分别称为最右(最左)推导。最右推导称为规范推导,由规范推导所得的句型称为规范句型。 数学与信息工程学院 计算机系
⑴、⑵和 ⑶这三个推导过程的相联语法树是同一棵树。这就是说一棵语法树表示了一个句型的种种可能的(未必是所有的)推导过程,包括最左(最右)推导。 • 问:一个句型是否只对应唯一的一棵语法树?一个句型是否只有唯一的一个最左(最右)推导? 数学与信息工程学院 计算机系
例3.16求文法G[E] : E → i; E → E+E; E → E*E; E → (E) • 句型 i * i + i 的最左推导。 • ⑴、E E+E E*E+E i*E+E i*i+E i*i+i • ⑵、E E*E i*E i*E+E i*i+Ei*i+i 数学与信息工程学院 计算机系
两个不同的最左推导树 E E E + E E * E E * E E + E i i i i i i 数学与信息工程学院 计算机系
3.5.4 二义文法 • 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。或者,若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的。 • 产生某上下文无关语言的每一个文法都是二义的,则称此语言是先天二义的。。 数学与信息工程学院 计算机系
二义文法改造为无二义文法 • G[E]: E → i G[E]: E → T | E+T E → E+E T → F | T*F E → E*E F → (E)| i E → (E) • 规定优先顺序和结合律 数学与信息工程学院 计算机系
3.6 句型的分析 • 句型分析:识别一个输入符号串是否为某文法的句型。体现在程序设计语言的文法中就是识别一个符号串是否为语法上正确的程序的过程。 • 在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序,分析算法又称识别算法。 • 从左到右的分析算法:首先识别符号串中的最左符号,进而依次识别右边的一个符号。 数学与信息工程学院 计算机系
3.6.1 分析算法的类型 • 例3.17:考虑文法G[S] • S → cAd A → ab A → a识别输入串 w = cabd 是否该文法的句子。 • 推导过程:S cAd cabd。 数学与信息工程学院 计算机系