590 likes | 765 Views
第二章 高级语言及其语法描述. 程序语言的定义. 一个程序语言是一个记号系统,包括语法和语义两个方面。 语法: 任何语言程序都可看成是一定字符集(称字母表)上的一字符串(有限序列)。 语法包括了:词法规则和语法规则 语义: 对一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义。离开语义,语言只不过是一堆符号的集合。 所谓一个语言的语义是这样的一组规则,使用它可以定义一个程序的意义。这些规则称为语义规则。 阐明语义要比阐明语法难的多,现在还没有一种形式系统描述语义。. 2.2 高级语言的一般特性. 高级语言的分类:
E N D
程序语言的定义 • 一个程序语言是一个记号系统,包括语法和语义两个方面。 • 语法: • 任何语言程序都可看成是一定字符集(称字母表)上的一字符串(有限序列)。 • 语法包括了:词法规则和语法规则 • 语义: • 对一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义。离开语义,语言只不过是一堆符号的集合。 • 所谓一个语言的语义是这样的一组规则,使用它可以定义一个程序的意义。这些规则称为语义规则。 • 阐明语义要比阐明语法难的多,现在还没有一种形式系统描述语义。
2.2 高级语言的一般特性 • 高级语言的分类: • (1)强制式的高级语言(也称过程式语言) • (2)应用式的高级语言 • (3)基于规则的高级语言 • (4)面向对象的高级语言 • 程序结构 • 数据类型与操作:三要素 • (1)用于区别这种类型的数据对象的属性 • (2)这种类型的数据对象可以具有的值 • (3)可以作用于这种类型的数据对象的操作
语句与控制结构: • 表达式 • 语句:(1)赋值语句(2)控制语句(3)说明语句(4)简单 语句
2.3 程序语言的语法描述 首先掌握几个概念: 设是一个有穷字母表,它的每个元素称为一个符号。 上的一个字符串是指中的符号所构成的一个有穷序列。不包含任何符号的序列称为空字,极为。 用*表示上的所有符号串的全体,空字也包括在内。 *的子集U和V的(连接)积定义为 UV={ | U & V} 注意:UV≠VU 但 (UV)W=U(VW) V自身的n次积记为:Vn=VV…V(n次重复) 规定 V0={} V0 令 V*=V0 V1 V2 ……称V*为V的闭包。 记V+=V V*,称V+为V的正则闭包。
预备知识 -----语言概述 • 语言是由句子组成的集合,是由一组记号所构成的集合。 • 汉语--所有符合汉语语法的句子的全体 • 英语--所有符合英语语法的句子的全体 • 程序设计语言--所有该语言的程序的全体 • 每个句子构成的规律 • 研究语言 每个句子的含义 • 每个句子和使用者的关系
预备知识 -----语言概述 研究程序设计语言 每个程序构成的规律 每个程序的含义 每个程序和使用者的关系 语言研究的三个方面 语法 Syntax 语义 Semantics 语用 Pragmatics
预备知识 -----语言概述 语法 -- 表示构成语言句子的各个记号之间的组合规律 语义 -- 表示按照各种表示方法所表示的各个记号的特定含义。(各个记号和记号所表示的对象之间的关系) 语用 --表示在各个记号所出现的行为中,它们的来源、使用和影响。
预备知识 -----语言概述 • 每种语言具有两个可识别的特性,即语言的形式和该形式相关联的意义。 • 语言的实例若在语法上是正确的,其相关联的意义可以从两个观点来看,其一是该句子的创立者所想要表示的意义,另一是接收者所检验到的意义。这两个意义并非总是一样的,前者称为语言的语义,后者是其语用意义。幽默、双关语和谜语就是利用这两方面意义间的差异。
预备知识 -----形式语言 • 如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。形式语言抽象地定义为一个数学系统。“形式”是指这样的事实:语言的所有规则只以什麽符号串能出现的方式来陈述。形式语言理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法分析研究的基础。
预备知识 -----有关定义和记号 • 符号:可以相互区别的记号(元素)。 • 字母表:符号(元素)的非空有穷集合。 • 符号串:由字母表中的符号组成的任何有穷序列称为该字母表上的符号串。1.空符号串ε(没有符号的符号串)是上的符号串 2.若x是上的符号串,a是的元素,则xa是上的符号串 3.y是上的符号串,当且仅当它可以由1和2导出。 例如: Σ={a,b} ε,a,b,aa,ab,aabba…都是上的符号串
预备知识 -----有关定义和记号 • 符号串s的前缀:移走符号串s尾部的零个或多于零个符号得到的符号串. 如: b是符号串banana的一个前缀. • 符号串s的后缀:删去符号串s头部的零个或多于零个符号得到的符号串. 如:nana是符号串banana的一个后缀. • 符号串s的子串:从s中删去一个前缀和一个后缀得到的符号串. 如:ana是符号串banana的一个子串.
对于每个符号串s, s和ε两者都是符号串s的前缀,后缀和子串。 • 符号串s的真前缀,真后缀,真子串:任何非空符号串 x,相应地,是s的前缀,后缀或子串,并且 s x • 符号串的运算 • 符号串的长度:符号串中符号的个数.符号串s的长度记为|s|。 ε的长度为0 • 连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy 如 x=ab,y=cd 则 xy=abcd 有εa = aε • 方幂:符号串自身连接n次得到的符号串 an 定义为 aa…aa n个a a1=a, a2=aa则a0=ε
符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 • 两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 若 集合A=ab,cde B = 0,1 则 AB =ab1,ab0,cde0,cde1 • 使用 * 表示上的一切符号串(包括ε)组成的集合。Σ*称为Σ的闭包。 • 上的除ε外的所有符号串组成的集合记为+ 。Σ+称为Σ的正闭包。
例:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
语言:字母表上的一个语言是上的一些符号串的集合 (上的每个语言是*的一个子集)。 例如: Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 集合{ab,aabb,aaabbb,…,anbn,…} 或{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言。 集合{a,aa,aaa,…} 或{w|w∈Σ*且w=an,n≥1} 为字母表上的一个语言。 ε是一个语言。 即 是一个语言。
语言上的运算 • 设L是(上的)一个语言,M是(上的)一个语言, • 语言L和M的并,交,差,补是一个语言。 如语言L和M的并为 LM,是一个语言: {w|w is in L or is in M} 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } L1M1={a,b,… y,z,1,2…8,9 } • 语言L和M的连接是一个语言,记为 LMLM={st |s∈L且t∈M} 如: L1M1 ={a1,b1,…y1,z1,a2,b2…a9…z9} 有Lε= εL=L。 L的n次连接Ln= LL...L
语言上的运算 • 语言L的闭包记为 L*, L*= L0 L1 L2 ... L0= ε , Ln= LLn-1= Ln-1 L,n1 • 语言L的正闭包记为 L+, L+= L1 L2 L3 ... L+= LL*= L*LL*= L+ ε 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1M1)={a,b,… y,z,1,2…8,9} (L1M1)*={a,b,… y,z,1,2…8,9,aa,1a,…xyz,6789st..} L1(L1M1)*={所有字母打头的字母和数字符号串}
语言的描述 • 如何来描述一种语言? • 如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示 • 如果语言是无穷的,找出语言的有穷表示。两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要麽能停止并回答“不是”,(要麽永远继续下去。)
文法 数学系统 • 一个形式数学系统可由下列基本成分来刻画:一组基本符号,一组形成规则,一组公理,一组推理规则。
文法和语言的形式定义 • 文法的定义 • 推导的定义 • 句型、句子、语言的定义
文法的定义 • 文法G定义为四元组(VN,VT,P,S) • VN :非终结符集 • VT :终结符集 • P:产生式(规则)集合 • S:开始符号 VN∩VT= φ, S∈VN V=VN∪VT,称为文法G的文法符号集合
规则的定义 • 规则(重写规则、产生式或生成式),是形如α→β或α∷=β的(α,β)有序对,且α∈V+,β∈V*。 • α称为规则的左部(或生成式的左部)。 • β称为规则的右部(或生成式的右部)。
文法的定义 • 例3.1 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
文法的定义 • 习惯上只将产生式写出。并有如下约定: • 第一条产生式的左部是开始符号 • 用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符 • G可写成G[S],S是开始符号 G:S→aAb A→ab A→aAb A→ε G[S]: A→ab A→aAb A→ε S→aSb 缩写形式 G[S]: A→ab |aAb |ε S→aSb
例3.2 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
推导的定义 • 直接推导“” α→β是文法G的产生式,若有v,w满足: v=γαδ,w= γβδ, 其中γ∈V*,δ∈V* 则称v直接推导到w,记作v w 或w直接归约到v 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111 <程序><分程序>. <变量说明部分> <语句>. ... VAR<标识符>;BEGIN READ(<标识符>)END. VAR A;BEGIN READ(A) END.
推导的定义 • 若存在v w0 w1 ... wn=w,(n>0) • 则称v w,v推导出w,或w归约到v • 若有v w,或v=w, • 则记为v w
文法的句型、句子的定义 • 句型 • 有文法G,若S x,则称x是文法G的句型。 • 句子 • 有文法G,若S x,且x∈VT*,则称x是文法G的句子。 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111
例:G[E]:E→E+T|T T→T*F|F F→(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a表示一切能用符号a,+,*,(和)构成的算术表达式
文法,语言的定义 • 由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)={x|S x,其中S为文法的开始符号,且x ∈VT*} 例:G: S→0S1, S→01 L(G)={0n1n|n≥1}
例3.3 文法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 }
Sa S BE (S→aSBE) a aBEBE (S→aBE) aabEBE ( aB→ab ) aabBEE ( EB→BE ) aabbEE (bB→bb) aabbeE (bE→be) aabbee (eE→ee) • G生成的每个串都在L(G)中L(G)中的每个串确实能被G生成
已知语言描述,写出文法 • 例:若语言由0、1符号串组成,串中0和1的个数相同,构造其文法。A → 0B|1CB → 1|1A|0BBC → 0|0A|1CC • 已知文法,写出语言描述 • 例:G[E]:E→E+T|T T→T*F|F F→(E)|a
推导的定义 • 若存在v w0 w1 ... wn=w,(n>0) • 则称v w,v推导出w,或w归约到v • 若有v w,或v=w, • 则记为v w
文法的句型、句子的定义 • 句型 • 有文法G,若S x,则称x是文法G的句型。 • 句子 • 有文法G,若S x,且x∈VT*,则称x是文法G的句子。 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111
例:G[E]:E→E+T|T T→T*F|F F→(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a表示一切能用符号a,+,*,(和)构成的算术表达式
文法,语言的定义 • 由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)={x|S x,其中S为文法的开始符号,且x ∈VT*} 例:G: S→0S1, S→01 L(G)={0n1n|n≥1}
例3.3 文法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 }
Sa S BE (S→aSBE) a aBEBE (S→aBE) aabEBE ( aB→ab ) aabBEE ( EB→BE ) aabbEE (bB→bb) aabbeE (bE→be) aabbee (eE→ee) • G生成的每个串都在L(G)中L(G)中的每个串确实能被G生成
已知语言描述,写出文法 • 例:若语言由0、1符号串组成,串中0和1的个数相同,构造其文法。A → 0B|1CB → 1|1A|0BBC → 0|0A|1CC • 已知文法,写出语言描述 • 例:G[E]:E→E+T|T T→T*F|F F→(E)|a
文法的等价 • 若L(G1)=L(G2),则称文法G1和G2是等价的。 如文法G1[A]:A→0R 与G2[S]:S→0S1 等价 A→01 S→01 R→A1
文法的类型 • 通过对产生式施加不同的限制,Chomsky将文法分为四种类型: • 0型文法:对任一产生式α→β,都有α∈(VN∪VT)+, β∈(VN∪VT)* • 1型文法:对任一产生式α→β,都有|β|≥|α|, 仅仅 S→ε除外 • 2型文法:对任一产生式α→β,都有α∈VN , β∈(VN∪VT)* • 3型文法:任一产生式α→β的形式都为A→aB或A→a,其中A∈VN ,B∈VN ,a∈VT
文法的类型 • 例:1型(上下文有关)文法 文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee
文法的类型 • 例:1型(上下文有关)文法 文法G[S]: S→CD Ab→bA C→aCA Ba→aB C→bCB Bb→bB AD→aD C→ε BD→bD D→ε Aa→bD L(G)={ww|w∈{a,b}*}
文法的类型 • 例:2型(上下文无关)文法 文法G[S]: S→aB|bA A→a|aS|bAA B→b|bS|aBB 文法G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0
文法的类型 • 例:定义标识符的3型(正规)文法 文法G[I]: I → lT I → l T → lT T → dT T → l T → d
文法和语言 • 0型文法产生的语言称为0型语言 • 1型文法或上下文有关文法( CSG )产生的语言称为1型语言或上下文有关语言(CSL) • 2型文法或上下文无关文法( CFL )产生的语言称为2型语言或上下文无关语言( CF L ) • 3型文法或正则(正规)文法( RG )产生的语言称为3型语言正则(正规)语言( RL )
文法和识别系统 • 0型文法(短语文法)的能力相当于图灵机,可以表征任何递归可枚举集,而且任何0型语言都是递归可枚举的 • 1型文法(上下文有关文法):产生式的形式为α1Aα2→α1βα2,即只有A出现在α1和α2的上下文中时,才允许β取代A。其识别系统是线性界限自动机。
文法的类型 • 2型文法(上下文无关文法、CFG):产生式的形式为A→β,β取代A时与A的上下文无关。其识别系统是不确定的下推自动机。 • 3型文法(正规文法、右线性文法):产生的语言是有穷自动机(FA)所接受的集合