编译原理--引论(一)
- 在一个程序可以运行之前,它首先被翻译成一种能够被计算机执行的形式
- 完成这项翻译工作的软件系统称为编译器
语言处理器#
编译器#
- 一个编译器是一个程序,它可以把以源语言编写的程序,把该程序翻译成为一个等价的
- 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误
运行目标程序#
- 若目标程序是一个可执行的机器语言程序,那么它就可以被用户调用,处理输入并产生输出
解释器#
- 常见的语言处理器,不通过翻译方式生成目标程序
- 从用户角度看,解释器直接利用用户提供的输入执行源程序中指定的操作
编译器与解释器优劣比较#
在把用户输入映射成为输出的过程中
- 由一个编译器产生的机器语言目标程序通常比一个解释器快很多
- 解释器的错误诊断效果通常比编译器更好,因为它逐个语句执行源程序
Java语言处理器结合了编译和解释过程#
- 一个Java源程序首先被编译成一个称为字节码(bytecode)的中间表示形式
- 然后由一个虚拟机对得到的字节码加以解释执行
- 好处是可以在一台机器上编译得到的字节码在另一台机器上解释执行
- 通过网络 就可以完成机器之间的迁移
- 为了更快地完成输入到输出地处理,有些被称为即时编译器地Java编译器在运行中间程序处理输入的前一刻首先把字节码翻译成为机器语言,然后再执行程序
- 一个源程序可能被分割成为多个模块,并存放于独立的文件中
- 把源程序聚合在一起的任务有时会由一个称为预处理器(preprocessor) 的程序独立完成,预处理器(preprocessor) 负责把宏的缩写形式转换为源语言的语句
- 将经过预处理的源程序作为输入传递给一个编译器,编译器可能产生一个汇编语言程序作为其输出,因为汇编语言比较容易输出和调试
- 这个汇编语言程序由称为汇编器(assembler) 的程序进行处理,并生成可重定位的机器代码
- 大型程序经常被分成多个部分编译,可重定位机器代码有必要和其他可重定位的目标文件及库文件连接到一起,形成真正在机器上运行的代码
- 一个文件的代码可能指向另一个文件的位置,而链接器(linker) 能够解决外部内存地址的问题
- 加载器(loader) 把所有可执行目标文件放到内存中
作者:BigBender
出处:https://www.cnblogs.com/BigBender/p/12105231.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!