《编译原理》第2章文法和语言的形式定义
- 格式:pdf
- 大小:185.81 KB
- 文档页数:39
编译原理基础知识----⽂法和语⾔的形式定义⼀、规则和产⽣式定义 规则,也称为重写规则、产⽣式或⽣成式,是形如α->β或α::=β的(α,β)有序对。
其中α称为规则的左部,β称为规则的右部,中间符号读作“定义为”。
例如 A->a,读作A定义为a,也把他说成是⼀条关于A的规则(产⽣式)。
⼆、语⾔的定义形式 定义⼀:G定义为(V N,V T,P,S)四元组,其中V N是⾮终结符(或语法实体,或变量),V T是终结符集;P为规则(α->β)的集合,α€(V NυV T)*,且⾄少包含⼀个⾮终结符,β€(V NυV T)*,,V N,V T,P为⾮空有穷集。
S称作是识别符或开始符,它是⼀个⾮终结符,⾄少在⼀条规则中作为左部出现。
V N和V T不含有公共元素,即V N∩V T=Ø(交集为空) 通常⽤V表⽰V NυV T,称为⽂法G的字母表或字汇表。
终结符和⾮终结符:⾮终结符可理解为⼀个可拆分元素,⽽终结符是不可拆分的最⼩元素。
终结符指组成语⾔的基本符号(如基本字、标识符、常数、算符、界符) ⾮终结符号(也称为语法变量)表⽰⼀定符号串的集合。
你看到的⼩写字母⼀般是终结符,⼤写字母肯定是⾮终结符 定义⼆:如果α->β是⽂法G=(VN,VT,P,S)的规则(或说是P中的⼀种产⽣式),γ和δ是V*中的任⼀符号,若有符号ν和ω满⾜,v= γαδ,,ω=γβδ,则说v(α->β)直接产⽣ω,或说是ω是v的直接推导,或说成ω直接归约到v,记作v=>ω。
定义三:如果存在直接推导的序列:v=ω0=>ω1=>ω2=>...=>ωn=ω(n>0),则称v推导产⽣ω(推导长度为n),或称ω归约到v,记作,v 加等于ω。
⽂法到字符称为推导 字符到⽂法称为归约 注意:通过多重推导得到的最终的终结符称为归约。
定义四:若有v =>+ ω,或者v = ω,(两种情况)则记作v=>* ω 例如,存在直接推导序列v=0s1=>00s11=>000s111=>00001111=ω,即0s1=>+00001111,也可记作0s1=>*00001111 定义五:设G[S]是⼀⽂法,如果符号串x是从识别符推导出来,即有S=>*x,则称x是⽂法G 句型。
编译原理本章内容简介学习目标第2章文法和语言的形式定义2.1 字母表与符号串2.1 字母表与符号串 2.1 字母表与符号串2.1 字母表与符号串 2.1 字母表与符号串2.1 字母表与符号串 2.1 字母表与符号串2.1 字母表与符号串 2.1 字母表与符号串2.2 文法及其分类2.2 文法及其分类 2.2 文法及其分类2.2 文法及其分类 2.2 文法及其分类例1 形式文法的例子例2 定义标识符的文法例3 文法举例文法的分类文法的分类文法的分类上下文无关文法可描述现今程序设计语言的绝大多数语法结构。
文法类的关系文法的分类——举例文法的分类——举例文法的分类——举例2.3语言和语法树2.3语言和语法树——推导(derivation) 2.3 语言和语法树——推导2.3 语言和语法树——语言 2.3 语言和语法树——语言文法描述的语言——例1文法描述的语言——例2文法描述的语言——例3为语言构造文法“凑规则”方法为语言构造文法举例为语言构造文法举例(续)为语言构造文法举例(续)为语言构造文法等价文法与语法分析有关的几个概念最左推导和最右推导举例与语法分析有关的几个概念递归——左递归(left recursive )递归——右递归(right recursive)递归——举例1递归——举例2递归——作用2.3 语言和语法树——语法树 2.3 语言和语法树——语法树语法树举例 2.3 语言和语法树——语法树2.3 语言和语法树——小结2.4文法的实用限制 2.4文法的实用限制——二义性文法二义性的危害2.4 文法的实用限制——二义性 2.4文法的实用限制——二义性关于文法二义性的说明 2.4 文法的实用限制——二义性2.4文法的实用限制——文法的压缩 2.4文法的实用限制——文法的压缩文法压缩举例 2.4 文法的实用限制——其它限制2.5 分析方法简介2.5 分析方法简介第2章内容小结第2章内容小结——思考第2章基本要求。
第二章文法和语言本章讲述目前广泛使用的上下文无关文法。
即用上下文无关文法作为程序设计语言语法的描述工具。
阐明语法的一个工具是文法。
本章将介绍文法和语言的概念。
本章重点:上下文无关文法及其句型分析中的有关问题。
第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。
以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。
是汉语的一个句子。
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。
这些规则成为我们判别句子结构合法与否的依据。
一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。
我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。
比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。
显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。
《编译原理》第2章文法和语言的形式定义编译原理是计算机科学中的一门重要课程,它研究的是将高级程序语言翻译成机器语言的方法和技术。
在编译原理中,文法和语言的形式定义是非常重要的概念,本文将围绕这个主题展开详细的讨论。
第2章《文法和语言的形式定义》主要介绍文法和语言的概念、应用及其形式定义的方法。
文法是描述语言结构和语法规则的形式化产物,而语言则是文法所描述的符号集合。
在编译原理中,我们需要通过形式定义的方式来描述和理解程序语言的结构和规则。
下面将对文法和语言的形式定义进行详细解释。
1.文法的定义文法是由产生式(Production)组成的四元组(G,N,P,S),其中:-G:表示文法-N:表示非终结符集合,即一组可以推导出或展开的符号。
-T:表示终结符集合,即不再进行推导或展开的符号。
-P:表示产生式规则集合,是一组指定如何生成目标符号串的规则。
-S:表示一个特殊的非终结符,称为开始符号或起始符号,表示文法的初始状态。
文法的定义可以采用两种形式:巴科斯-诺尔范式(Backus-Naur Form,BNF)和扩充背景文法表达式(Extended Backus-Naur Form,EBNF)。
BNF是最常用的文法定义方法,它使用产生式规则来描述语言的结构和规则。
2.产生式的定义产生式规定了如何用一个符号串替换或展开另一个符号串。
一个产生式由一个非终结符和一个由非终结符和终结符组成的字符串组成。
例如,产生式A->BC,表示用符号串BC替换非终结符A。
产生式可以有多个产生式体,每个产生式体之间使用“,”符号分隔。
例如,产生式A->B,C,表示非终结符A可以被替换成非终结符B或C。
产生式体中可以使用如下符号:-终结符:表示语法中不再与其他符号进行推导的符号,如数字、运算符、关键字等。
-非终结符:表示语法中可以被进一步推导的符号。
-空串:表示不产生任何字符的特殊终结符。
-ε:表示空串。
3.语言的定义语言是符合一些特定文法规则的所有符号串的集合。
编译原理文法和语言编译原理是计算机科学的重要分支,研究源代码如何被翻译成可执行代码的过程。
在编译原理中,文法和语言是两个核心概念。
本文将对文法和语言进行详细介绍,并探讨它们在编译原理中的应用。
首先,我们来了解什么是文法。
文法是描述一个语言的形式规则的集合。
它由一组产生式规则组成,每个产生式规则由一个非终结符和一个或多个终结符组成,表示一个语言的语法结构。
文法中还包含了一个起始符号,用于指定语法的入口点。
文法通常使用巴克斯范式(Backus-Naur Form, BNF)来表示。
BNF使用一组产生式规则来描述语言的语法结构。
每个产生式规则由一个非终结符、一个箭头和一个右部组成。
非终结符表示一个语法规则的符号,箭头表示产生式规则的定义,右部表示产生式规则推导出的符号串。
例如,下面是一个简单的文法,用于描述一个简单的数学表达式语言:```<expression> ::= <term> , <expression> + <term> ,<expression> - <term><term> ::= <factor> , <term> * <factor> , <term> / <factor> <factor> ::= <number> , ( <expression> )<number> ::= <digit> , <digit> <number><digit> ::= 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9```在这个文法中,`<expression>`表示一个表达式,可以由一个`<term>`或者多个`<term>`通过加法或减法运算得到。
编译原理武汉大学计算机学院编译原理课程组前述内容回顾·编译程序·编译方式与解释方式的根本区别·编译程序的工作过程·编译程序的结构·编译程序的组织方式·编译程序的构造本章内容简介·文法的形式定义·语言的形式定义·为语言构造文法·和语法分析有关的概念·文法的实用限制第2章文法和语言的形式定义编译程序使得高级语言源程序所描述的功能得以在计算机上实现。
编译程序的设计者就是高级语言的实现者,源程序的编写者就是高级语言的使用者,他们必须遵循同样的准则——高级语言程序的构成规则,才能使写出的源程序能够被成功地翻译,文法就是描述的就是高级语言程序的构成规则。
字母表中的元素称为符号。
1.1 字母表字母表是元素的有穷非空的集合。
例如{a,b,……,y,z},{0,1}等。
2.1字母表与符号串①符号串的长度符号串是字母表中的符号所组成的任何有穷序列,通常用小写的字母表示。
不包含任何符号的符号串为空串,记为ε。
②符号串的连接③符号串集合的乘积④符号串的方幂⑤符号串集合的方幂⑥符号串集合的正闭包A +⑦符号串集合的闭包A *2.1字母表与符号串1.2 符号串与符号串集合V T ∩V N =∅2.2.1 文法2.非终结符号:非终结符号用来表示语言的语法成分(或语法范畴、语法单位),例如“赋值语句”。
非终结符号所形成的集合记为V N 。
1.终结符号:终结符号是组成语言的基本符号,如保留字、标识符、常数、运算符、界限符等。
终结符号是语言的不可再分的基本符号。
终结符号形成的集合记为V T 。
2.2文法及其分类假如有若干条规则有相同的左部,通常写作:α→β1|β2|…|βn产生式是用来定义一个语法成分的。
它描述了一个语法成分的形成规则。
例如标识符的构成规则可描述为:<标识符>→<字母>|<标识符><字母>|<标识符><数字>3.产生式:产生式(规则)是一个有序对(α,β),通常写作α→β(或α∷=β)其中α称为产生式的左部,β称为产生式的右部。
α∈(V T ∪V N )+,β∈(V T ∪V N )*。
2.2文法及其分类V T ——终结符号集。
文法G是一个四元组,G[S]=(V T ,V N ,P,S)。
文法是产生式的有穷非空的集合。
V N ——非终结符号集。
S ——开始符号。
至少要在一条产生式中作为左部出现。
P ——表示产生式的有穷非空的集合。
2.2文法及其分类例1 定义标识符的文法G[<标识符>]=({ A,B,…,Y,Z,0,1,…,9},{<标识符>,<字母>,<数字>},P,<标识符>)P 定义为:<标识符>→<字母>|<标识符><字母>|<标识符><数字><字母>→A|B|C|D|E|F|G|……|U|V|W|X|Y|Z<数字>→0|1|2|3|4|5|6|7|8|9乔姆斯基(Chomsky)把文法分成四种类型,即0型、1型、2型和3型。
这四类文法的区别在于:对产生式规则的形式上施加不同的限制。
2.3 文法的分类2.2.2 文法分类0型文法3型文法2型文法1型文法α→βα∈(V N ∪V T )+,β∈(V N ∪V T )*A →βA ∈V N ,β∈(V N ∪V T )*α→β1≤|α|≤|β|α∈(V N ∪V T )+,β∈(V N ∪V T )*A →a 或A →aB A,B ∈V N ,a ∈V T 2.3 文法的分类2.3 文法的分类文法——举例例1. 文法G 1[Z]:G 1[Z]=({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≤|α|≤|β| ,α∈(V N ∪V T )+,β∈(V N ∪V T )*例2. 文法G 2[Z]:G 2[Z]=({Z ,S ,A ,B ,C},{a,b ,c},P ,Z ),其中P 为:Z →SCS →aAc A →aAc|bBbC →aCb|εB →bB|ε2型文法要求:A →βA ∈V N ,β∈(V N ∪V T )*2.3 文法的分类文法——举例2.3 文法的分类文法——举例例3. 文法G 3[Z]:G 3[Z]=({Z ,U ,V},{0,1},P ,Z ),其中P 为Z →U0|V1U →Z1|1V →Z0|0左线性3型文法要求:A →a 或A →Ba ,A,B ∈V N ,a ∈V T2.3 语言和语法树语法成分的构成可用文法予以描述。
给定文法后,可以通过推导得到该文法所描述的语言。
2.3 语言和语法树——推导1.直接推导如果α→β是文法G的一条产生式,而γ,δ是(V T ∪V N )*中任意一个符号串,则将α→β作用于符号串γαδ上得到符号串γβδ,称符号串γβδ是符号串γαδ的直接推导,记为γαδ⇒γβδ直接推导的逆过程称为直接归约,即由符号串γβδ可直接归约到γαδ。
* T F E E+T|T T T*F|F F 直接推导举例文法G[E]:→E+T|T T →T*F |F F →(E )|i* T F ⇒* T*F F与语法分析有关的几个概念1 最左推导和最右推导如果在某个推导过程中的任何一步直接推导α⇒β中,都是对符号串α的最左(右)非终结符号进行替换,则称其为最左(右)推导。
最右推导又叫做规范推导。
由规范推导得到的句型称为规范句型。
递归如果文法的产生式呈U→xUy形式,则称其为规则递归,也称直接递归。
*⇒xUy,则称其为文法递归,也称如果文法中有推导U间接递归。
递归如果文法的产生式呈U→Uy形式,则称其为规则左递归,也称直接左递归。
*⇒Uy,则称其为文法左递归,也称如果文法中有推导U间接左递归。
递归G1[S]:S→S a|Ab|b|cA→Bc|aB→Sb|b G2[S]:S→a|ε|aTbT→S, T|S直接左递归直接右递归递归[S]:S→A a|c文法G3A→B c|aB→S b|b间接左递归递归文法递归的作用:用较少的产生式产生无穷多个句子,实现“用有穷表示无穷”。
G[<无符号整数>]:4<无符号整数>→<数字>|<无符号整数><数字><数字>→0|1|2|3|4|5|6|7|8|92.3 语言和语法树——语法树设文法G=(V N ,V T ,P ,S ),满足以下条件的树称为一棵语法树。
⑴树中的每个结点都有标记,该标记是V N ∪V T 中某一个符号;⑵树根的标记是识别符号S;⑶若一个结点至少有一个后继,则该结点上的标记必为非终结符号;⑷若一个标记为U的结点,它有标记依次为x 1、x 2、…、x n 的直接后继结点,则U→x 1x 2…x n 必定是文法G的一条产生式。
语法树举例[E]:已知表达式文法G2E→-EEE→-EE→aE→bE→c)的句子?若是,请给出该句子试问--a -bc是不是L(G2所有可能的语法树;若不是,请说明理由。
2.4 文法的实用限制在实际使用文法时,经常会对文法有所限制,使之满足某种具体的编译方法的要求。
2.4 文法的实用限制——二义性如果文法G中的某一个句子存在两棵(包括两棵)以上不同的语法树(即有两个不同的最左或最右推导),则称该文法是二义性的。
例如Pascal语言中关于if语句的文法:<if语句>→if<条件>then<语句>|if<条件>then<语句>else<语句>|<其它语句>句型if B then if B then S else S就有两棵不同的语法树。
2.4 文法的实用限制——二义性二义性问题是不可判定的。
即:不存在一个算法,它能在有限的步骤内,确切地判定一个文法是否为二义性的。
排除文法二义性通常有两种方法:⑴在语义上加些限制。
⑵重新构造一个等价的无二义性文法。
二义性举例已知文法G3S→SaS|SbS|cSd|eS|f 请证明该文法是二义性文法。
2.4 文法的实用限制——文法的压缩1. 文法不能含有多余产生式:无法推导出终结符号串的产生式。
从开始符号出发的所有推导都不会用到的产生式。
2. 文法不能含有有害产生式:U→U文法G C a|a b|Db Ae|Ca|a C 文法压缩举例文法G 2[S]:S →Aa|ccA →Ae|a1[S]:S →Aa|cc A →Ae|Ca |a →Cb D →b|Db2.4 文法的实用限制——其它限制1. 文法不能含有空产生式:U→ε2. 文法不能含有左递归:U→Uy2.5 分析方法简介1. 自上而下分析方法的基本思想2. 自下而上分析方法的基本思想第2章内容小结·文法的形式定义·语言的形式定义·为语言构造文法·与语法分析有关的概念·文法的实用限制作业P33 2.2 ⑥2.6 ①。