脚本宝典收集整理的这篇文章主要介绍了

编译原理 第〇章 通论

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

首先明确一下参考书, 我们使用的是《编译原理》(第三版)陈意云 张昱 着 高教出版社.

从第一个 C 语言试验 "hello world" 我们就已经明白了如何写代码和运行代码. 我们打开编译器, 可能是亘古不变的 VC 6.0, 亦或是简洁友好的 dev C++. 不管怎样, 我们都明白这样的流程, 写代码->调试运行. 而我们又知道, 不管你的计算机是什么架构, 都不能直接执行 C 的代码. 在面向硬件的机器码和高级语言之间起到纽带作用的便是编译器.

从高级语言到机器语言

我们学习编译原理的目的就是要明白编译器是怎样将一个高级语言转变成 0/1 串的机器语言的. 整个流程如下图所示:

编译器工作流程简图

需要注意的是, 这个流程仅用来说明大致的工作内容与顺序,并不严谨. 其中前面三项往往被称为编译器的前端, 优化被称作中段, 而生成目标代码叫做编译器的后端.

简单的解释一下这个流程图. 首先是词法分析, 词法分析的工作在于区分代码中的单词与符号. 比如在 C 语言中, 标识符可以由空格断开区分. 如: "int var = 3;", 词法分析的任务便是识别出各个单词. 我们希望当词法分析器读入这一串字符串后可以告诉我们这个串中有几个"单词", "int", "var", "=" 以及 "3". 且他们分别是"类型名", "变量名", "操作符" 以及"数字". 往往这些信息以记号的形式存在, 即 " ".

拿到这些信息, 下一步便是语法分析. 语法分析检查拿到的记号流是否满足语法要求. 一般语法分析后,我们会得到语法树. 如"var_a = var_b * (var_c + var_d)", 根据语法分析我们得到这样的树:

语法树示例

然后便是语义分析, 这一步里编译器就会考虑类型匹配, 转换等问题.

优化过程中, 编译器会适当地对代码进行一些调整. 比如数据对齐, 减少依赖甚至是并行化. 最后一步生成目标代码, 就是编译器用前面准备好的信息生成最后的目标代码(机器码). 后两部分可能不是我们重点考虑的内容. 编译器的基本原理主要还是集中在前三个部分。

创建于 2017.9.12
Osinovsy

总结

以上是脚本宝典为你收集整理的

编译原理 第〇章 通论

全部内容,希望文章能够帮你解决

编译原理 第〇章 通论

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过