[编译原理] 绪论

编译程序与解释程序


解释程序:以源程序为输入,在执行过程中不再产生目标程序,而是边解释边执行。(效率不高)

编译程序:先编译,后执行。

翻译


过程:输入并扫描源程序 → 词法分析 → 语法分析 → 代码优化 → 目标代码生成

编译程序主要由八个部分构成


  1. 词法分析程序(扫描器scanner)
  2. 语法分析程序(分析器parser)
  3. 语义分析程序
  4. 中间代码生成程序
  5. 代码优化程序
  6. 目标代码生成程序
  7. 错误检查和处理程序
  8. 各种信息表格的管理程序

词法分析程序(扫描器)


词法分析程序的任务

1)识别出源程序的各个基本语法单位(单词或语法符号)

2)删除无用的空白字符及其他与输入介质相关的非实质字符(空格、回车等)

3)删除注释

4)进行语法检查,报告所发现的错误

单词流的内部表示

为了让计算机能够方便地识别和使用,在实际中的常用方法是将单词计算机内部表示为一个有序对(Class, Value)

· Class为一整型数,用于标识该单词的类别

· Value用于存放单词的值

例:(1, ‘PROGRAM’)(3, ‘source’)(2, ‘;’)(1, ‘VAR’)

语法分析程序(分析器)


语法分析程序以词法分析程序的单词流为输入,分析源程序的结构,判断它是否为相应程序设计语言的合法程序。

方法

试图为源程序构造一个语法树

语法树只是逻辑概念上的(逻辑结构),并不是在机器内真正存在的物理结构

语义分析程序


两个特征:语法特征、语义特征

语法特征描述各成分的形式或结构

语义特征描述各语法成分的含义与功能,即规定它们的属性或在执行应进行的运算或操作

因此,只有进行了语义分析,才能让计算机知道,应进行何操作或运算

在进行语义分析时还应进行相应的语义检查(类型匹配、矛盾说明、参数匹配)

语义处理尚无公认的方法来系统地描述,当前较通用的方法是半机械化的“语法制导翻译”方法

语法分析任务

对识别出的各种语法成分进行语义分析,并产生相应的中间代码

中间代码:一种介于源语言和目标语言之间的中间语言形式

生成中间代码的目的

1)便于做优化处理

2)便于编译程序的移植

代码优化程序和目标代码生成程序


a = b + c * 60 (c为float类型)

60 → 60.0 → T1

c * T1 → T2

b + T2 → T3

T3 → a

优化如下:

c * 60.0 → T1

b + T1 → a

然后进行目标代码生成(汇编语言)

错误检查和处理程序


程序中出现错误是难免的,一完善的编译程序应具有很强的差错能力,并能准确地报告源程序中错误的种类及位置

除报错外,编译程序还可以生成一些另外的注释信息,有助于程序设计人员调试程序

信息表管理程序


编译过程中,需经常收集、记录或查询程序中所出现的各种量的有关属性(信息)。

为此,编译程序需要建立一批不同用处的表格

本人邮箱:yhyshiroha123@outlook.jp
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇