- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理
什么是编译程序?
编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。
编译的各个阶段
什么是文法?
文法是以又穷的集合刻画无穷的集合的一个工具。
1、字母表:它是非空有穷集。 例如:∑={a,b,c}或∑={1,2,3}
2、符号:字母表中的元素称为符号。
3、符号串:符号的有穷序列,符号串也称为字。用ε来表示空符号串。例如:a,ab,abc
4、长度:符号串的长度是指该串所包含的符号个数。用|x|表示符号串x的长度。
例如:|a|=1,|abn|=3
5、连结:设x和y为符号串,则称xy 为他们的连结。 例如:x=aa,y=bb,则xy=aabb
6、空集:不含任何元素的集合,记为(。
7、乘积:设A和B是符号串集,则用AB表示A和B的乘积。A={a,b},B={c,d},则AB={ac,ad,bc,bd}
8、方幂:设A为符号串集,则定义
A0={ε}
A1=A
An=An-1 A
例如:A={a,b} 则有:
A0={ε} A1={a,b}
A2={aa,ab,ba,bb}
9、正闭包:设A为符号串集,则用A+表示A的正闭包,其具体定义如下:
A+=A1∪A2∪A3∪(…
例如:A={a},A+={a,aa,aaa,……}
10、星闭包:设A为一集合,则定义A的星闭包为A* ,其具体定义如下A*=A0∪A+
例如:A={a},A*={ε,a,aa,aaa,……}
文法G定义为四元组(VN,VT,P,S )其中
VN为非终结符号(或语法实体,或变量)集;
VT为终结符号集;
P为产生式(也称规则)的集合; VN,VT和P是非空有穷集。
S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN和VT不含公共的元素,即VN ∩ VT = φ
用V表示VN ∪ VT ,称为文法G的字母表或字汇表
例 文法G=(VN,VT,P,S)
VN = { S }, VT ={ 0, 1 }
P={ S→0S1, S→01 }
S为开始符号
推导:用若干次产生式可从x串导出y串,则称y为x的推导,记为xy。
直接推导:用一次产生式可从x导出y,则称y为x的直接推导,并记为x(y。
星推导:x y(当且仅当x=y或x y)。
句型:由初始符推出的任意符号集合。
句子:不包含非终结符的句型。
最左推导:推导的每一步都是对最左非终结符进行替换。
最右推导(规范推导):推导的每一步都是对最右非终结符进行替换。所得句型称为规范句型。
0型文法(短语结构文法):产生式为:α→β,其中α和β是符号串。
1型文法(上下文有关文法):产生式:αAβ→αuβ,其中A∈VN,u为非空串。
2型文法(上下文无关文法): A→β,其中A∈VN,β为非空串。
3型文法(正则文法):产生式为:A→a,A→bB,其中A,B∈VN, #a,b∈VT是符号串。
四种文法包含关系:0型文法→1型文法→2型文法→3型文法
二义性文法:一个文法存在某个句子使得它有两棵语法树。例G:E→E+E|E*E|(E)|i
将词法分析从语法分析部分独立出来的原因
1、使整个编译程序的结构更简洁、清晰、条例化
2、改进编译效率
3、增加编译系统的可移植性
例4.2.1: 令(={a,b},则(上的正规式和相应正规集为
(1) a (1) {a}
(2) a(b (2) {a,b}
(3) ab (3) {ab}
(4) (a(b)(a(b) (4) {aa,ab,ba,bb}
(5) a ( (5) {( ,a,aa, ……任意个a的串}
(6) (a(b)( (6) {( ,a,b,aa,ab,bb ……所有由 a和b组成的串}
(7) (a(b)((aa(bb)(a(b)( (7) ((上所有含有两个相继的a或两个相继的b组成的串}
正规式→正规文法、正规文法→正规式转换规则:
正规产生式 正规文法 正规文法 正规产生式 A=xy A→xB, B→y A→xB, B→y A=xy A=x*y A→xB, A→y, B→xB, B→y A→xA|y A=x*y A=x|y A→x, A→y A→x, A→y A=x|y 例4.2.4:
将G[S]转换为正规式
S→aA
S→a
A→aA
A→dA
A→a
A→d 解:由文法G[S]得
S=aA|a
A=(aA|dA)|(a|d)
则
S= a(a|d)*(a|d)|a
= a((a|d)*(a|d)
文档评论(0)