编译原理浅析

作者: uniapp | 来源:发表于2022-10-16 20:35 被阅读0次

    目前程序员开发中基本都在使用高级语言,比如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 关系

    相关文章

      网友评论

        本文标题:编译原理浅析

        本文链接:https://www.haomeiwen.com/subject/viplzrtx.html