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

举报
IT技术分享社区 发表于 2022/12/17 08:24:12 2022/12/17
【摘要】  编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序。

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

       编辑       


1、编译过程


1.1 词法分析

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


1.2 语法分析

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

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

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


1.3 语义分析

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

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


1.4 中间代码生成

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

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

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


1.5 代码优化

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


1.6 目标代码生成

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


1.7 符号表管理

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


1.8 出错处理

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

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。