首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >杂谈-为什么要学编译技术

杂谈-为什么要学编译技术

原创
作者头像
Wilbur-L
修改2021-01-18 11:48:22
修改2021-01-18 11:48:22
1K0
举报
文章被收录于专栏:iOS底层原理iOS底层原理

一·编译做了什么

相信很多理论的解释各位都看腻了比如以下百度百科的

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如PascalCC++Java汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。

对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。

以及各大书本上写的“将计算机语言翻译成计算机能识别的语言”,栏主这几个星期消失的时间段里,从编译原理基础开始,到理解正则,文法,优化,错误处理等各个方面为各位理清,编译究竟做了什么,我们的终极目标是成功编译方舟编译器,从零开始。

由于栏主也是新学,所以这个栏目会持续更新,周期长达6个月,在这不到1000字的内容里,把编译世界之美给各位呈现出来。

例子:

c:

int main(){

printf("hello world");

}

从上面的百度百科解释我们知道,从高级语言c/go/c++/java/php 等翻译成计算机可识别的程序那么编译器做了以下几件事情

1.关键字表

关键字 int 0

main 1

printf 2

2.终结符

空格 3

( 4

) 5

{ 6

} 7

; 8

3.正则文法

计算机会一个一个字符从左到右识别单词和符号intmain(){}printf("hello world");}

首先经过编译器的前端第一个步骤:词法分析

词法分析得出的结果int main printf 等都是关键字

第二个步骤:语法分析

这里需要引用一个例子:I`m a teacher 主语:I 谓语be 宾语:teacher 才构成一个合法的句子那么语法分析做的事就是这个

int main printf hello world

传入参数 int 主函数入口 main 函数printf 打印hello world

然后生成抽象语法树:

AST1-1
AST1-1

第三个步骤:语义分析

分析上诉AST是否通达情理

比如

int main(){

printf("hello world");

print(a);

}

变量a并未声明,所以还需要判断错误。

以上这几个步骤在编译器设计当中被称为前端:词法分析->语法分析->语义分析

前端得到的AST语法树需要经过优化层也被称作中间层,转换为介于人可读 与 计算机可读之间的状态

例如上图AST 利用之前的表库 把关键字替换成数字0~N。N取决于高级语言有多少种关键字比如

c语言:

void printf int float

go语言:

go for :=

那么上述AST树就会变成数字+字符+字母的中间状态组合

二·为什么你需要学习编译技术

这里引用金庸的一句话:张三丰张无忌练习「太极剑」时,要他「忘掉剑招,只记剑意」。

无招:

我了解你的关键词实现原理,go java c c++ php等等这么多高级语言,无非就是在正则,文法之间的不同

有招:

学习关键字 for do while if else switch case

说了这么这么多,无非学习一门语言看“自顶向下”or“自底向上” 各有各的的好处。

注释:以上全是个人主观观点,劣文拙文,全当看个笑话就好。顺便一提栏主编译+逆向同步进行。年后更新

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一·编译做了什么
    • 例子:
  • 二·为什么你需要学习编译技术
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档