编译原理 第二章
合集下载
编译原理第二章
安徽理工大学 《编译原理》 信息安全系 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| 表示。 表示。
《编译原理》课件第2章
种别划分
标识符: 一般统归为一种 常 数: 可统归为一种,也可按整型、实型、布尔型等分
为几种 运算符: 采用一符一种 界 符: 采用一符一种
2.1 词法分析器设计方法
(2)单词自身的值 是编译中其它阶段所需要的信息
对于单词符号来说,如果一个种别只含有一个单词 符号,其种别编码就完全代表了它自身的值。如果一个 种别含有多个单词符号,那么对于它的每个单词符号, 除了给出种别编码之外还应给出单词符号自身的值。
2.1 词法分析器设计方法
对于不含回路的分支状态来说,可以让它对应一个 switch( ) 语句或一组if-else语句。
s=getchar( );
switch(s)
{ case 'a':
case 'b':
…
case 'z':
…;
//实现状态j功能的语句
case '0':
case '1':
…
case '9':
s=getchar ( );
getbe ( );
/*滤除空格*/
switch (s)
{
case 'a':
case 'b':
…
case 'z':
while (letter ( )‖digit ( ))
{
concatenation ( );
/*将当前读入的字符送入token数组*/
getchar ( );
大多数程序语言的单词符号都可以用状态转换图予以识 别。作为一个综合例子,我们来构造一个C语言子集的简单 词法分析器。
C语言子集的单词符号表示
编译原理第二章文法和语言
语言的语法结构
总结词
语言的语法结构是语言形成和发展的核心要素,决定 了语言的表达方式和意义。
详细描述
语言的语法结构是指语言的组织规律和规则,包括词 法、句法、语义等方面的规则。词法规定了词汇的构 成和变化规则,如名词、动词、形容词等词类的划分 ;句法规定了句子结构的规则,如主语、谓语、宾语 等句子的成分及其排列顺序;语义则涉及到词汇和句 子的意义和解释。语言的语法结构是语言理解和生成 的基础,也是语言演变和发展的关键因素。
文法和语言的应用前景
1 2
人工智能领域
文法和语言是人工智能领域的重要基础,可用于 自然语言处理、机器翻译、语音识别等技术的研 究和应用。
计算机科学教育
文法和语言是计算机科学专业的重要课程之一, 对于培养计算机科学人才具有重要意义。
3
软件工程领域
文法和语言可用于软件工程领域中的编译器设计 和开发,提高软件开发的效率和可靠性。
05
文法和语言的未来发展
文法和语言的研究方向
形式语言理论
深入研究形式语言的基本理论, 包括语法、语义和语用等方面, 为自然语言处理和人工智能等领 域提供理论基础。
自然语言处理
结合自然语言处理技术,研究自 然语言的语法、语义和语用规律, 提高自然语言处理的准确性和效 率。
计算语言学
将计算语言学与形式语言理论相 结合,研究语言处理算法和模型, 为机器翻译、语音识别等领域提 供技术支持。
文法和语言的发展趋势
深度学习与文法和语言的结合
01
随着深度学习技术的发展,文法和语言的研究将更加注重与深
度学习的结合,以提高语言处理的性能和效率。
跨媒体语言处理
02
随着多媒体数据的普及,文法和语言的研究将逐渐扩展到跨媒
编译原理课件第二章
递归子程序法
递归子程序法:对应每个非终结符语法单元,,编一个独 立的处理过程(或子程序)。语法分析从读入第一个单词 开始,由非终结符<程序>(即开始符)出发,沿语法描述 图箭头所指出的方向进行分析。当遇到非终结符时,则调 用相应的处理过程,从语法描述图看,也就进入了一个语 法单元,再沿当前所进入的语法单元所指箭头方向继续进 行分析。当遇到描述图中是终结符时,则判断当前读入的 单词是否与图中的终结符相匹配,若匹配,再读取下一个 单词继续分析。遇到分支点时,将当前的单词与分支点上 多个终结符逐个相比较,若都不匹配时可能是进入下一个 非终结符语法单位或是出错。
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编译程序语法分析的设计与实现
编译原理第二章课件
例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章 前后文无关文法和语言课件
?一组终结符号不能被替换的符号单词符号?一组非终结符号能够被替换为终结符号或非终结符号语法单位?一个开始符号从这个符号开始替换最大语法单位程序?一组产生式替换规则把左边的字符串替换为右边的字符串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的运算 来表示。
编译原理chapter2
•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
任何数值常数
《编译原理教程》第二章词法分析
优化正则表达式
通过优化正则表达式来减少DFA的状态数量和转 移边的数量,从而提高分析效率。例如,可以使 用贪婪匹配、非贪婪匹配、预读等技术来优化正 则表达式。
使用字符类和快速映射
将字符映射到相应的字符类,可以减少比较次数 和查表时间,提高分析效率。
并行处理和分布式处理
使用并行处理或分布式处理的方法来提高词法分 析器的处理能力和效率。例如,可以使用多线程 或多进程来处理多个输入字符串,或者使用分布 式系统来处理大规模的输入数据。
06
典型案例分析与实践
案例一:简单算术表达式词法分析
词法单元定义
定义算术表达式中的各类词法单元,如数字、 运算符等。
正则表达式描述
使用正则表达式描述各类词法单元的模式。
词法分析器实现
编写词法分析器,将输入的算术表达式拆分 为一个个的词法单元。
案例二:C语言子集词法分析
词法规则定义
定义C语言子集中的词法规则,包括关键字、标识符、 常量、运算符等。
词法分析的准确性对编译器的正确性和效率至关重要,因为任何错误或遗漏的词素都可 能导致编译失败或生成错误的代码。
本章学习目标和要求
掌握词法分析的基本概念和原理 ,了解词法分析器的作用和工作 流程。
了解词法分析中的常见问题和解 决方法,如处理空白、注释和特 殊字符等。
学习词法规则的定义和描述方法 ,能够编写简单的词法规则。
DFA与NFA之间转换关系
NFA转换为DFA
通过子集构造法可以将NFA转换为等价的DFA。该方法将NFA的状态集划分为不相交的 子集,每个子集代表DFA的一个状态。转换后的DFA具有与原始NFA相同的语言识别能
力。
DFA转换为NFA
任何DFA都可以直接看作是一个特殊的NFA,其中每个转移都是确定的,并且没有ε-转 移。因此,将DFA转换为NFA是简单的,只需保留原始DFA的结构即可。
通过优化正则表达式来减少DFA的状态数量和转 移边的数量,从而提高分析效率。例如,可以使 用贪婪匹配、非贪婪匹配、预读等技术来优化正 则表达式。
使用字符类和快速映射
将字符映射到相应的字符类,可以减少比较次数 和查表时间,提高分析效率。
并行处理和分布式处理
使用并行处理或分布式处理的方法来提高词法分 析器的处理能力和效率。例如,可以使用多线程 或多进程来处理多个输入字符串,或者使用分布 式系统来处理大规模的输入数据。
06
典型案例分析与实践
案例一:简单算术表达式词法分析
词法单元定义
定义算术表达式中的各类词法单元,如数字、 运算符等。
正则表达式描述
使用正则表达式描述各类词法单元的模式。
词法分析器实现
编写词法分析器,将输入的算术表达式拆分 为一个个的词法单元。
案例二:C语言子集词法分析
词法规则定义
定义C语言子集中的词法规则,包括关键字、标识符、 常量、运算符等。
词法分析的准确性对编译器的正确性和效率至关重要,因为任何错误或遗漏的词素都可 能导致编译失败或生成错误的代码。
本章学习目标和要求
掌握词法分析的基本概念和原理 ,了解词法分析器的作用和工作 流程。
了解词法分析中的常见问题和解 决方法,如处理空白、注释和特 殊字符等。
学习词法规则的定义和描述方法 ,能够编写简单的词法规则。
DFA与NFA之间转换关系
NFA转换为DFA
通过子集构造法可以将NFA转换为等价的DFA。该方法将NFA的状态集划分为不相交的 子集,每个子集代表DFA的一个状态。转换后的DFA具有与原始NFA相同的语言识别能
力。
DFA转换为NFA
任何DFA都可以直接看作是一个特殊的NFA,其中每个转移都是确定的,并且没有ε-转 移。因此,将DFA转换为NFA是简单的,只需保留原始DFA的结构即可。
编译原理chapter2 语言的基本知识
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 动词 直接宾语
编译原理课件第二章
2
LL文法
从左到右扫描符号串,从左到右构建左推导,是递归下降式语法分析的基础。
3
LR文法
从左到右扫描符号串,从右到左构建右推导,是LR分析器(最常用的语法分析器) 的基础。
语义分析
符号表
类型检查
存储程序中所有标识符的信 息,如名字、值、数据类型、 作用域等。
对程序中的表达式进行类型 检查,检查其数据类型是否 匹配,发现类型错误,报告 错误信息。
目标代码生成
静态链接
所有和程序相关的代码和库都被合并到单一 静态程序中,生成的目标代码提供给编译器 后期处理和执行。
动态链接
当程序执行时,操作系统将共享库动态链接 到程序中。生成更小的目标程序,提高内存 效率。
中间代码生成
生成高级语言与目标代码之 间的中间代码。
优化器和中间代码
1 控制流分析
构建控制流图表示各 代码块的控制流程, 用于优化控制流程。
2 数据流分析
分析程序中信息的传 播和使用,用于优化 算法、寄存器分配和 内存使用。
3 中间代码
支持优化器的三元式、 四元式或间接三元式 形式,可以做优化、 可移植性更好。
编译原理第二章
编译器将源代码转换为目标代码的工具。编译过程分为三个部分:前端,优 化器和后端。本章介绍编译器的概述和基本部件。
编译器
前端
将源程序转换为内部表示, 检查其语法和语义。
优化器
将生成的代码优化,减少目 标代码的大小和时间成本。
后端
生成目标代码,包括中间代 码生成,寄存器分配和指令 生成。
词法分析
To ken
基本的词义单元是记号(Token),个记号表示源语言中的一个词、一个操作符、一个标点 符号或其他语法单元。
编译原理-陈火旺版-第二章
三地址代码具有高度规范化、结构简 单、易于分析和优化等特点,是编译 器设计中常用的中间表示形式。
03
三地址代码的生成方 法
常见的三地址代码生成方法包括直接 生成法、遍历语法树生成法等。
循环结构的优化
循环结构的识别
编译器需要识别出源程序中的循环结构,以便进行优化。
循环结构的优化方法
常见的循环结构优化方法包括循环展开、循环合并、循环嵌套等, 可以提高循环的执行效率。
循环结构优化的度量
循环结构优化的度量标准包括执行时间、空间复杂度、可读性和 可维护性等。
05
代码优化
代码优化概述
01
02
03
代码优化是编译器的一 个重要组成部分,旨在 改进生成代码的性能和
质量。
代码优化的目的是在保 持程序语义不变的前提 下,通过修改程序的结 构和算法,以更高效的 方式实现相同的功能。
编译程序的组成
编译程序通常由词法分析、语法分析、语义分析、中间代码生成、代码 优化和目标代码生成等部分组成。
编译程序的基本工作过程
词法分析
将源程序分解成一个个的单词或符号,并为 其分配相应的属性。
语法分析
根据语法规则将单词或符号序列组合成语法结 构,并判断其是否符合语法规则。
语义分析
对语法结构进行语义检查,包括类型检查、类型 转换等。
中间代码生成
将源程序的语法结构转换成中间代码,通常为三地 址代码。
代码优化
对中间代码进行优化,以提高目标代码的执行效 率。
目标代码生成
将中间代码转换成目标机器语言代码,并生成可执行文 件。
02
词法分析
词法分析概述
01
词法分析是编译过程的第一阶段,负责将源代码分解成一个个 的单词或符号。
编译原理词法2(NFA、DFA的确定化和化简)
2.4 正规表达式到有限自动机的构造
例2.8 求正规表达式(a|b) *(aa|bb) (a|b) *对应的DFA M [解答] (3) 划分的最终结果为 {0} 、{1}、{2}、{3,4,5,6};
对其进行重命名:0、1、2、3 (4) 得到新的状态转换矩阵和化简后的DFA,如下所示:
S ab 0 12 1 32 2 13 3 33
f(s1, b) ={s2 } f(s2, a) = Ф
f(s2, b) ={ s1 }
状态转换图: b
s0 bb
a
s1 b
s2
状态转换矩阵:
∑
f
a
b
s0 {s2} {s0,s2} S s1 Ф {s2}
s2 Ф {s1}
2.3 正规表达式与优先自动机简介
2.3.2:有限自动机(识别的语言) – 对于一个自动机FA 而言,如果存在一条从初始状态到终止状 态的通路,通路上有向边所识别的字符依次连接所得到的字 符串为α, 则称α可以为FA 所接受或者α为FA 所识别 – FA 所能识别的字符串集为FA 所识别的语言,记为L(M) – FA的等价:对于任意两个FA M和 FA M’, 如果L(M)=L(M’), 则称M和M’等价 – 对于任意一个NFA M,一定存在一个DFA M’与其等价
2.3 正规表达式与优先自动机简介
2.3.2:有限自动机 – 1、确定有限自动机(DFA): • DFA是一个五元组,Md= (S, ∑, f, s0 , Z) ,其中: (1) S是一个有限状态集合,它的每个元素称为一个状态 (2) ∑是一个有穷字母表,它的每个元素称为一个输入字符 (3)f是一个从S×∑至S的单值映射,也叫状态转移函数 (4)s0∈S 是唯一的初态 (5) Z S 是一个终态集
编译原理第二章
二义文法: 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型文法产生。
现今程序设计语言的语言结构,用上下文 无关文法描述就足够了。
编译原理第二章_文法与语言
表示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章 词 法 分 析
在计算机内部,可以有不同的方式来表示记号的类别和属性。 一般情况下,记号的类别可以用整型编码或枚举类型表示,如表 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章 词 法 分 析
编译原理第二章
• 占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 每个分量的存储地址由记录结构的首地址与相应分量的偏移地址相加 而成。记录结构的每个分量(域)所占用的存储字节数称为该域的长 度。通过累加分量的长度可计算出各分量的偏移量。
编译原理课件第二章
• 练习: 设文法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
编译原理第二章词法分析
编译原理第二章词法 分析
目录
• 词法分析概述 • 词法分析器的设计 • 词法分析算法 • 词法分析器生成工具 • 词法分析器应用实例
01
词法分析概述
词法分析的定义
01
词法分析是编译过程中的第一个阶段,也称为词法扫描或词 法扫描器。
02
它负责将源代码从左到右逐个字符地读取,并识别出其中的 各个单词或标记。
03
词法分析器可以帮助数据挖掘系统识别出频繁出现的模式、 关键词和概念,从而为后续的数据分类、聚类和关联规则挖 掘等任务提供支持。
THANKS
感谢观看
词法分析器的实现方式
01 手工编写
通过手工编写代码实现词法分析器,适用于对编 译器原理理解较深且经验丰富的开发者。
02 工具辅助
使用工具如Lex、Flex等自动生成词法分析器的代 码,适用于快速开发简单的词法分析器。
03 编译器生成器
使用编译器生成器如Bison、ANTLR等,可以生 成高效、可维护的词法分析器。
词法分析算法的实现
01
词法分析算法的实现通常包括 将输入的源代码分解成一系列 的单词或标记,并输出相应的 单词或标记序列。
02
实现词法分析算法可以采用扫 描器或词法分析器生成器,如 Lex或Flex等工具。
03
扫描器或词法分析器生成器可 以根据正则表达式定义单词或 标记,并生成相应的代码来识 别和匹配这些单词或标记。
02 词法分析器通常使用词典和规则来识别单词的词 性(名词、动词、形容词等)和短语的结构。
02 通过词法分析,自然语言处理系统可以更好地理 解文本的含义,并为后续的句法分析和语义分析 提供基础。
词法分析器在数据挖掘中的应用
01
目录
• 词法分析概述 • 词法分析器的设计 • 词法分析算法 • 词法分析器生成工具 • 词法分析器应用实例
01
词法分析概述
词法分析的定义
01
词法分析是编译过程中的第一个阶段,也称为词法扫描或词 法扫描器。
02
它负责将源代码从左到右逐个字符地读取,并识别出其中的 各个单词或标记。
03
词法分析器可以帮助数据挖掘系统识别出频繁出现的模式、 关键词和概念,从而为后续的数据分类、聚类和关联规则挖 掘等任务提供支持。
THANKS
感谢观看
词法分析器的实现方式
01 手工编写
通过手工编写代码实现词法分析器,适用于对编 译器原理理解较深且经验丰富的开发者。
02 工具辅助
使用工具如Lex、Flex等自动生成词法分析器的代 码,适用于快速开发简单的词法分析器。
03 编译器生成器
使用编译器生成器如Bison、ANTLR等,可以生 成高效、可维护的词法分析器。
词法分析算法的实现
01
词法分析算法的实现通常包括 将输入的源代码分解成一系列 的单词或标记,并输出相应的 单词或标记序列。
02
实现词法分析算法可以采用扫 描器或词法分析器生成器,如 Lex或Flex等工具。
03
扫描器或词法分析器生成器可 以根据正则表达式定义单词或 标记,并生成相应的代码来识 别和匹配这些单词或标记。
02 词法分析器通常使用词典和规则来识别单词的词 性(名词、动词、形容词等)和短语的结构。
02 通过词法分析,自然语言处理系统可以更好地理 解文本的含义,并为后续的句法分析和语义分析 提供基础。
词法分析器在数据挖掘中的应用
01
编译原理第二章
对于高级程序设计语言及编译程序来说,语言定义 是很重要的。本章主要介绍语法结构的形式描述问 题,编译原理的主要内容也可以归结为应用形式语 言理论,并将它贯穿于词法分析和语法分析两个阶 段。 本章重点讨论正规文法、上下文无关文法及其对应 的有限自动机和下推自动机,以及在构造编译程序 时如何应用。
语言的句子是定义在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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1.1 语法
语言的语法是指这样一组规则,用它 可产生一个程序。 规则: 词法规则 语法规则
词法规则:单词符号的形成规则。
单词符号是语言中具有独立意义的最 基本结构。一般包括:常数、标识符、 基本字、算符、界符等。 描述工具:有限自动机
语法规则:语法单位的形成规则。
语法单位通常包括:表达式、语句、 分程序、过程、函数、程序等; 描述工具:上下文无关文法
33
2.2 高级语言的一般特性
乘幂 **或↑ 与数学习惯类似 一元负 不同的语言,这两种性质各有差异 乘、除 *,/,÷ FORTRAN 加、减 +,结合性 关系符 <,=,>,<=,<>,>= 非 ﹁, not或 .NOT. 与∧,&,and 或 .AND. 优先集 或∨,|, or 或 .OR. 隐含 imp或 等值 ≡,~或epui 2014-6-21 中国科大
标识符与名字
标识符:以字母开头的,由字母数字 组成的字符串。 标识符与名字两者有本质区别:
标识符是语法概念 名字有确切的意义和属性
标识符与名字
名字:
值:单元中的内容 属性:类型和作用域
名字的性质的说明方式:
由说明语句来明确规定的 隐含说明:FORTRAN 以I,J,K,…N为首的名字 代表整型,否则为实型。 动态确定:走到哪里,是什么,算什么
返回语句 return (E)
说明语句:定义各种不同数据类型的 变量或运算,定义名字的性质。
简单句和复合句
简单句:不包含其他语句成分的基本 句 复合句:句中有句的语句
复习:高级语言的一般特性
高级语言的分类 程序结构 数据类型与操作
初等数据类型 数据结构 抽象数据类型
语句与控制结构
作业
P35页,第3、4题
2.2 高级语言的一般特性
1、数组
数组:同一类型数据所组成的某种n 维矩形结构 下标:沿着某一维的距离 数组元素:由数组名连同各维的下标值命名 确定数组、可变数组
int size = 3; //或用户输入的数 int *array = new int[size]; int a = array[2]; Delete []array;
中国科大
35
2.2 高级语言的一般特性
2.2.4 语句和控制结构 二、语句
从功能上说,语句大体可分执行性语 句和说明性语句。 从形式上说,语句还可分为简单句、 复合句和分程序等。
2014-6-21
中国科大
36
二.语句
赋值语句:
A := B
名字左值:该名字代表的那个单元(地址) 称为该名字的左值。(所代表的存贮单元 的地址) 右值:一个名字的值称为该名字的右值。 (所代表的存贮单元的内容)
4 5
5 3
6 6
按行存放
按列存放
2014-6-21
中国科大
26
内情向量
把数组的有关信息记录在一个“内情向 量”中,每个数组的内情向量必须包括: 维数,各维的上、下限,首地址,以及 数组(元素)的类型。
l1 l2 … ln n type u1 u2 … un C a d1 d2 … dn
对于确定数组来说,内情向量可登记 在符号表中; 对于可变数组,内情向量的信息在编译 时无法全部知道,只有到运行阶段才 能全部确定下来,存贮分配也要等到 运行时方能进行
注意: (1) 字母表中至少包含一个元素。 (2) 字母表中的元素, 可以是字母、数字 或其他符号。 例如,∑‘ ={0, 1} 是一个字母表,由0、1两个元素组成。
2. 符号(字符) 字母表中的元素称为符号或称为 字符。 例如,前述例子中 a、b、c 是字母表Σ中的符号; 0、1 是字母表Σ'中的符号。
中国科大
int array[3]; int a = array[2]; 确定数组
2014-6-21
可变数组
25
2.2 高级语言的一般特性
1、数组
数组存储方式:按行存放、按列存放 数组元素地址计算:数据结构
A[2][3] = {{1, 2, 3}, {4, 5, 6}}
1
4
2
5
3
6
1 1
2 4
3 2
2.1.2语义
语义:一组规则,用它可以定义一个 程序的意义。 程序语言的基本功能:描述数据和对 数据的运算。 所谓程序,本质上说是描述一定数据 的处理过程。
程序的层次结构
程序 | 子程序或分程序、过程、函数 | 语句 | 表达式 | 数据引用 算符 函数调用
程序语言每个组成成分的逻辑和实现意义
对于语言用户来说:语言定义就是一 本用户手册。 对于编译程序设计者来说:语言定义 就是具体实现的理论依据。
对程序设计语言的描述是从语 法、语义和语用三个因素来考 虑。
语法是对语言结构的定义。 语义是描述了语言的含义 语用则是从使用的角度去描述语言。
例如 赋值语句s=2*3.1416*r*(r+h)的 非形式化的描述为: 语法:赋值语句由一个变量,后随 一个赋值号“=”,再在其后面跟 一个表达式构成。 语义:首先计算语句右部表达式的 值,然后把所得结果送给左部变量 中。 语用:赋值语句可用来计算和保存 表达式的值。
2.2.2 程序结构 FORTRAN
一个程序由一个主程序段和若干辅程序段组成。 辅程序段可以是子程序、函数段或数据块。 每个程序段有一系列的说明语句和执行语句组成。 各段可以独立编译。 模块结构,没有嵌套和递归 各程序段中的名字相互独立,同一个标识符在不 同的程序段中代表不同的名字。
主程序
PROGRAM … … end
辅程序1 SUBROUTINE … … end 辅程序2 FUNCTION … … end
PASCAL
PASCAL程序本身可以看成是一个操作系 统所调用的过程,过程可以嵌套和递归。 一个PASCAL过程: 过程头; 说明段(由一系列的说明语句组成); begin 执行体(由一系列的执行语句组成); end
3. 符号串(字) 符号的有穷序列称为符号串。 例如,设有字母表∑={ a, b, c } 则有符号串 a,b,ab,ba, cba, abc… 符号串总是建立在某个特定字 母表上的且只由字母表上的有穷多 个符号组成。
(2) public、 protected、 private
2014-6-21
2.2.3
数据类型与操作
一个数据类型通常包括以下三种要 素:
用于区别这种类型数据对象的属性 这种类型的数据对象可以具有的值 可以作用于这种类型的数据对象的操 作
2.2.3
数据类型与操作
一.初等数据类型
数值类型:整型、实型、复数、双精度, 运算:+,-,*,/等 逻辑类型:布尔运算:∨,∧,┑ 字符类型:符号处理 指针类型:值指向另外一些数据
温故知新
翻译程序:它是一个程序,能把一种
语言程序转换成另一种语言程序,且 二者在逻辑上是等价的。这两种语言 分别称为源语言和目标语言。 编译程序:一种翻译程序,它的源语 言是“高级语言”(C, Java, Pascal),目标语言是“低级语 言”(汇编语言,机器语言)
2014-6-21 1
温故知新
3 字符串、表格、栈
字符串:符号处理、公式处理
表格:本质上是一种记录结构
线性表:一组顺序化的记录结构
栈:一种线性表,后进先出,POP, PUSH
三
抽象数据类型
数据对象的一个集合; 作用于这些数据对象的抽象运算的集合; 这种类型对象的封装,即,除了使用类型中 所定义的运算外,用户不能对这些对象进行 操作。
编译前端 编译后端
源程序
编译前端:与 源语言有关, 与目标机无关
词法分析器
单词符号 语法分析器 语法单位 语义分析与中 间代码生成器 中间代码 优化器 中间代码
表 格 管 理
出 错 处 理
2014-6-21
目标代码生成器 中国科大 目标代码
编译后端:与 源语言无关, 与目标机有关2
第二章
高级语言及其语法描述
本章内容简介
本章描述程序设计语言的基本结构和 主要共同特征并介绍程序设计语言主 要语句的文法描述与形式定义。
与机器语言或汇编语言比较,高级语 言的优点:
较接近于数学语言和工程语言,比较直观、 自然和易于理解; 便于验证其正确性,易于改错; 编写效率高; 易于移植.
2.1程序语言的定义
任何语言实现的基础是语言定义 语言的定义决定了该语言具有什么样 的语言功能、什么样的程序结构、什 么样的数据结构以及具体的使用形式 等细节问题。
控制语句:
无条件转移语句 goto L
循环语句 while B do S repeat S until B for i:=E1 step E2 until E3 do S 过程调用语句 call P(X1, X2, ... ,Xn)
条件语句 if B then S if B then S1 else S2
2.2 高级语言的一般特性
表达式的结合性和优先集
与数学习惯类似 不同的语言,这两种性质各有差异
FORTRAN
结合性 X – Y - Z 等于(X – Y) - Z 左结合 X – Y + Z 等于 (X - Y) + Z 左结合 X**Y**Z 等于X**(Y**Z) 右结合
优先集
2014-6-21
2.2 高级语言的一般特性
2.2.2 程序结构 – Java
(1)封装、 继承、 多态
class Car{ int color_number; int door_number; int speed; Push_break(){…} Add_oil(){…} } class Trash_Car extends Car{ double amount; Fill_trash(){…} 20 中国科大 }