编译原理浅析

uniappIP属地: 新疆
0.63字数 654阅读 506

目前程序员开发中基本都在使用高级语言,比如OC、Android、Java等。使用这些高级语言开发的程序,想要在计算机上顺利执行,都必须经历编译过程。 我们知道,计算机能够识别的只有0和1,被称为“大脑”的CPU,就是不断地从内存中读入0和1而不知疲倦的工作着。

在一定程度上说,正是通过编译工具架起的高级语言二进制语言的桥梁,才不断涌现出越来越多的高级语言武器库,供程序员在软件的世界里纵横驰骋、大杀四方。对其机制的理解,能够让一个程序员拨开不同高级语言表面差异的迷雾,找到它们背后共同的渊源。

一个程序的编译过程,可以分为如下几个阶段:


编译过程

1 以中间代码为界,编译器分为前端(front-end)和后端(back-end);

2 中间代码是程序的通用表示,屏蔽了不同目标机器平台的差异;有了中间代码,编译器独立为前端和后端两个模块,有助于分开优化;

3 前端将源程序作为一个字符串作为输入流,先经词法分析(使用正则实现),识别变量、字符串/整型/浮点型常量、函数、运算符和关键字等标识,解析为一个个 token 流。然后语法分析(上下文无关语法表示,自底向上分析,LR(1)分析器)对输入的 token 流进行语法有效性检查,将符合规则的语法,转变为中间代码进行表示。

4 中间代码根据选定的平台架构(CPU指令), 转变为最终的目标代码(二进制表示)。将不同源程序转变的目标代码进行链接,最终成为在选定平台上可执行的目标程序。

作为 iOS 的开发者,使用的编译工具是 LLVM,相比它的前辈 GCC有了大幅的性能和实现优化。clangLLVM 的前端,用于生成中间代码。lldbLLVM 的调试器,类似 GCCgdb

参考:
1 自己动手写编译器
2 Clang/LLVM/lldb/GCC/gdb 关系

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
3人点赞
更多精彩内容,就在简书APP
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
uniapp最喜欢的数字是10<br>不是要追求十全十美<br>而是相信完美并不存在<br>所以要保持一切...
总资产35共写了18.5W字获得501个赞共227个粉丝

推荐阅读更多精彩内容

  • 第1课-OC对象原理基础 [TOC] 在探索OC对象原理之前,我们首先需要了解以下知识点 1. lldb lldb...
    落泪无痕的博客空间阅读 445评论 0 0
  • 在说这篇文章之前,首先我们带入一个问题,在Xcode中我们最常使用的一个组合键cmd+b按下之后都进行了哪一些工作...
    眯大帅阅读 11,712评论 1 57
  • 1. 加固的缘由❓ 我们都知道,在越狱机型上,如果程序的可执行文件被获取到,就可以通过一些逆向工具来反编译我们的程...
    纯情_小火鸡阅读 3,842评论 1 8
  • 引言 维基百科: 编译语言(英语:Compiled language)是一种以编译器来实现的编程语言。它不像解释型...
    素还真人阅读 2,290评论 0 7
  • 引言 维基百科:编译语言(英语:Compiled language)是一种以编译器来实现的编程语言。它不像解释型语...
    Flame_Dream阅读 8,602评论 5 52