编译原理张晶版 第一章 概论
- 格式:ppt
- 大小:1.37 MB
- 文档页数:58
第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。
(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。
编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。
编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。
1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。
(逻辑上紧密相连的一组字符,这些字符具有集体含义。
)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。
目的:检查各种语法单位在语法结构上的正确性。
例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。
第一章概述1.1 编译程序的概念计算机硬件的最核心部件是CPU(Computer Processor Unit)即中央处理器,CPU能够执行的指令是二进制形式的指令即机器指令,机器指令的集合称机器语言。
用机器指令书写的程序可以说无法阅读,程序设计的效率极低甚至可以说无法进行程序设计。
机器指令的助记符形式称汇编指令,比如MOV是数据传送指令,助记符形式的汇编指令的集合称汇编语言。
汇编语言的出现使得程序设计的效率有所提高,即使现在,汇编语言仍是编制设备驱动程序的重要工具。
但是,汇编语言书写的程序不能直接在CPU中运行,需要汇编程序(Assembler)把汇编语言书写的源程序(Source Program)汇编成机器语言程序才能在CPU中运行。
汇编的过程可以用下图表示:(源程序)(目标程序)汇编语言与机器语言类似,仍然依赖于计算机,使用起来繁琐、易出错、可读必差、缺乏通用性,因此面向过程的高级语言、面向对象的高级语言相继出现了。
例如面向过程的高级语言:Basic、Pascal、Fortran、C语言等等;面向对象的高级语言Visual Basic、Visual C++、Delphi、PowerBuilder等等。
把高级语言翻译(Translator)成汇编语言程序或机器语言程序的程序称为编译程序(Compiler)。
汇编语言与机器语言亦称低级语言。
对高级语言书写的源程序进行编译的过程可以用下图表示:编译程序翻译目标程序(Object Program)一般指低级语言程序。
综上所述,可以看出编译程序在计算机系统中的重要地位。
不同的高级程序设计语言需要不同的编译程序,同一种高级程序设计语言在不同的计算机上需要不同的编译程序。
有了编译程序,程序设计人员就不需要考虑与计算机硬件有关的绝大部分甚至全部细节,使程序设计独立与计算机,即同一个高级语言源程序可以在不同的计算机上运行。
在计算机上运行一个高级语言源程序一般分为两步:第一步是通过编译程序把源程序翻译成目标程序;第二步是运行或称执行目标程序。