编译原理 概论

合集下载

编译原理第一章课件计算机编译原理

编译原理第一章课件计算机编译原理
编译原理第一章课件计算机 编译原理
• 编译原理概述 • 语言基础知识 • 编译技术与方法 • 编译器构造实践 • 编译器的优化与改进 • 计算机编译原理的应用领域
01
编译原理概述
编译器的定义与作用
编译器定义
编译器是一种将高级语言程序翻译成机器语言程序的软件工 具。
编译器作用
将人类可读的源代码转换为计算机可执行的机器代码,实现 程序的运行。
语义分析技术
01
语义规则定义
定义程序语言的语义规则,包括类型检查、控制流分析、 数据流分析等。
02 03
语义分析算法
根据定义的语义规则,采用相应的语义分析算法对语法分 析得到的语法树进行语义分析,如类型检查算法、控制流 分析算法等。
语义错误处理
在语义分析过程中,对于不符合语义规则的输入,需要进 行错误处理,如报告语义错误信息或进行错误恢复。同时 ,还需要考虑如何处理程序中的异常情况,如异常捕获、 异常处理等。
执行效率。
THANKS
感谢观看
03
编译技术与方法
词法分析技术
词汇识别
将输入的字符流按照某种规则划 分成一个个的单词或符号,即词 法单元。
词法单元分类
将识别出的词法单元按照其性质 和作用进行分类,如关键字、标 识符、运算符、分隔符等。
错误处理
在词法分析过程中,对于不符合 词法规则的输入,需要进行错误 处理,如报告错误信息或进行错 误恢复。
死代码删除
识别和删除永远不会被执行的代码段,以减 小程序体积和提高执行效率。
编译器性能评估
编译速度
衡量编译器将源代码转换为目标代码所需的时间。
代码质量
评估编译器生成的目标代码在运行时所占用的内存和执行效率。

编译原理(清华)第一章编译程序概论

编译原理(清华)第一章编译程序概论

例:赋值语句 sum:=first+count*10
赋值语句规则 <赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> 标识符 sum 语法树为: 赋值语句 := 表达式 标识符 first 表达式 + 表达式 标识符 count 表达式 * 表达式 整数 10
第一章 编译程序概论
学习目标: 掌握:编译的各个阶段 理解:编译程序的概念 了解:解释器,编译程序的结构和组合
1.1 1.2 1.3 1.4 1.5
什么是编译程序 编译过程概述 编译程序的结构 编译阶段的组合 编译技术和软件工具
1.1 什么是编译程序
1. 编译程序(compiler) 将用高级语言(如FORTRAN,PASCAL或C)书写 的程序翻译成等价的低级语言程序(如汇编 语言或机器语言),这种翻译程序称为编译 程序(compiler)。
源程序 数据 解释程序 编译程序 计算结果
源程序
目标程序
解释器和编译器
3. 高级语言程序的处理过程
需预处理的源程序 预处理程序 编译程序的基本任务: 将源语言程序翻译成等 价的目标语言程序
源程序
编译程序 目标汇编程序 汇编程序 可再装配的机器代码 装配/连接--编辑程序 绝对机器代码 可再装配目标文件

北京航空航天大学《编译原理》第1章 概论

北京航空航天大学《编译原理》第1章 概论
编译技术
编译原理及编译程序构造
张 莉 教授 史晓华
2006. 9-2007.1
北京航空航天大学计算机学院
课程要求
课时:48学时(1-17周) 分为两部分:(分别计分)
– 理论基础(3学分):课堂教学,按时交作业。 • 作业10分; • 3-6次随堂考试,共计30分;(不补) • 期末闭卷考试,60分 • 主动回答问题,每次奖励0.5分,5分封顶(考前公布) – 实践部分(2学分):上机实践(50机时)(10周开始上机)
北京航空航天大学计算机学院
第一章 概论
(介绍名词术语、了解编译系统的结构和编译过程)
•• 编译的起源:程序设计语言的发展 编译的起源:程序设计语言的发展 •• 基本概念 基本概念 •• 编译过程和编译程序构造 编译过程和编译程序构造 编译技术的应用 •• 编译技术的应用
北京航空航天大学计算机学院
1.1 程序设计语言的发展
能运用所学技术解决实际问题能独立编写北京航空航天大学计算机学院北京航空航天大学计算机学院课程定位课程定位课程定位课程定位计算机学院核心课程计算机学院核心课程计算机学院核心课程计算机学院核心课程分类分类课程名称课程名称课程定位课程定位备注备注计算机基础计算机基础计算机导论入门算法和数据结构高级语言程序设计12基础必备工具计算机理论离散数学离散数学123计算机理论数理逻辑计算机数学集合论和图论组合数学计算机硬件类课程计算机硬件类课程数子电路和数字逻辑硬件基础课程含实验计算机原理和汇编语言部件原理含实验计算机接口与通讯部件间通讯含实验计算机体系结构体系结构含实验计算机网络计算机软件类课程计算机软件类课程编译技术编译技术系统软件层系统软件层含课程设计含课程设计操作系统操作系统含课程设计数据库系统原理含课程设计软件工程信息系统分析与设计应用类计算机图形学多媒体技术应用类北京航空航天大学计算机学院北京航空航天大学计算机学院数字逻辑计算机导论高等数学线性代数计算机原理和汇编语言高级程序设计语言1离散数学数据结构和算法c语言提高数据库系统编译技术编译技术操作系统计算机图形学网络计算机系统结构信息系统软件工程课程间的拓扑关系课程间的拓扑关系接口与通讯1学期学期23456电路分析北京航空航天大学计算机学院北京航空航天大学计算机学院??教材和参考书教材和参考书教材和参考书教材和参考书高仲仪金茂忠编译原理及编译程序构造北航出版社

编译原理概念总结

编译原理概念总结

第一章 引论• 为什么要用编译器 • 与编译器相关的程序 • 翻译步骤• 编译器中的主要数据结构1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。

2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。

3、使用编译器是为了提高编程的速度和准确度。

4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。

5、解释器是另一种常见的语言处理器。

它并不通过翻译的方法生成目标程序。

从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。

6、一个源程序可能被分割成多个模块,并存放于独立的文件中。

把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。

预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。

7、连接器(linker )能够解决外部内存地址的问题。

8、加载器(loader )把所有的可执行目标文件放到内存中执行。

2、一个编译器的结构OutputSourceProgramFront endBack endObject1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。

2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。

3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。

4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。

词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。

《编译原理》课件

《编译原理》课件
代码生成
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类

编译原理概念总结

编译原理概念总结

编译原理概念总结编译原理是计算机科学中的一个重要领域,研究如何将高级语言程序翻译成计算机能理解和执行的目标代码。

它涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段。

编译原理的核心目标是实现高效可靠地将高级语言程序转换为等价的机器代码,并能在目标机器上正确运行。

编译器是实现这一目标的关键工具,它将高级语言程序的源代码作为输入,经过多个阶段的处理,最终生成可执行的目标代码。

在编译原理中,词法分析是第一个阶段,它将源代码分解为若干个词法单元,如标识符、关键字、运算符等。

词法分析器通过使用正则表达式和有限自动机等方法,辨别不同的词法单元,为后续的语法分析提供输入。

语法分析是编译过程的第二个阶段,它将词法单元组织成按照语法规则形成的语法结构。

语法分析器使用上下文无关文法描述语言的语法规则,并通过构建语法树或语法分析表等数据结构来表示和分析各种语法结构。

语义分析是编译过程的第三个阶段,它对语法结构进行语义检查和解释,确保程序在语义上是正确的。

语义分析器会对数据类型、作用域、类型转换等进行检查,并生成中间代码以供后续的代码生成和优化。

中间代码生成是编译过程的第四个阶段,它将源代码转换为与机器无关的中间代码表示形式。

中间代码是一种类似于汇编语言的抽象表示形式,它包含了源代码的各种高级结构,如条件语句、循环语句等,但与具体的机器架构无关。

代码优化是编译过程的第五个阶段,它通过对中间代码进行重写和重组,以提高程序的执行效率。

代码优化器会检测和消除冗余的计算、减少内存访问次数、提前计算常量表达式等,从而减少程序的执行时间和空间开销。

目标代码生成是编译过程的最后一个阶段,它将中间代码转换为目标机器能够执行的机器代码。

目标代码生成器会将中间代码中的各种高级结构转换为机器指令,并进行寄存器分配、指令选择和指令调度等操作,以生成最终的目标代码。

除了以上的主要阶段,编译原理还涉及到其他一些重要的概念和技术,如语法制导翻译、动态内存分配、符号表管理、异常处理等。

编译原理(第1章编译概论)【天津科技大学课件】

语言的语法规则。描述语法规则的有效工具是上 下文无关文法。它是一种层次结构分析。
1.2 编译过程和编译程序的基本结构
3、语义分析
(1)任务:对语法分析程序所识别出的各类语法成分 ,分析其含义,以保证源程序在语义上的正确性。 (2)语义的分类 静态语义:指在编译阶段能检查出的语义。 典型静态语义包括声明和类型检查。 语义 动态语义:则指只有在目标码的运行阶段

出错处理:编译过程中,发现源程序有错误 (词法错误、语法错误、语义错误),编译程 序应报告错误的性质和出错的地点,并将错误 所造成的影响限制在尽可能小的范围内,使得 源程序的其余部分继续被编译下去。这些工作 称为出错处理(error handling)。
1.3 编译程序的组织形式
一、 遍(趟) 所谓趟或遍是指一个编译程序在编译时刻把源程序或 源程序的等价物(中间程序)从头到尾扫描一遍并完成规定 加工处理工作的过程。 根据编译程序在完成翻译任务的过程中需要对源程序 或其中间等价物扫描的遍数,可以把编译程序分为单遍 扫描的编译程序(只需扫描一遍)和多遍扫描的编译程序 (需扫描多遍)。
阶段与遍是不同的概念。一遍可以由若干段组成,一 个阶段也可以分若干遍来完成。
1.3 编译程序的组织形式
语法分析程序
取 单 词 源 程 序
送 单 词
调 用
返 回
词法分析程序
语义分析程序
代码生成程序
目 标 程 序
单遍扫描的编译程序
1.3 编译程序的组织形式
二、 前端和后端
源 代码 中间 代码 目标 代码
输入: 词法(正规表达式) 识别动作(C/C++程序段) 输出: yylex( ) 函数
1.4 编译程序的生成方法

第1章编译程序概论引论-精选


2019/8/10
§ 1.4 编译阶段的组合
3.一遍与多遍
– 一个编译程序可由一遍、两遍或多遍完成。 – “遍”是对源程序或中间语言程序从头到尾扫视
并完成规定任务的过程。 – 影响分遍的因素:源语言结构,目标机资源,开
发人员编程习惯。
Page 28
第1章 编译原理概论
2019/8/10
§ 1.5 编译技术和软件工具
2019/8/10
§ 1.4 编译阶段的组合
2.前端与后端
– 前端:
• 词法分析、语法分析、语义分析和中间代码的生成、 中间代码优化。
• 前端的工作只依赖于源语言,与机器无关。
– 后端:
• 目标代码生成。 • 后端工作依赖于目标机,而与源语言无关(只与中
间代码有关)。
Page 27
第1章 编译原理概论
举例:
(1) (inttoreal 10
- T1 )
(2) (*
count T1 T2)
(3) (+
first T2 T3)
(4) (:=
T3
- sum)
简化后:
(* count 10.0 T1)
(+ first T1 sum)
Page 22
第1章 编译原理概论
2019/8/10
§ 1.2 编译过程
第1章 编译原理概论
2019/8/10
§ 1.5 编译技术和软件工具
4.高级语言之间的转换工具
– 把一种高级语言转换成另一种高级语言。 – 汇编语言转换成高级语言(反编译)。
5.并行编译技术
– 并行机和多处理机的发展要求软件并行处理; – 运用重构技术从串行程序中分析出并行成分; – 用并行语言编写并行处理程序。

编译原理课件-概述

the source program’s phrase structure.This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax,and to construct a suitable representation of its phrase structure.
(2) (* ,
id3 t1
(3) (+ ,
id2 t2
(4) (:= ,
t3 -
t1 ) t2 ) t3 ) id1 )
翻譯為中間代碼
j = 2 * i + 1; if (j >= n)
j = 2 * i + 3; return a[j];
Three-address code
t1 = 2 * i t2 = t1 + 1 j = t2 t3 = j < n if t3 goto L0 t4 = 2 * i t5 = t4 + 3 j = t5 L0: t6 = a[j] return t6
語義分析(處理)
:=
Id1
+
position Id2
initial
Id3
rate
* inttoreal 60
語義分析(語言的規定和實現)
int arr[2], c; c = arr * 10;
語義分析
語義分析(semantic analysis)
The parsed program is further analyzed
編譯邏輯過程

编译原理概述

编译原理概述
编译原理是计算机科学中的重要概念,是指设计和构建编译器的理论和技术。

编译器是一种将高级语言代码翻译成底层机器语言代码的程序,它起着将源代码翻译成目标代码的作用。

编译原理的主要研究对象是编译器的构造和实现方法,以及编译过程中涉及的各种理论和技术问题。

编译原理的基本概念包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个方面。

其中,词法分析是将源代码分解成一个个单词或记号的过程,语法分析是对单词或记号进行语法规则分析的过程,语义分析是确定代码真正含义的过程,中间代码生成是生成与源代码等价的目标代码的过程,代码优化是提高目标代码质量和性能的过程,目标代码生成是将中间代码翻译成机器代码的过程。

在编译原理中,最核心的部分是语法分析,它决定了编译器对源代码的理解和转换能力。

语法分析可以分为自上而下的分析方法和自下而上的分析方法。

自上而下的分析方法是从最抽象的语法规则开始逐步向下分解源代码,直到分解到最细粒度;自下而上的分析方法则是从最细粒度的语法规则开始逐步向上合成源代码,直到合成到最抽象的语法规则。

在编译原理的研究中,还涉及到一些高级主题,如编译器前端和后端的设计、编译器生成器的设计、抽象语法树和符号表的表示、代码生成技术、及时编译技术等。

总的来说,编译原理是计算机科学中非常重要的一个领域,它的研究成果直接影响着编程语言的设计和实现方式,也是软件工程师必须掌握的基础知识之一。

通过学习编译原理,可以更好地理解计算机语言的工作原理,提高编程能力和代码质量,为软件开发提供更好的支持和保障。

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

Please input values of a,b and c. 请输入a,b和c的值。
程序设计语言描述 print ("Input values of a, b and c"); read (a ); read (b );
C语言描述 printf(" … "); scanf("%d",&a); scanf("%d",&b);
read (c );
sum=a+b+c; print("sum=", sum);
scanf("%d",&c);
sum=a+b+c; print("sum=", sum);
计算机能执行上述程序吗? 答案当然是: No! Why?
C语言程序
#include <stdio.h> int main( ){ 程序是按一定规则书写的一个符号串 int a, b, c, sum; printf("Input values of a, b and c"); scanf("%d", &a ); 程序设计语言是用来书写程序的人工设 scanf("%d", &b ); 计的符号语言 scanf("%d", &c ); sum=a+b+c; printf("sum=", sum); return 0; }
1.2.1 程序设计语言的定义
2. 语法定义 • 语法图 • BNF(巴科斯范式)表示法 • 口语
1) 语法图
函数定义 函数类型 函数标识符 ( 形参表列 ) 函数体
+
简单表达式 + 项 项
2) BNF表示法
<函数定义>::= <函数类型> <函数标识符>(<形参表列>) <函数体>
<形参表列>::=<形参表列><形参> |<形参> <简单表达式>::= < 项 > | + <项> | - <项>
编译程序构造的基本原理、技术和方法
编译原理课程讨论三个方面:
• 高级程序设计语言的定义和相关概念 • 与编译实现相关的形式语言理论基本概念 • 编译程序构造的原理、技术和方法
编译原理课程内容:
• 高级程序设计语言相关概念:
理解编译程序的结构与功能
• 与编译相关的形式语言理论基本概念: 为第三部分的讨论打下良好基础 • 编译程序构造原理: 掌握编译原理课程的基本内容
目标程序
中间表 示代码
语义分析子程序
词法分析第一遍,语法分析第二遍,代码优化与目标程序生成第三遍
1.3.3 编译程序的分类
诊断型
优化型
可重定位型
交叉型
增量型
应用并行技术型

诊断型

专门设计来帮助开发与调试程序。 有较强的代码优化功能,能生成高功效的目标程序。优 化面临速度和内存空间的相互制约。C编译器是典型的优 化型。 开发时,保留与计算机无关部分,仅重写与目标计算机 相关的部分 在一种型号上运行的编译程序,生成的却是另一种特定 型号计算机上运行的目标程序。 多处理器计算机支持,相关技术正在探索。
汇编语言程序
L C BNG ST B LESS L ST EXIT 2, x 2, y LESS 2,max EXIT 2, y 2,max x=>reg 2 reg 2(x) ~ y 当<=时goto LESS reg 2(x)=> max goto EXIT y => reg 2 reg 2(y)=> max
义的最小单位


识别的依据:词法规则 如何描述记法规则?:有限自动机,正则文法等
如:x=x+2;识别出: 标识符:x 运算符:=,+ 整型常量:2
2014-1-3
32
2. 语法分析

任务:根据语法规则从(组成源程序的)单 词符号串识别出各种语法单位。 识别依据:语法规则 如何描述语法规则?上下文无关文法 如:x=x+2; 从词法分析中识别出的单词流:x,=,x,+,2中, 识别出这是一条赋值语句
优化型 可重定位型




交叉型

应用并行技术型

1.3.4 实际应用中的编译程序
1. 程序开发支持环境 2. 预处理 3. 非标准版本 例 C语言表达式的计算顺序 (k++)+(k++)+(k++)
1.4 形式语言理论与编译实现技术 词法分析—正则文法 语法分析—上下文无关文法
编译原理
Compiler Principles
2013年9月
第一章 编译概述
1.1 引言
• 为什么要讨论编译原理? • 编译原理课程讨论哪些方面?
1.2 程序设计语言与程序
• 程序及其结构 • 程序设计语言与程序的执行
1.3 编译程序构造及有关概念
• 编译程序的构造 • 遍的概念 • 编译程序的分类
编译过程

对于C语言代码片断: 词法分析 int i=0; i=i+2; 识别出代码片断中的一个个单词 语法分析 (如:int,+等); 分析语法结构; 中间代码 如:5个单词:i,=,i,+,2构成一条赋值语句 产生 根据赋值语句的含义生成中间代码; 优化 对中间代码进行时-空上的优化; 面向特定CPU生成特定的优化的机器代码。
2014-1-3
33
3. 中间代码产生



任务:按照各类不同语法范畴的语言语义进 行中间代码生成。 生成依据:语义规则 中间代码:三元式,四元式,树形结构等 x=x+2; 生成四元式为 (1) + x 2 (2) := t1 t1 x
2014-1-3
34
4. 优化

任务:对于前阶段产生的中间代码进行 时-空上的优化,以期在最后阶段产生更 高效的目标代码。
编译原理课程开设的目的
• 系统地了解并掌握高级程序设计语言编译 程序的构造原理; • 加深对高级程序设计语言(C语言)的理解; • 提高分析问题和解决问题的能力,培养与 提高研制程序的能力; • 有利于今后应用于其他各个领域的符号处 理。
一个简单的问题
对y=f(x)=x2-1,求x=1,2时y的值。 main() { int x1,x2,,1y,2y; 正确? scanf(“%d%d”,&x1,&x2); 为什么? 1y=x12-1; 如何纠正? 2y=x2*x2-1; printf(“%d%d”,1y,2y); }
2014-1-3
目标代码 产生
30
编译程序的逻辑结构(工作过程)
各种信息表的管理
词 法 分 析 语 法 分 析
源 程 序
语 义 分 析 和
优 化
目 标 代 码 生 成
目 标 代 码






1. 词法分析

任务: 输入源程序,对构成源程序的字符串进行 扫描和分解,识别出一个个单词符号—具有语法含
4 2014年1月3日
1.1 引言
1. 编译程序引进的必要 源 程 序 目 标 程 序
编译程序
把面向人的高级抽象描述的算法等价转换 到可执行程序的程序
1.1 引言
2. 课程讨论的内容
本课程将讨论编译程序的构造原理,工作
原理;在构造编译程序时,可采用哪些技术,
会发生哪些问题,应如何去解决,等等。
编译原理课程讨论的主要内容:

参见龙书
符号表
position = initial+ rate * 60
词法分析
语法分析(+语义分析)
中间代码生成
代码优化与目标程序生成
1.3.2 遍(趟pass)的概念
编译程序分成若干阶段,每一阶段以前 一阶段的输出作为输入,对源程序或中间表 示从头到尾地扫描处理的过程称为一遍(趟) 。 分成几遍,编译程序便称为几遍的编译 程序。 阶段与遍是不同的概念。一遍可以由若 干段组成,一个阶段也可以分若干遍来完成。
1.2.1 程序及其结构
程序的概念: • 计算机能执行的指令序列 • 计算任务的处理对象和处理规则的描述 程序=算法+数据结构 高级程序设计语言程序按一定的构架构成
1.2.1 程序设计语言的定义
1. 程序设计语言的四个方面 • 语法:书写规则 • 语义:含义 • 语用:用途 • 语境:理解和实现的环境
高级程序设计语言程序 If (x>y) max=x; else max=y;
语法成分的层次(以C语言为例)
程序 函数1 语句1 表达式1 函数i 语句字 C语言基本符号: 函数… 语句… 表达式…
字母、数字、界限符
C语言符号:标识符、无符号数、字符串、标号、界 限符(关键字、运算符、括号及其他专用符号)
一遍编译程序: (从头到尾一次性完成)
源程序只读一遍
错误的诊查处理 语法分析
只适用于简单 语言
源 程 序
词法 分析
语义分析和中 间代码生成
目 标 代 码
符号表管理
三遍编译程序:
源程序
词法分 属性字序列 析程序
语义 处理
语法分 析程序
中间表示代码 目标程 序生成 优 优化后 化 中间表示 代码优化
| <简单表达式>+<项>
相关文档
最新文档