编译器是干什么的?
来源:互联网 发布:网络上最好听的生日歌 编辑:程序博客网 时间:2024/05/17 08:18
编译器完成高级语言到汇编程序的解析,它的工作过程划分为前端和后端,前端对源程序进行分析,把源程序切分成一些基本块并生成中间语言表示,后端在分析正确无误之后,把中间语言表示转化为目标机器支持的汇编语言。编译器完整的工作过程由以下阶段:
中间语言有很多种表示方式,包括语法树,后缀表示法和三地址码等,它们需要具备的共同特点是易于生成和易于译成目标代码。
代码优化阶段主要是为了提高中间代码的质量,以便提高目标程序的运行速度。代码优化既可以在语义分析之后完成,也可以在中间代码生成之后完成。
目标代码生成是把优化好的中间代码转化为目标机器的指令代码(汇编代码)。这个过程仍然需要做很多分析、优化、变形。代码生成器要对源程序中使用的变量分配寄存器,然后为每条中间语言选择合适的机器指令,包括机器指令的操作码和编址模式。
编译器的前端依赖于被编译的语言,前端还包括与这几个部分相关的符号表操作,错误处理以及与目标机器无关的代码优化过程。
编译过程中和目标机器相关的部分属于编译程序的后端,后端与源语言无关,只和中间代码有关。后端包括代码优化中涉及目标机器的部分,目标代码生成以及相关的符号操作及错误处理。
编译器的一个极为重要的功能是对程序中错误的反应,几乎在编译的每个阶段都可以诊查出错误。在词法分析阶段会发现字符的拼写错误,在语法分析阶段会检查单词串是否违反语言的结构规则,语义分析中,编译器进一步检查语法上正确但无意义的操作成分。
0 0
- 编译器是干什么的?
- 到底是干什么的
- 程序员是干什么的
- csdn 是干什么的??
- FastDFS 是干什么的?
- HttpContext是干什么的
- HttpContext是干什么的
- struts 是干什么的
- HttpContext是干什么的
- 主板驱动是干什么的?
- libx264是干什么的?
- javaldx是干什么的
- 文法是干什么的?
- module是干什么的?
- 项目经理是干什么的
- HttpContext是干什么的
- MTD是干什么的
- HttpContext是干什么的
- vivado+zedboard之Linux开发环境搭建
- Fragment 生命周期怎么来的?
- 股市心得(一)
- 数据挖掘书籍
- 设计模式C++实现
- 编译器是干什么的?
- 我3个月第一次用微商和淘宝店挣了18万给爸爸治病
- 消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 退職挨拶 メール
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)
- 逆序输出的数列
- Merge Sorted Array II
- [BZOJ1025][SCOI2009]游戏 && dp