编译原理第二章
合集下载
编译原理第二章
![编译原理第二章](https://img.taocdn.com/s3/m/0796cf0c4a7302768e993967.png)
安徽理工大学 《编译原理》 信息安全系 sb
19
…… <数字>::=9 该文法的字汇表V为:V={0, 1, …, 9, <无 符号整数>, <数字串>, <数字>} •终结符与非终结符: 终结符与非终结符: 终结符与非终结符 给定文法G, 给定文法 ,凡出现在规则左部的符号称 为非终结符,其组成的集合记为: 为非终结符,其组成的集合记为: Vn。凡 不属于V 的符号称为终结符, 不属于 n 的符号称为终结符,其组成的集 合记为: Vt 。 合记为: 字汇表:V= Vn∪Vt 字汇表 Vn∩Vt = φ 若无特殊说 我们用大写字母表示非终结符。 明,我们用大写字母表示非终结符。
安徽理工大学 《编译原理》 信息安全系 sb
17
<代词> ::=I <谓语> ::=<动词><直接宾语> <动词> ::=love <直接宾语> ::=<物主代词><名词> <物主代词> ::=my <名词> ::=motherland 其中,带有尖括号的称为语法成分或语法 类,不带尖括号的称为单词符号或单词。 •文法与字汇表: 文法与字汇表: 文法与字汇表 文法(G[Z])是规则的非空有穷集合。 是规则的非空有穷集合。 文法 是规则的非空有穷集合
安徽理工大学 《编译原理》 信息安全系 sb
8
2.符号串的运算 2.符号串的运算 •符号串相等: 符号串相等: 符号串相等 是字母表∑上的两个符号串 设x, y是字母表 上的两个符号串,若x与y 是字母表 上的两个符号串, 与 的诸符号依次相等,则符号串x, 相等 相等。 的诸符号依次相等,则符号串 y相等。记 为: x=y •符号串的长度: 符号串的长度: 符号串的长度 设x为字母表 上的符号串,符号串中包 为字母表∑上的符号串, 为字母表 上的符号串 含的符号的个数称为符号串x的长度 的长度。 含的符号的个数称为符号串 的长度。用|x| 表示。 表示。
19
…… <数字>::=9 该文法的字汇表V为:V={0, 1, …, 9, <无 符号整数>, <数字串>, <数字>} •终结符与非终结符: 终结符与非终结符: 终结符与非终结符 给定文法G, 给定文法 ,凡出现在规则左部的符号称 为非终结符,其组成的集合记为: 为非终结符,其组成的集合记为: Vn。凡 不属于V 的符号称为终结符, 不属于 n 的符号称为终结符,其组成的集 合记为: Vt 。 合记为: 字汇表:V= Vn∪Vt 字汇表 Vn∩Vt = φ 若无特殊说 我们用大写字母表示非终结符。 明,我们用大写字母表示非终结符。
安徽理工大学 《编译原理》 信息安全系 sb
17
<代词> ::=I <谓语> ::=<动词><直接宾语> <动词> ::=love <直接宾语> ::=<物主代词><名词> <物主代词> ::=my <名词> ::=motherland 其中,带有尖括号的称为语法成分或语法 类,不带尖括号的称为单词符号或单词。 •文法与字汇表: 文法与字汇表: 文法与字汇表 文法(G[Z])是规则的非空有穷集合。 是规则的非空有穷集合。 文法 是规则的非空有穷集合
安徽理工大学 《编译原理》 信息安全系 sb
8
2.符号串的运算 2.符号串的运算 •符号串相等: 符号串相等: 符号串相等 是字母表∑上的两个符号串 设x, y是字母表 上的两个符号串,若x与y 是字母表 上的两个符号串, 与 的诸符号依次相等,则符号串x, 相等 相等。 的诸符号依次相等,则符号串 y相等。记 为: x=y •符号串的长度: 符号串的长度: 符号串的长度 设x为字母表 上的符号串,符号串中包 为字母表∑上的符号串, 为字母表 上的符号串 含的符号的个数称为符号串x的长度 的长度。 含的符号的个数称为符号串 的长度。用|x| 表示。 表示。
编译原理第二章文法和语言
![编译原理第二章文法和语言](https://img.taocdn.com/s3/m/bfcc7f2f0a1c59eef8c75fbfc77da26924c5967f.png)
语言的语法结构
总结词
语言的语法结构是语言形成和发展的核心要素,决定 了语言的表达方式和意义。
详细描述
语言的语法结构是指语言的组织规律和规则,包括词 法、句法、语义等方面的规则。词法规定了词汇的构 成和变化规则,如名词、动词、形容词等词类的划分 ;句法规定了句子结构的规则,如主语、谓语、宾语 等句子的成分及其排列顺序;语义则涉及到词汇和句 子的意义和解释。语言的语法结构是语言理解和生成 的基础,也是语言演变和发展的关键因素。
文法和语言的应用前景
1 2
人工智能领域
文法和语言是人工智能领域的重要基础,可用于 自然语言处理、机器翻译、语音识别等技术的研 究和应用。
计算机科学教育
文法和语言是计算机科学专业的重要课程之一, 对于培养计算机科学人才具有重要意义。
3
软件工程领域
文法和语言可用于软件工程领域中的编译器设计 和开发,提高软件开发的效率和可靠性。
05
文法和语言的未来发展
文法和语言的研究方向
形式语言理论
深入研究形式语言的基本理论, 包括语法、语义和语用等方面, 为自然语言处理和人工智能等领 域提供理论基础。
自然语言处理
结合自然语言处理技术,研究自 然语言的语法、语义和语用规律, 提高自然语言处理的准确性和效 率。
计算语言学
将计算语言学与形式语言理论相 结合,研究语言处理算法和模型, 为机器翻译、语音识别等领域提 供技术支持。
文法和语言的发展趋势
深度学习与文法和语言的结合
01
随着深度学习技术的发展,文法和语言的研究将更加注重与深
度学习的结合,以提高语言处理的性能和效率。
跨媒体语言处理
02
随着多媒体数据的普及,文法和语言的研究将逐渐扩展到跨媒
编译原理第二章 文法和语言
![编译原理第二章 文法和语言](https://img.taocdn.com/s3/m/78b6af53ad02de80d4d840fa.png)
第一节 文法的直观概念
当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需 列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。 以自然语言为例, 人们无法列出全部句子, 但是人们可以给出一些规则, 用这些规则来说明 (或 者定义)句子的组成结构,比如: “我是大学生” 。是汉语的一个句子。汉语句子可以是由主语后随 谓语而成,构成谓语的是动词和直接宾语,我们采用 EBNF 来表示这种句子的构成规则: 〈句子〉∷=〈主语〉 〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉 〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉 “我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。 这些规则成为我们判别句子结构合法与否的依据。 一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。我们开始去找∷= 左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成: 〈句子〉 〈主语〉 〈谓语〉 ,然后在得到的串〈主语〉 〈谓语〉中,选取〈主语〉或〈谓语〉 ,再用相应的规则∷=右端 代替之。比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉 ,那么得到: 〈主语〉 〈谓语〉〈代 词〉 〈谓语〉 ,重复做下去,我们得到句子: “我是大学生”的全部动作过程是: 〈句子〉 〈主语〉 〈谓语〉 〈谓语〉 〈代词〉 我〈谓语〉 〈直接宾语〉 我〈动词〉 我是〈直接宾语〉 我是〈名词〉 我是大学生 符号 的含义是,使用一条规则,代替 左边的某个符号,产生 右端的符号串。 显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生” , “王 明学习英语” , “我学习英语” , “他学习英语” , “你是工人” , “你学习王明”等几十个句子。事实上, 使用文法作为工具,不仅为了严格地定义句子的结构,也是为了用适当条数的规则把语言的全部句 子描述出来,是以有穷的集合刻划无穷的集合的工具。
编译原理课件第二章
![编译原理课件第二章](https://img.taocdn.com/s3/m/5c63eb01b52acfc789ebc9a3.png)
递归子程序法
递归子程序法:对应每个非终结符语法单元,,编一个独 立的处理过程(或子程序)。语法分析从读入第一个单词 开始,由非终结符<程序>(即开始符)出发,沿语法描述 图箭头所指出的方向进行分析。当遇到非终结符时,则调 用相应的处理过程,从语法描述图看,也就进入了一个语 法单元,再沿当前所进入的语法单元所指箭头方向继续进 行分析。当遇到描述图中是终结符时,则判断当前读入的 单词是否与图中的终结符相匹配,若匹配,再读取下一个 单词继续分析。遇到分支点时,将当前的单词与分支点上 多个终结符逐个相比较,若都不匹配时可能是进入下一个 非终结符语法单位或是出错。
N ö í ³ ´
ò ¡ í ó ´ Ó ´ Î
á ÷ ½ Ê
PL/0编译程序语义分析的设计与实现
PL/0编译程序语法、语义分析的的核心程序是BLOCK过程 , 说明部分的分析与处理 表格管理 过程体(语句)的分析与处理
jmp jmp int lod lit opr sto opr int opr sto lod lit opr jpc cal lit lod opr opr opr opr sto jmp opr
0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 2 3 3 10 2 4 0 5 16 3 3 0 9 24 2 2 4 4 14 15 16 3 11 0
3 5 7 9 10 12 13 14
£ ¹ <
= =
Ç = ²
>
11
=
Ç = ²
, + - ( ¡ ¡
PL/0编译程序语法语义分析
PL/0编译程序语法分析的设计与实现
编译原理第二章课件
![编译原理第二章课件](https://img.taocdn.com/s3/m/9b68d37a5627a5e9856a561252d380eb6294233b.png)
例1:文法G: S aSb | ab
L(G)={anbn|n≥1}
28
2.2.2 文法的分类
3型文法(又称线性文法、正则文法、正 规文法)
➢ 如果对文法G中的任一产生式均限制为形如: AB 或 A
其中: A,B∈VN , ∈VT 则称文法G为3型文 法。 ➢ 上述形式的3型文法也称为右线性文法。 ➢ 如果对文法G中的任一产生式均限制为形如:
A0 = { } A1 = { a,b } A2 = AA ={ aa,ab,ba,bb } A3 = A2A ={ aaa,aab,aba,abb,baa,bab,bba,bbb }
……
An =An-1A = AAA……A
12
2.1 基本概念
10.符号串集合的正闭包
设A为符号串的集合,则称A+为符号串集A的 正闭包.具体定义如下:
文法
字符串集合
16
2.2 .1 文法的定义
2.2.1 文法(Grammar)的定义 文法的定义
一个文法G是一个四元组: G = ( VN, VT, S, P )
其中:
➢ VT (Terminal Vocabulary)是一个非空的有限集合,
它的每个元素称为终极符号或终极符,一般用小 写字母表示。 从语法分析的角度看,终极符号是 一个语言不可再分的基本符号。
可合并为一个,缩写为:
P 1 | 2 | … | n
其中,每个i 称为 P 的一个候选式,符号“|” 读作“或” 。
21
⑥一个文法的核心是产生式。 一般约定:
用< >括起来或 大写字母:非终结符 不用< >括起来或小写字母:终结符
22
例1
G =(VN,VT, S, P) 其中:VN={ S , A}
L(G)={anbn|n≥1}
28
2.2.2 文法的分类
3型文法(又称线性文法、正则文法、正 规文法)
➢ 如果对文法G中的任一产生式均限制为形如: AB 或 A
其中: A,B∈VN , ∈VT 则称文法G为3型文 法。 ➢ 上述形式的3型文法也称为右线性文法。 ➢ 如果对文法G中的任一产生式均限制为形如:
A0 = { } A1 = { a,b } A2 = AA ={ aa,ab,ba,bb } A3 = A2A ={ aaa,aab,aba,abb,baa,bab,bba,bbb }
……
An =An-1A = AAA……A
12
2.1 基本概念
10.符号串集合的正闭包
设A为符号串的集合,则称A+为符号串集A的 正闭包.具体定义如下:
文法
字符串集合
16
2.2 .1 文法的定义
2.2.1 文法(Grammar)的定义 文法的定义
一个文法G是一个四元组: G = ( VN, VT, S, P )
其中:
➢ VT (Terminal Vocabulary)是一个非空的有限集合,
它的每个元素称为终极符号或终极符,一般用小 写字母表示。 从语法分析的角度看,终极符号是 一个语言不可再分的基本符号。
可合并为一个,缩写为:
P 1 | 2 | … | n
其中,每个i 称为 P 的一个候选式,符号“|” 读作“或” 。
21
⑥一个文法的核心是产生式。 一般约定:
用< >括起来或 大写字母:非终结符 不用< >括起来或小写字母:终结符
22
例1
G =(VN,VT, S, P) 其中:VN={ S , A}
编译原理―第2章 前后文无关文法和语言课件
![编译原理―第2章 前后文无关文法和语言课件](https://img.taocdn.com/s3/m/34bf59ff10a6f524cdbf8539.png)
?一组终结符号不能被替换的符号单词符号?一组非终结符号能够被替换为终结符号或非终结符号语法单位?一个开始符号从这个符号开始替换最大语法单位程序?一组产生式替换规则把左边的字符串替换为右边的字符串222文法和语言的形式定义19?关键思路?从文法的开始符号出发?反复使用产生式对非终结符进行替换展开?直到整个字符串中不再包含非终结符?这时得到了这个文法的一个句子一个程序?这个过程称为推导222文法和语言的形式定义20?文法的形式定义?产生式规则?产生式是一个有序对通常写作或
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。
《编译原理》第2章 编译基础-形式语言与有穷自动机
![《编译原理》第2章 编译基础-形式语言与有穷自动机](https://img.taocdn.com/s3/m/3575bc23bb4cf7ec4bfed02b.png)
整理课件
句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1
∈
1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型
句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1
∈
1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型
编译原理chapter2
![编译原理chapter2](https://img.taocdn.com/s3/m/899973daad51f01dc381f106.png)
•12
{ A, B, …, Z, a, b, …, z }, D: { 0, 1, …, 9 }
L D, LD, L6, L*, L(L D )*, D+
2.2 词法记号的描述与识别
2.2.2 正规式 正规式用来表示简单的语言,叫做正规集 正规式 定义的语言 {} {a} 备注
•13
2.1 词法记号及属性
2.1.3 词法错误
词法分析器对源程序采取非常局部的观点 难以发现下面的错误 fi (a == f (x) ) … 在实数是a.b格式下,可以发现下面的错误 123. 紧急方式的错误恢复 错误修补
•9
回顾
源程序 词法分析器 记号 (token) 取下一个记号 符号表
•25
delim
开始 delim other 22 *
20
21
2.3
有 限 自 动 机
•26
语言的识别是一个程序,它取串x作为输入,当x是语言句子 的时候,它回答“是”,否则回答“不是”。可以通过构造 称为有限自动机的更一般的转换图,把正规式翻译成识别器 。 有限自动机分为确定和不确定两种情况。“不确定”的含义 是,存在这样的状态,对于某个输入符号,它存在不止一种 转换。 确定和不确定的有限自动机能识别的语言正好是正规式所能 a 表达的语言。
•6
for
relation id
for
< , < = , = , … sum, count, D5 “seg. error”
字符f,o,r
< 或 <= 或 = 或 … 由字母开头的字母数字串
number
literal
3.1, 10, 2.8 E12
任何数值常数
编译原理chapter2 语言的基本知识
![编译原理chapter2 语言的基本知识](https://img.taocdn.com/s3/m/a53b27dabdeb19e8b8f67c1cfad6195f302be818.png)
10
2.2 文法和语言的定义
2 . 2 . 1 引子 2 . 2 . 2 文法和语言的定义 一. 文法和语言的定义 二. 推导 三. 语言 四. 最左推导和最右推导 五。短语,直接短语,句柄
11
引子 分析:The grey wolf will eat the goat
〈句子〉
〈主语〉
〈谓语〉
〈冠词〉〈形容词〉〈名词〉 〈动词〉 〈直接宾语〉
7
三.符号串的运算 1.连接:设x和y是符号串,它们的连接 xy 是把y的符号写在x的符号之后得到的符号 串。例如,x=ba,y=nana,xy=banana.
2.方幂:x0= ; x1=x; x2=xx;
……;xn=xn-1x;
例如, x=ba,
x1= ba, x2=baba, x3=bababa,…...
3
2.1.1 字母表
字母表是符号的非空有穷集合。任何程序
语言都有自己的字母表,例如:
1.计算机语言:由符号“0”和“1”组成
的字
母表,∑={0,1}
2. ASCII字符集;
3. Pascal字母表为: ∑=
{AZ, az, 09, +, -, *, /, <, =, >,
:, ',', ; ,., , (, ), {, }, [, ] }
直接宾语 , 助动词 ,动词原形 } 语法规则集P={句子 主语谓语,……} 开始符号S= 句子
14
句子根据规则推导出来
句子主语 谓语
冠词 形容词 名词 谓语
the 形容词 名词 谓语
the grey名词 谓语
the grey wolf 谓语
the grey wolf 动词 直接宾语
2.2 文法和语言的定义
2 . 2 . 1 引子 2 . 2 . 2 文法和语言的定义 一. 文法和语言的定义 二. 推导 三. 语言 四. 最左推导和最右推导 五。短语,直接短语,句柄
11
引子 分析:The grey wolf will eat the goat
〈句子〉
〈主语〉
〈谓语〉
〈冠词〉〈形容词〉〈名词〉 〈动词〉 〈直接宾语〉
7
三.符号串的运算 1.连接:设x和y是符号串,它们的连接 xy 是把y的符号写在x的符号之后得到的符号 串。例如,x=ba,y=nana,xy=banana.
2.方幂:x0= ; x1=x; x2=xx;
……;xn=xn-1x;
例如, x=ba,
x1= ba, x2=baba, x3=bababa,…...
3
2.1.1 字母表
字母表是符号的非空有穷集合。任何程序
语言都有自己的字母表,例如:
1.计算机语言:由符号“0”和“1”组成
的字
母表,∑={0,1}
2. ASCII字符集;
3. Pascal字母表为: ∑=
{AZ, az, 09, +, -, *, /, <, =, >,
:, ',', ; ,., , (, ), {, }, [, ] }
直接宾语 , 助动词 ,动词原形 } 语法规则集P={句子 主语谓语,……} 开始符号S= 句子
14
句子根据规则推导出来
句子主语 谓语
冠词 形容词 名词 谓语
the 形容词 名词 谓语
the grey名词 谓语
the grey wolf 谓语
the grey wolf 动词 直接宾语
编译原理 第二章
![编译原理 第二章](https://img.taocdn.com/s3/m/9d91de966bec0975f465e2d2.png)
词法分析程序GETSYM将完成下列任务:
(1) 滤空格:空格在词法分析时是一种不可缺少的界符,而在语法分析时则是 无用的,所以必须滤掉。 (2) 识别保留字:设有一张保留字表。对每个字母打头的字母、数字字符串要 查此表。若查着则为保留字,将对应的类别放在SYM中。如IF对应值IFSYM,THEN 对应值为THENSYM。若查不着,则认为是用户定义的标识符。 (3) 识别标识符:对用户定义的标识符将IDENT放在SYM中,标识符本身的值放 在ID中。 (4) 拼数:当所取单词是数字时,将数的类别NUMBER放在SYM中,数值本身的值 存放在NUM中。 (5) 拼复合词:对两个字符组成的算符如:>=、∶=、<= 等单词,识别后将 类别送SYM中。 (6) 输出源程序:为边读入字符边输出(可输出在文件中)。
(1) 说明部分的分析
对每个过程(包括主程序,看成一个主过程)的说明对象造名字表TABLE,填写登录 所在的层次、标识符的属性和分配的相对位置。登录信息是调用ENTER过程完成的。 说明部分的处理对主程序看成是第0层过程,主程序定义的过程为第1层,随着嵌套 的深度增加而层次数加大。PL/0允许最大层次为3。 所造名字表放在全程量一维数组TABLE表中。TX为索引表的指针,表中的每个元素 为记录型数据。LEV给出层次,DX给出每层局部量当前已分配到的相对位置,可称地址 指示器,每说明完一个变量后DX指示器加1。 例如:
2.5 PL/0编译程序的目标代码结构和代码生成
编译程序的目标代码是在分析程序体时生成的,在处理说明部分时并不 生成目标代码,而当分析程序体中的每个语句时,当语法正确则调用目标代 码生成过程以生成与PL/0语句等价功能的目标代码,直到编译正常结束。 PL/0编译程序所产生的目标代码是一个假想栈式计算机的汇编语言,可 称为类PCODE指令代码,它不依赖任何具体计算机,其指令集极为简单,指令 格式也很单纯,其格式如下:
编译原理课件第二章
![编译原理课件第二章](https://img.taocdn.com/s3/m/6462f14d77c66137ee06eff9aef8941ea76e4b82.png)
2
LL文法
从左到右扫描符号串,从左到右构建左推导,是递归下降式语法分析的基础。
3
LR文法
从左到右扫描符号串,从右到左构建右推导,是LR分析器(最常用的语法分析器) 的基础。
语义分析
符号表
类型检查
存储程序中所有标识符的信 息,如名字、值、数据类型、 作用域等。
对程序中的表达式进行类型 检查,检查其数据类型是否 匹配,发现类型错误,报告 错误信息。
目标代码生成
静态链接
所有和程序相关的代码和库都被合并到单一 静态程序中,生成的目标代码提供给编译器 后期处理和执行。
动态链接
当程序执行时,操作系统将共享库动态链接 到程序中。生成更小的目标程序,提高内存 效率。
中间代码生成
生成高级语言与目标代码之 间的中间代码。
优化器和中间代码
1 控制流分析
构建控制流图表示各 代码块的控制流程, 用于优化控制流程。
2 数据流分析
分析程序中信息的传 播和使用,用于优化 算法、寄存器分配和 内存使用。
3 中间代码
支持优化器的三元式、 四元式或间接三元式 形式,可以做优化、 可移植性更好。
编译原理第二章
编译器将源代码转换为目标代码的工具。编译过程分为三个部分:前端,优 化器和后端。本章介绍编译器的概述和基本部件。
编译器
前端
将源程序转换为内部表示, 检查其语法和语义。
优化器
将生成的代码优化,减少目 标代码的大小和时间成本。
后端
生成目标代码,包括中间代 码生成,寄存器分配和指令 生成。
词法分析
To ken
基本的词义单元是记号(Token),个记号表示源语言中的一个词、一个操作符、一个标点 符号或其他语法单元。
编译原理教程 第二章
![编译原理教程 第二章](https://img.taocdn.com/s3/m/70aa4ac22dc58bd63186bceb19e8b8f67c1cef9a.png)
图2-2 不同输入字符的状态转换
第2章 词法分析
状态(即结点)数是有限的,其中必有一初始状态以及若 干终止状态,终止状态(终态)的结点用双圈表示以区别于其 它状态。图2-3给出了用于识别标识符、无符号整数、无符 号数的状态转换图,其初始状态均用0状态表示。
第2章 词法分析
(a) 标识符;(b) 无符号整数;(c) 无符号数
第2章 词法分析
对于给定的字母表Σ,正规式和正规集的递归定义如下: (1) ε和Ф都是Σ上的正规式,它们所表示的正规集分别 为{ε}和Ф。 (2) 对任一个a∈Σ,a是Σ上的一个正规式,它所表示的 正规集为{a}。 (3) 如果R和S是Σ上的正规式,它们所表示的正规集分 别为L(R) 和L(S),则: ① R∣S是Σ上的正规式,它所表示的正规集为 L(R)∪L(S); ② R·S是Σ上的正规式,它所表示的正规集为L(R) L(S); ③ (R)*是Σ上的正规式,它所表示的正规集为(L(R))*; ④ R也是Σ上的正规式,它所表示的正规集为L(R)。
第2章 词法分析
为了理解正规式与正规集的含义,我们以程序语言中的 标识符为例予以说明。程序语言中使用的标识符是一个以字 母开头的字母数字串,如果字母用letter表示,数字用digit表 示,则标识符可表示为
letter (letter∣digit)* 其中,letter与 (letter∣digit)*的并置表示两者的连接;括号 中的“∣”表示letter或digit两者选一;“ * ”表示零次或多 次引用由“ * ”标记的表达式;(letter∣digit)*是letter∣digit 的零次或多次并置,即表示一长度为0、1、2、…的字母数 字串;letter (letter∣digit)*表示以字母开头的字母数字串, 也即标识符集。letter (letter∣digit)*就是表示标识符的正规 式,而标识符集就是这个正规式所表示的正规集。
第2章 词法分析
状态(即结点)数是有限的,其中必有一初始状态以及若 干终止状态,终止状态(终态)的结点用双圈表示以区别于其 它状态。图2-3给出了用于识别标识符、无符号整数、无符 号数的状态转换图,其初始状态均用0状态表示。
第2章 词法分析
(a) 标识符;(b) 无符号整数;(c) 无符号数
第2章 词法分析
对于给定的字母表Σ,正规式和正规集的递归定义如下: (1) ε和Ф都是Σ上的正规式,它们所表示的正规集分别 为{ε}和Ф。 (2) 对任一个a∈Σ,a是Σ上的一个正规式,它所表示的 正规集为{a}。 (3) 如果R和S是Σ上的正规式,它们所表示的正规集分 别为L(R) 和L(S),则: ① R∣S是Σ上的正规式,它所表示的正规集为 L(R)∪L(S); ② R·S是Σ上的正规式,它所表示的正规集为L(R) L(S); ③ (R)*是Σ上的正规式,它所表示的正规集为(L(R))*; ④ R也是Σ上的正规式,它所表示的正规集为L(R)。
第2章 词法分析
为了理解正规式与正规集的含义,我们以程序语言中的 标识符为例予以说明。程序语言中使用的标识符是一个以字 母开头的字母数字串,如果字母用letter表示,数字用digit表 示,则标识符可表示为
letter (letter∣digit)* 其中,letter与 (letter∣digit)*的并置表示两者的连接;括号 中的“∣”表示letter或digit两者选一;“ * ”表示零次或多 次引用由“ * ”标记的表达式;(letter∣digit)*是letter∣digit 的零次或多次并置,即表示一长度为0、1、2、…的字母数 字串;letter (letter∣digit)*表示以字母开头的字母数字串, 也即标识符集。letter (letter∣digit)*就是表示标识符的正规 式,而标识符集就是这个正规式所表示的正规集。
编译原理-陈火旺版-第二章
![编译原理-陈火旺版-第二章](https://img.taocdn.com/s3/m/98dfd4735627a5e9856a561252d380eb629423b1.png)
三地址代码具有高度规范化、结构简 单、易于分析和优化等特点,是编译 器设计中常用的中间表示形式。
03
三地址代码的生成方 法
常见的三地址代码生成方法包括直接 生成法、遍历语法树生成法等。
循环结构的优化
循环结构的识别
编译器需要识别出源程序中的循环结构,以便进行优化。
循环结构的优化方法
常见的循环结构优化方法包括循环展开、循环合并、循环嵌套等, 可以提高循环的执行效率。
循环结构优化的度量
循环结构优化的度量标准包括执行时间、空间复杂度、可读性和 可维护性等。
05
代码优化
代码优化概述
01
02
03
代码优化是编译器的一 个重要组成部分,旨在 改进生成代码的性能和
质量。
代码优化的目的是在保 持程序语义不变的前提 下,通过修改程序的结 构和算法,以更高效的 方式实现相同的功能。
编译程序的组成
编译程序通常由词法分析、语法分析、语义分析、中间代码生成、代码 优化和目标代码生成等部分组成。
编译程序的基本工作过程
词法分析
将源程序分解成一个个的单词或符号,并为 其分配相应的属性。
语法分析
根据语法规则将单词或符号序列组合成语法结 构,并判断其是否符合语法规则。
语义分析
对语法结构进行语义检查,包括类型检查、类型 转换等。
中间代码生成
将源程序的语法结构转换成中间代码,通常为三地 址代码。
代码优化
对中间代码进行优化,以提高目标代码的执行效 率。
目标代码生成
将中间代码转换成目标机器语言代码,并生成可执行文 件。
02
词法分析
词法分析概述
01
词法分析是编译过程的第一阶段,负责将源代码分解成一个个 的单词或符号。
编译原理第二章
![编译原理第二章](https://img.taocdn.com/s3/m/c71ca68f680203d8cf2f2404.png)
二义文法: G(E): E i|E+E|E*E|(E)
无二义文法:
G(E):E T | E+T T F | T*F F (E) | i
表达式 项|表达式+项 项 因子 | 项*因子 因子 (表达式) | i
2.3.2 语法分析树与二义性
消除二义性:
E
E
E*E
E +E
i
E
+
E
E
*
E i
G(E): E i|E+E|E*E|(E) 是二义文法。
语言的二义性:一个语言是二义性的,如果对它 不存在无二义性的文法。
可能存在G和G’,一个为二义的,一个为无二义的。 但L(G)=L(G’)
二义性问题是不可判定问题,即不存在一个算法, 它能在有限步骤内,确切地判定一个文法是否是 二义的。
可以找到一组二义文法的充分条件。
i
i
i
i
用一种层次观点看待表达式
按照优先集和结合性
2021/3/30
29
2.3.2 语法分析树与二义性
E
用一种层次观点看待表达式
i*i+i
i * (i + i)
i * (i * i + i)
T
i * i * (i + i) + i * i + i
F
取消二义性的文法
i
E T | E + T
T F | T * F
程序设计语言不是上下文无关语言,甚至 不是上下文有关语言。
L7={c| (a|b)*}不能由上下文无关文 法产生,甚至连上下文有关文法也不能产 生,只能由0型文法产生。
现今程序设计语言的语言结构,用上下文 无关文法描述就足够了。
编译原理第二章_文法与语言
![编译原理第二章_文法与语言](https://img.taocdn.com/s3/m/d284be3ddc36a32d7375a417866fb84ae45cc306.png)
表示A上所有有穷长串的集合 例如:A={ab,c},AA={…… }, AAA={…… } A+ = A* A = AA*
(8)符号串集合的自反闭包
设符号串集合为A,则A的自反闭包记为A* ,定义为: A* = A0 ∪ A1 ∪ A2∪… ∪ An
即A* = A0 ∪ A+ = {ε} ∪ A+ 例如: A= {a,b},则 A*={ε, a, b, aa, ab, ba, bb, aaa, …… }
AB={xy|x∈A,y∈B} 如:若A={ab,c}, B={d,efg},则AB={abd,abefg,cd,cefg} 特别地,有:{ε}A=A{ε}=A
• 空集φ 表示不含任何元素的空集{ }。 有: φA=A φ= φ
<注>请区别: ε,{},{ε}三种表示方法的含义
12
(5) 符号串的方幂
a1 an 表示:从a1出发经过一步或若干步,可推导出an 。
定义2.5 长度为n(n≥0)的推导 a1 an 表示:从a1出发经过0步( a1 =an )或若干步,可推导
出an 。
22
2.2.3 句型、句子、语言
1.句型:设G[S]是一个文法,S是它的开始符号,若S α , 则称α是文法G[S]的句型。
5
(1) <句子>::= <主语> <谓语>
推导过程(3/5)
(2) <主语>::= <代词> | <名词> (3) <代词>::= 我 | 你 | 他 (4) <名词>::=王明| 大学生|工人|英语
(5) <谓语>::=<动词> <直接宾语>
(8)符号串集合的自反闭包
设符号串集合为A,则A的自反闭包记为A* ,定义为: A* = A0 ∪ A1 ∪ A2∪… ∪ An
即A* = A0 ∪ A+ = {ε} ∪ A+ 例如: A= {a,b},则 A*={ε, a, b, aa, ab, ba, bb, aaa, …… }
AB={xy|x∈A,y∈B} 如:若A={ab,c}, B={d,efg},则AB={abd,abefg,cd,cefg} 特别地,有:{ε}A=A{ε}=A
• 空集φ 表示不含任何元素的空集{ }。 有: φA=A φ= φ
<注>请区别: ε,{},{ε}三种表示方法的含义
12
(5) 符号串的方幂
a1 an 表示:从a1出发经过一步或若干步,可推导出an 。
定义2.5 长度为n(n≥0)的推导 a1 an 表示:从a1出发经过0步( a1 =an )或若干步,可推导
出an 。
22
2.2.3 句型、句子、语言
1.句型:设G[S]是一个文法,S是它的开始符号,若S α , 则称α是文法G[S]的句型。
5
(1) <句子>::= <主语> <谓语>
推导过程(3/5)
(2) <主语>::= <代词> | <名词> (3) <代词>::= 我 | 你 | 他 (4) <名词>::=王明| 大学生|工人|英语
(5) <谓语>::=<动词> <直接宾语>
编译原理课件第2章
![编译原理课件第2章](https://img.taocdn.com/s3/m/1846fd31524de518974b7d75.png)
第2章 词 法 分 析
在计算机内部,可以有不同的方式来表示记号的类别和属性。 一般情况下,记号的类别可以用整型编码或枚举类型表示,如表 2.1中每个记号类别可以用括号中的整型编码表示,如01表示const, 82表示id等。根据记号类别的不同,记号的属性的值可以有不同 的表示方法。relation的属性值是一个有限可枚举集合,可以用每 个属性值在集合中的位置来表示它,如1表示<,2表示<=,依此 类推。id的属性值是一个无限可枚举集合,因此,只能用每个标 识符的原始输入形式(字符串)来表示,如pi、draw_line等。字面 量的属性根据情况,其表示方式也不同,如数字字面量可由转义 后的实际值表示,如表示为3.1416而不是“3.1416”,而字符串字 面量就无需转义。
第2章 词 法 分 析
例2.1 对于语句:position := initial + rate * 60,可以识别出 下述序列:
标识符 特殊符号 标识符 特殊符号 标识符 特殊符号 数 字字面量
其中position、initial、rate均被识别为标识符,因为它们均符 合同一条规则,即以字母打头的字母数字串。记号至少含有两 个信息:一个是记号的类别,如“标识符”;另一个是记号的 值,如“position”。显然,如果把记号看作是一个类型的话,则 单词就是一个类型中的实例。由于我们总是说识别出一个标识 符,而不说识别出一个position或rate,因而将词法分析器识别出 的序列称为记号流。
第2章 词 法 分 析 例2.2 表达式mycount > 25由表2.2的三个记号组成。其中标 识符的属性值也可以由mycount在符号表中的入口(下标)来表示。
表2.2 记号的表示
第2章 词 法 分 析
《编译原理》.第二章形式语言与自动机理论基础(PDF)
![《编译原理》.第二章形式语言与自动机理论基础(PDF)](https://img.taocdn.com/s3/m/add1a319854769eae009581b6bd97f192279bf49.png)
(2) (r)(s) (3) ( r )* (4) ( r )
正规表达式表达的语言 {}, {} {a} L( r ) , L(s) L( r ) L(s) L( r ) L(s) ( L( r ))* L( r )
9
2、有关正规式及正规集的说明
注意:
定义中的括号主要用于规定运算顺序。
一般规定优先级从高到低依次为 *, • , |, 可省略某些括号
A→x A→y 21
例子: 求正规式(a|b)(a|b|0|1)*对应的正规文法 G[S]:
S→aA|bA A→aA|bA|0A|1A|ε
22
练习: 求正规式a(a|d)*对应的正规文法
G[S]:
S→aA A→aA|dA|ε
23
正规式与有限自动机
ƒ定理2.4
⑪ 字母表∑上的确定的有限自动机M所接受的语言 L(M)是∑上的一个正规集;
正规文法转换成正规式
对于G = (VT,VN,S,P),存在一个Σ=VT上的正规 式r:L(G)=L(r)
步骤:
利用转换规则将每条产生式改写成正规式 用代入法解正规式方程组,最后剩下一个开始符号定义的正
规式,其中不含非终结符
文法产生式 正规式
规则1 规则2
A→xB B→y
A→xA|y
A=xy A=x*y
G[S]:
S→aA|a A→aA|dA|a|d
对应的正规式:
a(a|d)*
20
正规式转换成正规文法
步骤:
构造产生式S →r,并将S定义为G的开始符号
不断利用如下规则做变换,直到每个产生是最多含 有一个终结符为止
规则1
规则2 规则3
正规式 A=xy
A=x*y A=x|y
正规表达式表达的语言 {}, {} {a} L( r ) , L(s) L( r ) L(s) L( r ) L(s) ( L( r ))* L( r )
9
2、有关正规式及正规集的说明
注意:
定义中的括号主要用于规定运算顺序。
一般规定优先级从高到低依次为 *, • , |, 可省略某些括号
A→x A→y 21
例子: 求正规式(a|b)(a|b|0|1)*对应的正规文法 G[S]:
S→aA|bA A→aA|bA|0A|1A|ε
22
练习: 求正规式a(a|d)*对应的正规文法
G[S]:
S→aA A→aA|dA|ε
23
正规式与有限自动机
ƒ定理2.4
⑪ 字母表∑上的确定的有限自动机M所接受的语言 L(M)是∑上的一个正规集;
正规文法转换成正规式
对于G = (VT,VN,S,P),存在一个Σ=VT上的正规 式r:L(G)=L(r)
步骤:
利用转换规则将每条产生式改写成正规式 用代入法解正规式方程组,最后剩下一个开始符号定义的正
规式,其中不含非终结符
文法产生式 正规式
规则1 规则2
A→xB B→y
A→xA|y
A=xy A=x*y
G[S]:
S→aA|a A→aA|dA|a|d
对应的正规式:
a(a|d)*
20
正规式转换成正规文法
步骤:
构造产生式S →r,并将S定义为G的开始符号
不断利用如下规则做变换,直到每个产生是最多含 有一个终结符为止
规则1
规则2 规则3
正规式 A=xy
A=x*y A=x|y
编译原理第二章
![编译原理第二章](https://img.taocdn.com/s3/m/ce465bc00c22590102029d4f.png)
• 占8个字节,student.studclass占2个字节,student.math 占 个字节, 占 个字节, 个字节 个字节 个字节, 占4个字节,可计算三者对应的偏移量为 、8、10,若student记录结构在 个字节 可计算三者对应的偏移量为0、 、 , 记录结构在 运行时被分配一个基址a,则其各分量的地址为: 运行时被分配一个基址 ,则其各分量的地址为: :a student.studclass:a+8 student.math:a+10
3.字符串、表格和队列
• 不同的语言根据不同的需要会拓展出一些实用数据类型。 不同的语言根据不同的需要会拓展出一些实用数据类型。 • 有越来越多的语言把字符串作为一种基本的数据类型,串的长度不 有越来越多的语言把字符串作为一种基本的数据类型, 加限制。这种数据类型给各种处理文字语言的程序带来很多便利。 加限制。这种数据类型给各种处理文字语言的程序带来很多便利。
2.表达式
• 表达式由运算对象和算符组成,对于多数程序语言来说,表达式的形式规 则如下: • (1)变量(包括下标变量)是表达式。 • (2)若E1、E2为表达式,θ是一个二元算符,则E1θE2是表达式。表达式 一般采用中缀形式。 • (3)若E是表达式,θ为一元算符,则θE或Eθ是表达式。 3 θ θ θ • (4)若E是表达式,则(E)是表达式。
结构分量是通过名字而不是像数组元素那样通过下标访问的。结构分 量的名字是所谓复合名字,例如“结构名.分量名”。结构分量的使用 与基本数据结构定义的变量相同,如下述3个赋值语句: • ="LIMING" • student.studclass=3 • student.math=95.4 每个分量的存储地址由记录结构的首地址与相应分量的偏移地址相加 而成。记录结构的每个分量(域)所占用的存储字节数称为该域的长 度。通过累加分量的长度可计算出各分量的偏移量。
3.字符串、表格和队列
• 不同的语言根据不同的需要会拓展出一些实用数据类型。 不同的语言根据不同的需要会拓展出一些实用数据类型。 • 有越来越多的语言把字符串作为一种基本的数据类型,串的长度不 有越来越多的语言把字符串作为一种基本的数据类型, 加限制。这种数据类型给各种处理文字语言的程序带来很多便利。 加限制。这种数据类型给各种处理文字语言的程序带来很多便利。
2.表达式
• 表达式由运算对象和算符组成,对于多数程序语言来说,表达式的形式规 则如下: • (1)变量(包括下标变量)是表达式。 • (2)若E1、E2为表达式,θ是一个二元算符,则E1θE2是表达式。表达式 一般采用中缀形式。 • (3)若E是表达式,θ为一元算符,则θE或Eθ是表达式。 3 θ θ θ • (4)若E是表达式,则(E)是表达式。
结构分量是通过名字而不是像数组元素那样通过下标访问的。结构分 量的名字是所谓复合名字,例如“结构名.分量名”。结构分量的使用 与基本数据结构定义的变量相同,如下述3个赋值语句: • ="LIMING" • student.studclass=3 • student.math=95.4 每个分量的存储地址由记录结构的首地址与相应分量的偏移地址相加 而成。记录结构的每个分量(域)所占用的存储字节数称为该域的长 度。通过累加分量的长度可计算出各分量的偏移量。
编译原理课件第二章
![编译原理课件第二章](https://img.taocdn.com/s3/m/26bc60cbaa00b52acfc7ca85.png)
• 练习: 设文法G(N): N-〉D|ND D->0|1|2|3|4|5|6|7|8|9 给出句子00567,239的最左和最右推导。 最左推导: N=>ND=>NDD=>NDDD=>NDDDD=>DDDDD=>0DDDD=>00 DDD=>005DD=>0056D=>00567 最右推导 N=>ND=>N7=>ND7=>N67=>ND67=>N567=>ND567=>N05 67=>D0567=>00567 (另外一个大家做)
设G为一文法,A->α是G的一个产生式,如果α具有 uAδ的形式,其中u, δ同时为空则产生式A-> α是直接递 归;若存在推导A=> α=>* uAδ,则A->α为递归。 上述A称为直接递归和递归非终结符。 u为空而δ不为空,上式成为直接左递归。 u不为空而δ为空,上式成为直接右递归。 如果一个文法中至少含有一个递归的非终结符号,则称递 归文法。
11
文法举例
例 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
12
文法的通常表示方法
元符号: → ∷= | < > 习惯表示 大写字母:非终结符 小写字母:终结符 S –> AB A –> Ax | y B –> z
23
2.3.1 规范推导和规范规约(2)
• 规范规约的实例:符号串i+i*i规约过程
步 序i 当前符号串wi 0 1 2 i+i*i F+i*i T+i*i
所用产生式 F->i T->F E->T
设G为一文法,A->α是G的一个产生式,如果α具有 uAδ的形式,其中u, δ同时为空则产生式A-> α是直接递 归;若存在推导A=> α=>* uAδ,则A->α为递归。 上述A称为直接递归和递归非终结符。 u为空而δ不为空,上式成为直接左递归。 u不为空而δ为空,上式成为直接右递归。 如果一个文法中至少含有一个递归的非终结符号,则称递 归文法。
11
文法举例
例 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
12
文法的通常表示方法
元符号: → ∷= | < > 习惯表示 大写字母:非终结符 小写字母:终结符 S –> AB A –> Ax | y B –> z
23
2.3.1 规范推导和规范规约(2)
• 规范规约的实例:符号串i+i*i规约过程
步 序i 当前符号串wi 0 1 2 i+i*i F+i*i T+i*i
所用产生式 F->i T->F E->T
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014年6月12日12时3分
2.2 高级语言的一般特性
高级语言的分类: (1)强制式的高级语言(也称过程式语言) 其特点是命令驱动,面向语句。一个强制式语言程序由一 系列的语名组成,每个语句的执行引起若干存储单元中的 值的改变。许多广为使用的语言,如FORTRAN、C、 PASCAL,ADA等等,属于这类语言。
2014年6月12日12时3分
语法分析树与二义性
用一张图表示一个句型的推导,这种表示称为语法分析树, 或简称语法树。语法树有助于理解一个句子语法结构的层 次。语法树的根结由开始符号所标记。随着推导的展开, 当某个非终结符被它的某个候选式所替换时,这个非终结 符的相应结就产生出下一代新结,候选式中自左至右的每 个符号对应一个新结,并用这些符号标记其相应的新结。 每个新结和其你结间都有一条连线。在一棵语法树生长过 程中的任何时刻,所有那些没有后代的端末结自左至右排 列起来就是一个句型。
人们已经证明,二义性问题是不可判定的。即,不存在一 个算法,它能在有限步骤内,确切地判定一个文法是否为 二义的。我们所能做的事是为无二义性寻找一组充分条件。
2014年6月12日12时3分
例如对于算术表达式文法G[E]关于(i*i+i)的语法树如下图 所示。 E
(
E E i * E i
E
+ E i
)
2014年6月12日12时3分
例如,字符串 0.5*X1+C 是一个表达式,其中常数0.5,标 识符X1和C,以及算符*和+称为语言的单词符号,而表达 式0.5*X1+C称为语言的一个语法单位,或语法范畴。 词法规则是指单词符号的形成规则。在现今多数程序语言 中,单词符号一般包括:关键字、标识符、运算符、界符 和常量等等。正规式和有限自动机理论是描述词法结构和 进行词法分析的有效工具。
2014年6月12日12时3分
例2.7写一个文法G, 使其语言为 不以0开头的奇数集。
不以0开头的奇数集数字的结构分为三种:一位数、两位 数和多位数。
A B A 一位数 两位数
B
C
„
C
A
多位数
2014年6月12日12时3分
其中,A代表可以出现在个位上的数字,可以是1,3,5, 7,9; B代表可以出现在开始位上的数字,除了0以外,其他数字 都可以;
2014年6月12日12时3分
E => E*E =>E+E*E =>i+E*E =>i+i*E =>i+i*i
对于算术表达式文法G[E],若规定运算符号的优先级,并 服从左结合性,可以构造无二义性文法G’[E]: E→E+T E→T T→T*F T→F F→(E) F→i
2014年6月12日12时3分
2014年6月12日12时3分
2.3 程序语言的语法描述
•设是一个有穷字母表,它的每个元素称为一个符号。 上的一个字符串是指中的符号所构成的一个有穷序列。 不包含任何符号的序列称为空字,记为。 •用*表示上的所有符号串的全体,空字也包括在内。
•*的子集U和V的(连接)积定义为 UV={ | U & V}。注意: UV≠VU 但 (UV)W=U(VW)
2014年6月12日12时3分
语法规则是指语法单位的形成规则。下文无关文法用来描 述一个程序语言的语法规则。 语言的词法规则和语法 规则定义了程序的形式结构,是判断输入字符串是否构成 一个形式上正确(即合式)程序的依据。 对一个语言来说,不仅要给出它的词法、语法规则,而且 要定义它的单词符号和语法单位的意义。离开语义,语言 只不过是一堆符号的集合。所谓一个语言的语义是这样的 一组规则,使用它可以定义一个程序的意义。这些规则称 为语义规则。阐明语义要比阐明语法难的多,现在还没有 一种形式系统描述语义。
L(G)={α|S α & α ∈VT* } 例如对于文法G[E],字符串(i+i*i)是句子。因为 E (E) (E+E) (E+E*E) (i+E*E) (i+i*E) (i+i*i) 是从开始符E至(i+i*i)的一个推导。而E ,(E),(E+E), (E+E*E),(i+E*E) ,(i+i*E),(i+i*i)是句型。
一个上下文无关文法G包括四个组成部分:一组终结符集, 一组非终结符集,一个开始符,以及一组产生式。 G=(VT, VN, S, P) VT:终结符集,即程序语言中的单词符号。 VN:非终结符集, 用来代表语法范畴。 VN∩VT= φ S:开始符号,一个特殊的非终结符,代表程序。
2014年6月12日12时3分
编译原理
主讲教师:雷向东
2014年6月12日12时3分
第二章 高级语言及其语法描述
2.1程序语言的定义
一个程序语言是一个记号系统,包括语法和语义两个方面 定义。
任何语言程序都可看成是一定字符集(称字母表)上的一 字符串(有限序列)。所谓一个语言的语法是在指这样一 组规则,用它可以形成和产生一个合式的程序。这些规则 的一部分称为词法规则,另一部分称为语法规则。
基于规则的语言程序的执行过程是:检查一定的条件,当 它满足时,则执行适当的运作。最有代表性的基于规则语 言是PROLOG,它也称逻辑程序设计语言。
2014年6月12日12时3分
(4)面向对象的高级语言 面向对象语言的主要特征是支持封装性、继承性和多态性 等。把复杂的数据和用于这些数据的操作封装在一起,构 成对象;对简单对象进行扩充、继承简单对象的特性,从 而设计出复杂的对象。通过对象的构造可以使面向对象程 序获得强制式语言的有效性,通过作用于规定数据的函数 的构造可以获得应用式语言的灵活性和可靠性。
P:一组产生式。一个产生式的形式是 A→α A是非终结符,称为产生式的左部。 α是由终结符和非终结符组成的符号串,称为产生式的右 部。 为了书写方便,有如下约定: 第一条产生式的左部是开始符号。用尖括号括起的是非终 结符,否则为终结符。或者大写字母表示非终结符,小 写字母表示终结符。用 α , β , γ 等代表由终结符和非 终结符组成的符号串。G可写成G[S],S是开始符号。
2014年6月12日12时3分
若干个左部相同的产生式, 例如 A→α1 A→α2 … A→αn
可合并为一个,简写为 A→α1|α2|… |αn
2014年6月12日12时3分
假设要定义一类含+、* 的算术表达式,表达式的递归定 义为 表达式+表达式是表达式 表达式*表达式是表达式 (表达式)是表达式 函数、变量、常量是表达式
2014年6月12日12时3分
文法的二义性和语言的二义性是两个不同的概念。我们可 能有两个不同的文法G和G’,其中一个是二义的,而另一 个是无二义的,但是却有L(G)=L(G’),也就是说,这两个 文法所产生的语言是相同的。对于一个程序语言来说,常 常希望它的文法是无二义的。因为,我们希望对它的每个 语句的分析是唯一的。
•V自身的n次积记为:Vn=VV…V (n次重复),规定 V0={} 。 令 V*=V0 V1 V2 … , 称V*为V的闭包。 记V+=V V*,称V+为V的正则闭包。
2014年6月12日12时3分
上下文无关文法 文法是描述语言的的语法结构的形式规则 (即语法规则)。
所谓上下文无关文法是这样一种文法,它所定义的语法范 畴(语法单位)是完全独立于这种范畴可能出现的环境的。
2014年6月12日12时3分
(2)应用式的高级语言 应用式语言更注重程序所表示的功能,而不是一个语句接 一个语句地执行。程序的开发过程是从前面已有的函数出 发构造出更复杂的函数,对初始数据集进行操作直至最终 的函数可以用于从初始数据计算出最终的结果。这种语言 也称函数式语言。LISP和ML属于这种语言。 (3)基于规则的高级语言
与文法G2[S]: S→0S1|01 等价。
2014年6月12日12时3分
最左推导
所谓最左推导是指:任何一α β都是对α中的最左非终 结符进行替换。
最右推导 所谓最右推导是指:任何一步α β都是对α中的最右非终 结符进行替换。
例如对于算术表达式文法G[E]句子(i*i+i)的最右推导
E (E) (E+E) (E+i) (E*E+i) (E*i+i) (i*i+i)
L(G2)={ambn|m,n≥1} 例2.3 构造一个文法G3,使得 L(G3)={anbn|n≥1} 文法G3[S]: S→aSb | ab
2014年6月12日12时3分
例2.6 写一文法G6,使其语言为 L(G6)={ωcωR|ω ∈ (a|b)* & ωR 代表ω的逆} 文法G6[S]: S→aSa|bSb|c
2014年6月12日12时3分
一步或多步推导“”
+
+
用“”表示:从α1出发,经过一步或多步,可推导出αn。 零步或多步推导“”
* 用“ ”表示:从α1出发,经过零步或多步,可推导出 * αn。 *
2014年6月12日12时3分
文法的句型、句子的定义
+ 假设G 是一个文法,S是它的开始符。如果S α,则称α 是一个句型。仅含终结符的句型是句子。文法G 所产生 句子的全体是一个语言,将它记为L(G)。
2014年6月12日12时3分
用E代表表达式,i代表函数、变量、常量,因此,文法定 义为G[E] E→E+E E→E*E
E→(E)
E→ i
可简写为:
E→E+E|E*E|(E)|i
2014年6月12日12时3分
推导的定义
直接推导“”
αAβ αγβ 仅当A→γ是文法G的产生式,且α、β∈(VT∪VN)* 例如对于文法G[E]的字符串(i+i*i)的推导: E (E) (E+E) (E+E*E) (i+E*E) (i+i*E) (i+i*i)