1、编译原理武汉大学计算机学院编译原理课程组前述内容回顾 编译程序 编译方式与解释方式的根本区别 编译程序的工作过程 编译程序的结构 编译程序的组织方式 编译程序的构造本章内容简介 文法的形式定义 语言的形式定义 为语言构造文法 和语法分析有关的概念 文法的实用限制第2章文法和语言的形式定义编译程序使得高级语言源程序所描述的功能得以在计算机上实现。编译程序的设计者就是高级语言的 实现者 ,源程序的编写者就是高级语言的 使用者 ,他们必须 遵循同样的准则 高级语言程序的构成规则,才能使写出的源程序能够被成功地翻译, 文法就是描述的就是高级语言程序的构成规则 。字母表中的 元素 称为符号。1.1 字母
2、表字母表是元素的 有穷非空 的集合。例如a,b, ,y,z,0,1等。2.1字母表与符号串符号串的 长度符号串是字母表中的符号所组成的任何 有穷序列 ,通常用小写的字母表示。不包含任何符号的符号串为 空串 ,记为。符号串的 连接符号串 集合的乘积 符号 串的方幂符号串 集合的方幂 符号串集合的 正闭包A+符号串集合的 闭包A*2.1字母表与符号串1.2 符号串与符号串集合VT VN=2.2.1 文法2 非终结符号:非终结符号用来表示语言的语法成分(或语法范畴、语法单位),例如 “赋值语句 ”。非终结符号所形成的集合记为 VN。1 终结符号:终结符号是组成语言的基本符号,如保留字、标识符、常数、
3、运算符、界限符等。终结符号是语言的不可再分的基本符号。终结符号形成的集合记为 VT。2.2 文法及其分类假如有若干条规则有相同的左部,通常写作: 1|2|n产生式是用来定义一个语法成分的 。它描述了一个语法成分的 形成规则 。例如标识符的构成规则可描述为:|3 产生式:产生式(规则)是一个有序对(,),通常写作(或=)其中称为产生式的左部,称为产生式的右部。 (VTVN)+, (VTVN)*。2.2文法及其分类VT终结符号 集。文法G是一个四元组,GS=(VT,VN,P,S)。文法是产生式的 有穷非空 的集合。VN非终结符号 集。S 开始符号 。至少要在一条产生式中作为左部出现。P 表示产生式
4、的 有穷非空 的集合。2.2文法及其分类G =( A,B,Y,Z,0,1,9, , , , P, )P 定义为:|A|B|C|D|E|F|G| |U|V|W|X|Y|Z0|1|2|3|4|5|6|7|8|9 例1 定义标识符的文法乔姆斯基(Chomsky)把文法分成四种类型 ,即0型、1型、2型和3型 。这四类文法的区别在于:对 产生式规则的形式上 施加不同的限制。2.3 文法的分类2.2.2 文法分类0型文法3型文法2型文法1型文法 (VN VT)+, (VN VT)*A AVN, (VN VT)* 1 | | | | (VN VT)+, (VN VT)*A a 或 A aB A,BVN,
5、aVT2.3 文法的分类2.3 文法的分类 文法 举例例 1. 文法 G1Z:G1Z=(S, B, C, D, a, b, c, P, S), 其中 P为S aSBC|aBC CB CDCD BD BD BCaB ab bB bbbC bc cC cc 1 | | | | , (VN VT)+, (VN VT)*例 2. 文法 G2Z:G2Z=(Z, S, A, B, C, a, b, c, P, Z),其中 P为 : Z SC S aAcA aAc|bBb C aCb|B bB|2型文法要求 : A AVN, (VN VT)*2.3 文法的分类 文法 举例2.3 文法的分类 文法 举例例 3
6、. 文法 G3Z:G3Z=(Z, U, V, 0, 1, P, Z), 其中 P为Z U0|V1U Z1|1V Z0|0 左线性 3型文法要求: A a或 A Ba, A,BVN, aVT2.3 语言和语法树语法成分的构成可用 文法 予以描述。给定文法后,可以通过 推导 得到该文法所描述的语言。2.3 语言和语法树 推导1.直接推导如果 是文法G的一条产生式,而 , 是 (VT VN)*中任意一个符号串,则将 作用于符号串 上得到符号串 ,称符号串 是符号串的 直接推导 ,记为 直接推导的逆过程称为 直接归约 ,即由符号串 可直接归约到。* T FE E+T|T T T*F|F F ( E)
7、|i 直接推导举例文法 GE: E+T|T T T*F|F F ( )* T F * T*F F2.3 语言和语法树 推导2. 推导设0、1、 n(n0)均为(VTVN)*中的符号串,且有012n-1n则称以上序列是 长度为n的推导 ,即 0可经过n步推导得到n。推导的逆过程称为 归约 ,即n可归约到0。 0+ n2.3 语言和语法树 语言1. 句型设有文法G S,如果 ,则称符号串u为文法GS的 句型 。S*u 2. 句子设有文法 GS,如果,且 uVT*,S*u 则称符号串 u为文法 GS的 句子 。2.3 语言和语法树 语言3. 语言设有文法G S,则文法GS描述的语言为:,且 uVT*
8、S*u L(GS)=u| 与语法分析有关的几个概念如果在某个推导过程中的 任何一步直接推导 中,都是对符号串的 最左(右)非终结符号 进行替换,则称其为最左(右)推导。最右推导又叫做 规范推导 。由规范推导得到的句型称为 规范句型 。1 最左推导和最右推导递归如果文法的产生式呈 UxUy 形式,则称其为规则递归,也称直接递归。如果文法中有推导 U*xUy ,则称其为文法递归,也称间接递归。递归如果文法的产生式呈 UUy 形式,则称其为规则 左 递归,也称直接 左 递归。如果文法中有推导 U*Uy ,则称其为文法 左 递归,也称间接 左 递归。递归G1S: S Sa|Ab|b|cA Bc|aB
9、Sb|bG2S: S a| |aTbT S, T |S 直接左递归直接右递归递归文法 G3S: S Aa|cA Bc|aB Sb|b间接左递归递归文法递归的作用:用较少的产生式产生无穷多个句子,实现 “用有穷表示无穷 ”。G4:| 0|1|2|3|4|5|6|7|8|9 2.3 语言和语法树 语法树设文法G=(VN,VT, P , S ),满足以下条件的树称为一棵 语法树 。树中的每个结点都有标记,该标记是VNVT中某一个符号;树根的标记是识别符号S;若一个结点至少有一个后继,则该结点上的标记必为非终结符号;若一个标记为U的结点,它有标记依次为x1、x2、 、xn的直接后继结点,则Ux1x2xn必定是文法G的一条产生式。语法树举例已知表达式文法 G2E:E -EEE -EE aE bE c试问 -a -bc是不是 L(G2)的句子?若是,请给出该句子所有可能的语法树;若不是,请说明理由。2.4 文法的实用限制在实际使用文法时,经常会对文法有所限制,使之满足某种具体的编译方法的要求。