编译原理语法1(文法和语言).ppt_第1页
编译原理语法1(文法和语言).ppt_第2页
编译原理语法1(文法和语言).ppt_第3页
编译原理语法1(文法和语言).ppt_第4页
编译原理语法1(文法和语言).ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 4 讲,编译原理,西北农林科技大学本科教程,主讲教师:赵建邦,第三章 语法分析,3.1 文法和语言 3.2 推导与语法树 3.3 自顶向下的语法分析 3.4 自底向上的语法分析 3.5 规范规约的自底向上语法分析方法,第三章语法分析 3.1 文法和语言 文法和语言的基本概念 形式语言分类(4类) 正规表达式与上下文无关文法 重点掌握 正规表达式与上下文无关文法,本讲目标,定位 语法分析是编译过程的第二个阶段,也是核心部分 任务 根据语言的语法规则对单词序列进行语法分析,识别合法的语法单位(如表达式、语句、程序段等),若不存在语法错误则给出正确的语法结构 理论依据:上下文无关文法 方法 自顶向下分析(推导:开始符号 句子) 自底向上分析(规约:句子 开始符号),语法分析:,3.1 文法和语言,文法(Grammar)是程序语言的生成系统,用文法可以精确定义一个语言,并依据该文法构造出识别这个语言的自动机 文法对程序语言和编译程序的构造具有重要意义,如程序语言的词法可用正规文法描述,语法可用上下文无关文法描述,而语义则要借助于上下文有关文法描述,3.1 文法和语言,3.1.1 文法和语言的基本概念 1、语言 通常我们用表示字母表,字母表中的每个元素称为字符或符号。不同语言的字母表可能是不同的,程序语言的字母表通常是ASCII字符集。 由字母表中的字符所组成的有穷系列称为上的字符串或字,字母表上的所有字符串(包括空串)组成的集合用*表示。 那么,对字母表来说,*上的任意一个子集都称为上的一个语言,记为L( ),该语言的每一个字符串称为语言L的一个语句或句子。,3.1 文法和语言,3.1.1 文法和语言的基本概念 1、语言,例如,设 = a, b, c,则: L = , a, aa, ab, aaa, aab, aba, abb, 为上的一个语言。 如果a表示字母,b表示数字,c看做其它符号,则L即是程序语言中的标识符集,其中的每个标识符就是标识符集中的一个句子。,3.1 文法和语言,3.1.1 文法和语言的基本概念 2、文法 (定义) 文法通常表示成四元组GS = (VT,VN,S,): (1) VT为终结符号集,这是一个非空有限集,它的每个元素称为终结符号。 (2) VN为非终结符号集,它也是一个非空有限集,其每个元素称为非终结符号,且有VTVN = ; (3) S为文法开始符,是一个特殊的非终结符号,即SVN;,3.1 文法和语言,3.1.1 文法和语言的基本概念 2、文法(文法中的基本概念) 终结符号:是指语言不可再分的基本符号,通常是一个语言的字母表;终结符代表了语法的最小元素,是一种个体记号。 非终结符号:也称语法变量,它代表语法实体或语法范畴;非终结符代表一个一定的语法概念,因此,一个非终结符是一个类、一个集合。,注意: 1、字母表可以称为文法中的终结符集 2、非终结符不能是字母表中的字符,3.1 文法和语言,3.1.1 文法和语言的基本概念 2、文法 (定义) 文法通常表示成四元组GS = (VT,VN,S,): (4) 是产生式的非空有限集,其中每个产生式(或称规则)是一序偶(,),通常写作 或 := 读作“产生”、 “是”或“定义为”。在此,为产生式的左部,而为产生式的右部,、是由终结符和非终结符组成的符号串,(VTVN) + 且至少有一个非终结符,而(VTVN) *。,3.1 文法和语言,3.1.1 文法和语言的基本概念 2、文法(文法中的基本概念) 文法开始符号S:是一个特殊的非终结符,它代表文法所定义的语言中我们最终感兴趣的语法实体,即语言的目标,而其它语法实体只是构造语言目标的中间变量 产生式: (也称产生规则或规则)是定义语法实体的一种书写规则。一个语法实体的相关规则可能不止一个。,P1 P2 Pn,如果:,P 1 | 2 | | n,其中,每个i(i=1, 2, , n)称为P的一个候选式,直竖“ | ”读为“或”,它与“”一样是用来描述文法的元语言符号(即不属于的字符)。,3.1 文法和语言,例如,定义一个仅包含加和乘运算的表达式的文法GE: GS = (VT,VN,S,): VT =+ * ( ) i VN = E, T, F S = E 为以下产生式的集合: EE + T | T TT * F | F F (E)|i 两种文法都可以识别包含加和乘运算的表达式,它们的区别将在后面的课程中讲解,VT =+ * ( ) i VN = E S = E : Ei| E+E| E*E |(E),3.1 文法和语言,3.1.1 文法和语言的基本概念 关于文法表示的约定: 在此后的讨论中,用大写字母A、B、S、E等表示非终结符,用小写字母a、b、i、j等表示终结符,并用希腊字母等表示文法符号串,即、等均属于(VTVN)*。,2.3 正规表达式与优先自动机简介,例3.1 试构造产生标识符的文法。 解答 首先,标识符是以字母开头的字母数字串, 用L表示“字母”类非终结符, 用D表示“数字”类非终结符,,T L | D (单个的字母或数字字符),S T | ST (字母或数字串),其次,如果用S表示“字母数字串”类,则T是一字母或数字,ST也是字母数字串,即有,L a | b | | z D 0 | 1 | | 9,而用T表示“字母或数字”类非终结符,则有:,其中,产生式ST | ST是一种左递归形式,由它可以产生一串T,课本例题,最后,作为“标识符”的非终结符I,它或者是一单个字母,或者为一字母后跟字母数字串,即 I L | LS,因此,产生标识符的文法GI为: GI = ( VT, VN, I,): = (a, b, , z, 0, , 9, I, S, T, L, D, I, ) : I L | LS S T | ST T L | D L a | b | | z D 0 | 1 | | 9,课本例题,解答 根据题意,我们可以将奇数划分为如图3-1所示的三个部分,即最高位允许出现19,用非终结符B表示;中间部分可以出现任意多位数字09,每一位用非终结符D表示;最低位只允许出现1、3、5、7、9等奇数,用A表示。,例3.2 写一文法,使其语言是奇数集合,但不允许出现以0打头的奇数。,课本例题,图3-1 奇数划分示意,课本例题,GN = (0, 1, , 9, N, A, M, B, D, N, ) : NA | MA /*一位数字 | 多位数字*/ MB | MD /*仅两位数字(无中间位) | 多于两位数字*/ A1 | 3 | 5 | 7 | 9 B1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 D0 | B,由于中间部分可出现任意位,所以另引入了一个非终结符M,它包括最高位和中间位部分。假定开始符为N,则可得到文法GN为,课本例题,3.1 文法和语言,3.1.1 文法和语言的基本概念 3、文法产生的语言 设文法GS = (VT, VN, S, ),且、(VTVN)*,如果存在产生式A (VTVN)*),则称A可直接推出,即 其中 “=”表示直接推导,是应用产生规则进行推导的记号,这里仅使用一次规则 注意“=”与“”不同,“”是产生式中的定义记号。直接推导是指对文法符号串A中的非终结符A用相应的产生式A的右部来替换,从而得到,A =,3.1 文法和语言,推导的说明: (1)如果1可直接推出2,2可直接推出3,n-1可直接推出n ,即存在一个自1至n的推导序列:1=2=3=n(n0),则称1可推导出n,记为1 =n,它表示从1出发经过一步或若干步可推导出n。 (2) 如果记1 = 1, 1 = n则表示从1出发,经过0步或若干步可推导出n;也即1 = n,意味着或者1 =n,或者 1 =n。这个概念叫做“广义推导” 显然:直接推导的长度是1,推导的长度1, 广义推导的长度0,+,0,*,*,+,3.1 文法和语言,推导的举例: 例如,对下面的文法GE: E E + E | E * E | (E) | i (3.1) 其中,惟一的非终结符E可以看成是代表一类算术表达式。可以从E出发进行一系列的推导,如表达式 i+i*i 的推导如下:,E=E+E = E+E*E = E+E*i = E+i*i =i+i*i,注意:在每一步推导过程中,只能对其中的一个非终结符用其对应的产生式右部的一个候选式来替换。,3.1 文法和语言,3.1.1 文法和语言的基本概念 句型:假定GS是一个文法,S是它的开始符号,如果S=,(VTVN)*,则称是文法GS的一个句型; 句子:如果 VT *,则称是文法GS的一个句子。仅含终结符的句型是一个句子。 由定义可知,开始符S本身只能是文法的一个句型而不可能是一个句子; 句子是特殊的句型。 上面推导出的i+i*i是文法GE的一个句子(当然也是一个句型),而E+E、E+E*E、E+E*i和E+i*i都是文法GE的句型 思考:文法 GS: SaB|Bb Ba|b 的句型和句子有多少个?,*,3.1 文法和语言,3.1.1 文法和语言的基本概念 文法产生的语言:对于文法GS,它所产生的句子的全体称为由文法GS 产生的语言,记为L(G),即有: L(G) = | S=且 VT * 注意: (1) S至少进行一次推导; (2) S所推导出的必须全部由终结符组成; (3) 当文法给定,语言也就唯一地确定,即G L(G) ; 给定一个语言,它所对应的文法不是唯一的; (4) L(G)是VT *的子集,属于VT *的符号串不一定属 于L(G);,+,3.1 文法和语言,3.1.2 形式语言分类 语言学家Noam Chomsky于1956年首先建立了形式语言的描述,定义了四类文法及相应的形式语言,它对程序语言的设计、编译方法、计算复杂性等方面都产生了重大影响: 0型文法与0型语言(对应图灵机) 1型文法与1型语言(对应线性界限自动机,自然语言) 2型文法与2型语言(对应下推自动机,程序设计语言) 3型文法与3型语言(对应有限自动机),*,3.1 文法和语言,3.1.2 形式语言分类 1、0型文法与0型语言 如果文法GS的每一个产生式具有下列形式: 其中,V*VNV* (注:V = VNVT),即至少含有一个非终结符;V*;则称文法GS为0型文法或短语文法,记为PSG(Phrase Structure Grammar)。0型文法相应的语言称为0型语言或称递归可枚举集,它的识别系统是图灵(Turing)机。,例如: S ACaB Ca aaC CB DB CB E aD Da AD AC aE Ea AE ,3.1 文法和语言,3.1.2 形式语言分类 2、1型文法与1型语言 文法GS的每一个产生式,均在0型文法的基础上增加了字符长度满足| | |的限制,则称文法GS为1型文法或上下文有关文法,记为CSG。1型文法相应的语言称为1型语言或上下文有关语言,它的识别系统是线性界限自动机。 1型文法的等价定义 文法GS的每一个产生式具有下列形式: A 其中,、V*,AVN, V+ 。显然,它满足前述定义的长度限制,但它更明确地表达了上下文有关的特性,即A必须在、的上下文环境中才能被所替换。,3.1 文法和语言,3.1.2 形式语言分类 3、2型文法与2型语言 文法GS的每一个产生式具有下列形式: A 其中,A VN ,V*,则称文法GS为2型文法或上下文无关文法,记为CFG。2型文法相应的语言称为2型语言或上下文无关语言,它的识别系统是下推自动机。 例:GS=(a,b,S S, SaSb , Sab ) 产生的语言为:,3.1 文法和语言,3.1.2 形式语言分类 3、2型文法与2型语言 上下文无关文法有足够能力描述现今程序设计语言的语法结构。 例如:产生条件句的文法片段 语句-if 条件 then 语句 | if 条件 then 语句 else 语句 | 其他语句,3.1 文法和语言,3.1.2 形式语言分类 4、3型文法与3型语言 文法GS的每个产生式具有下列形式: A a 或 A aB 其中,A、B VN ,a VT *,则文法GS称为3型文法、正规文法或右线性文法,记为RG。3型文法相应的语言称为3型语言或正规语言,它的识别系统是有限自动机。3型文法还可以呈现左线性形式: A a 或 A Ba,3.1 文法和语言,3.1.2 形式语言分类 4、3型文法与3型语言 文法GS的每个产生式具有下列形式: A a 或 A aB 其中,A、B VN ,a VT *,则文法GS称为3型文法、正规文法或右线性文法,记为RG。3型文法相应的语言称为3型语言或正规语言,它的识别系统是有限自动机。3型文法还可以呈现左线性形式: A a 或 A Ba,3.1 文法和语言,3.1.2 形式语言分类 5、4类文法的关系与区别 关系: (1) 从0型文法到3型文法的限制逐渐增; (2) 13型文法都属于0型文法; (3) 2、3型文法不一定属于1型文法:因为1型文法不允许存在“A ”形式的产生式,则:如果2、3文法不含有类似产生式,则该文法属于1型文法。,3.1 文法和语言,3.1.2 形式语言分类 5、4类文法的关系与区别 区别: (1) 1型文法中不允许有形如“A”的产生式存在,而2、3型文法则允许形如“A”的产生式存在; (2) 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论