编译原理第二章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


对于高级程序设计语言及编译程序来说,语言定义 是很重要的。本章主要介绍语法结构的形式描述问 题,编译原理的主要内容也可以归结为应用形式语 言理论,并将它贯穿于词法分析和语法分析两个阶 段。 本章重点讨论正规文法、上下文无关文法及其对应 的有限自动机和下推自动机,以及在构造编译程序 时如何应用。

语言的句子是定义在B上的符号串。 (把单词看作符号,句子便是符号串) 若令C为句子集合,则C B * , 程序 C *
•若把字符看作符号,则单词就是符号,单 词集合就是符号串的集合。 •若把单词看作符号,则句子就是符号串, 而所有句子的集合(即语言)就是符号 串的集合
2.2文法的非形式讨论
这种推导一直进行下去,直到所有带< >的符号都由 终结符号替代为止。
推导方法:从一个要识别的符号 开始推导,即用相应规则的 右部来替代规则的左部, 每次仅用一条规则去进行推导。 <句子> => <主语><谓语> => < 代词><谓语> => 我<谓语> =>我<动词><直接宾语> =>我是<直接宾语> =>我是<名词> =>我是大学生
=> the big <名词> <谓语>
=> the big elephant <谓语> => the big elephant <动词><宾语> => the big elephant ate <宾语> => the big elephant ate <冠词><名词> => the big elephant ate the <名词> => the big elephant ate the peanut
A A A A* =? {ε, x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, …,…} A0 A1 A2 A3
★为什么对符号、符号串、符号串集合以及它们的
运算感兴趣?
若A为某语言的基本字符集 ( 把字符看作符号) A={a,b,……z,0,1,……,9, +,-,*, /, ( , ), =……} B为单词集 B ={begin, end, if, then,else,for,……,<标识符>,<常量>,……} 则B A* 。
=> the <形容词><名词><谓语> => the big <名词> <谓语> => the big peanut <谓语>
=> the big peanut <动词><宾语> => the big peanut ate <宾语> => the big peanut ate <冠词><名词> => the big peanut ate the <名词>
<句子> => <主语><谓语>
=> <冠词><形容词><名词><谓语>
=> the <形容词><名词><谓语>
<句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant | peanut <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词>
2.语法规则:我们通过建立一组规则,来描述句子的语法结构。 规定用“::=”表示“由……组成”。
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
=> the big peanut ate the elephant
4.语法树:我们用语法树来描述一个句子的语法结构。
语法成分(在形式 语言中又称“非终 结符”)
单词符号(在形 式语言中又称 “终结符号”)

语法规则:
<主语><谓语> <形容词><名词> <动词><宾语> <形容词><名词>
<句子> <主语> <谓语> <宾语>
(4)产生式 -是用来定义符号串之间关系的一组 语法规则。 形式:A a(A产生a) A::=a
(5)推导 推导是从开始符号开始,通过使用产生 式的右部取代左部,最终能产生语言的一个句 子的过程 最左(右)推导:每次使用一个规则,以其右 部取代符号串最左(右)非终结符 注:最左推导和最右推导称为规范推导
3. 由规则推导句子:有了一组规则之后,可以按照一定 的方式用它们去推导或产生句子。
推导方法:从一个要识别的符号开始推导,即用相应规则的 右部来替代规则的左部,每次仅用一条规则去进行推导。
<句子>::=<主语><谓语> <句子> => <主语><谓语> <主语>::=<代词>|<名词> <主语><谓语> => <代词><谓语> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 …… …… <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
最 左 推 导
Young men<谓语> Young men <动词><宾语> Young men like <宾语> Young men like <形容词><名词> Young men like pop<名词> Young men like pop music
第二章
编译基础
预备知识 - 形式语言基础 文法和语言的定义 几个重要概念 文法的表示:扩充的BNF范式 和语法图 文法的构造和语言的分类
一、高级语言—程序设计语言是一个记号系统
•语法 •语义
二、语法 -任何语言程序都可以看成是一定字符集(字母表)上的 字符串。 -语法使得这串字符形成一个形式上正确的程序
三、语义 —对于一个语言来说,不仅要给出它的词法、语法规则,而且
要定义它的单词符号和语法单位的意义。 —离开语义,语言只是一堆符号的集合。 —各种语言中有形式上完全相同的语法单位,含义却不尽相同 —对某种语言,可以定义一个程序的意义的一组规则称为语义 规则 —目前,大多数编译程序使用基于属性文法的语法制导翻译方 法来分析语义。

上述推导可写成<句子> + the big elephant ate the peanut => 说明: (1) 有若干语法成分同时存在时,我们总是从最左的语法成 分进行推导,这称之为最左推导,类似的有最右推导或一般推 导。 (2) 从一组规则可推出不同的句子,如以上规则还可推出 “大象吃象”、“大花生吃象”、“大花生吃花生”等句子, 它们在语法上都正确,但在语义上都不正确。 所谓文法是在形式上对句子结构的定义与描述,而未 涉及语义问题。
-我们用正规式和有限自动机理论来描述词法结构和 进行词法分析
二、语法
1.单词符号
2.语法单位—表达式、子句、语句、函数、过程、程 序 3.语法规则—规定了如何以单词符号来形成语法单位 —现在多数程序语言使用上下文无关文法来 描述语法规则。 —语言的词法规则和语法规则定义了程序的 形式结构,是判断输入字符串是否构成一个形式 上正确的程序的依据。
因为εx=xε=x,所以{ε}A=A{ε}=A
5. 符号串集合的幂运算:有符号串集合A,定义 A0 ={ε}, A1=A, A2=AA, A3=AAA,
…… …… An=An-1A=AAn-1 ,n>0 6.符号串集合的闭包运算:设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正闭包。 A*= A0 ∪A+ 称为集合A的闭包 例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, …,…} 1 2 3
<句子>
<句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant | peanut => <主语><谓语> <谓语>::=<动词><宾语> => <冠词><形容词><名词><谓语><动词>::=ate <宾语>::=<冠词><名词>
2.1 预备知识 一、字母表和符号串
1.字母表:非空有穷字符集 ---用∑,V表示 例如:∑={a-Z,A-Z,0-9,+,-,*,/,(,),=….} 2.符号:是语言中最基本的不可再分的单位 3.符号串:字母表中符号组成的任何有穷数列——单词 例如:scanf,int,3.1415,x1,100,a….. 空串:不会有任何符号的串称作空串,记作e 4、句子:字母表上符合某种规则构成的串 5、语言:字母表上句子的集合 注:约定用a,b,c……表示符号;用a,b,g….表示符号串;用 A,B,C……..表示其集合
(6)归约 归约是推导的逆过程,即,从给定的 源语言的句子开始,通过规则的左部取代 右部,最终达到开始符号的过程。 最左(右)归约是最右(左)推导的 逆过程


注:最左归约和最右归约称为规范规
(7)句型、句子和语言 句型: ---从文法的开始符号S开始,每步推导(包括 0步推导)所得到的字符串a 记作: S * a,其中a ∈(VN∪VT)* 句子:是仅含终结符的句型
1.符y
iff(当且仅当)组成x的每一个符号和
组成y的每一个符号依次相等。 2.符号串的长度:x为符号串,其长度|x|等于组成该符 号串的符号个数。
例: x=STV , |x|=3
3.符号串的联结:若x、y是定义在Σ上的符号串,

x=XY,y=YX,则x和y的联结 xy=XYYX也是Σ上的符号串。 注意:一般xy≠yx,而εx=xε 4.符号串集合的乘积运算:令A、B为符号串集合,定义 AB={ ab |a∈A,b∈B} 例:A={a,b},B={c,d}, AB= ? {ac,ad,bc,bd}
<形容词>
<名词> <动词>
Young ︳pop
men ︳music like
例如:根据英语的语法 规则看能否用最左推导 得出“Young men like pop music”是个语法正 确的句子;在推导过程 中有哪些句型。

对上句的最左推导
<主语><谓语>
<形容词><名词> <谓语>
<句子>
Young<名词> <谓语>
-语法=词法规则+语法规则
例如:0 .5*x1+c ——0.5,x1,c,*,+是语言的单词符号 ——0 .5*x1+c是语言的语法单位
1.单词符号:语言中具有独立意义的最基本的结构
1 .1词法规则--词法规则规定了字母表中哪些字符 串是单词符号 -单词符号一般包括:常数、标识符、基本字、算符、 界限符
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
用有穷集合刻画无穷集合
例:有一英语句子:The big elephant ate the peanut. <句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词> <名词> ::=peanut
单词-符号
2.1 预备知识
符号串的形式定义
有字母表,定义: (1)ε是上的符号串;
语句- 符号串 语言- 符号串集合
(2)若x是上的符号串,且a ,则ax或xa是上的符号串; (3)y是上的符号串,iff(当且仅当)y可由(1)和(2)产生。
符号串集合:由符号串构成的集合。
二、符号串和符号串集合的运算
1.什么是文法:文法是对语言结构的定义与描述。即从形式上 用于描述和规定语言结构的称为“文法”(或称为“语法”)。 例:有一句子:“我是大学生” 。这是一个在语法、 语义上都正确的句子,该句子的结构(称为语法结构)是由 它的语法决定的 。在本例中它为“主谓结构”。
如何定义句子的合法性? •有穷语言 •无穷语言
2.相关概念
•(1)非终结符
-出现在规则的左部、用<>括起来、表示一定的语 法概念的词
VN ---非终结符的集合 •(2)终结符 -语言中不可再分割的字符串(包括单个字符组成 的串)。注:终结符是组成句子的基本单位 VT---终结符的集合
(3)开始符号 -表示所定义的语法范畴非终结符 注:开始符号又称为识别符号
相关文档
最新文档