编译程序基本原理的知识笔记

编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序。

              

1、编译过程

1.1 词法分析

编译过程的第一阶段主要任务是对源程序从前往后(从左往右)逐个字符扫描,从中识别出一个个单词符号。“单词”是程序设计语言的基本语法单位,如关键字、标识符等。

1.2 语法分析

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,比如表达式、语句。

语法规则是各类语法单位的构成规则。

词法分析和语法分析的本质都是对源程序的结构进行分析。

1.3 语义分析

语义分析阶段分析各语法的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能正确翻译成目标程序。

语义分析的主要工作进行类型分析和检查。

1.4 中间代码生成

中间代码生成阶段的主要任务是工作是根据语义分析的输出生成中间代码。最常用的中间代码是与汇编语法的指令非常相似的三地址码,常采用四元式。

格式为:(运算符,运算对象1,运算对象2,运算结果)

语义分析和中间代码的依据是语言的语义规则。

1.5 代码优化

由于编译器翻译中间代码的过程是机械式的、固定模式进行的,因此生成的中间代码往往在时间上、空间方面效率较差。如果需要生成高效率的目标代码,就必须进行优化。

1.6 目标代码生成

主要任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码。

1.7 符号表管理

符号表的作用是记录源程序中各符号的必要信息,用来辅助语义的正确检查和代码生成。

1.8 出错处理

源程序不可避免会出现一些错误。分为两类:静态错误和动态错误。

静态错误:编译阶段发现的错误。比如:单词拼写错误、标点符号错误。

动态错误:在程序运行时发生的错误。比如 零做除数等。

posted @   天使不哭  阅读(17)  评论(0编辑  收藏  举报  
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-09-21 20张趣图表达了程序员的心酸
2019-09-21 20张趣图表达了程序员的心酸
2018-09-21 JS 对象封装的常用方式
2018-09-21 JS 对象封装的常用方式
点击右上角即可分享
微信分享提示