博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译原理小结
阅读量:6126 次
发布时间:2019-06-21

本文共 825 字,大约阅读时间需要 2 分钟。

编译原理

1. 编译的过程:        词法分析 --> 语法分析 --> 语义分析 --> 生成中间代码 --> 代码优化 --> 汇编代码(或者直接就是机器码)    到这里编译器的工作就已经完成了        接下来就是让汇编器登场了, 汇编器将代码汇编成机器码(.o文件), 接着分两种情况:        if 采用静态链接库: 在汇编完成之后直接链接生成可执行文件        else if 采用动态链接库: 在汇编完成之后, 除了链接标准C库中的RuntimeLibrary(有了他, main函数才会被调用)中的库(.o)之外其余的都不链接,                 等到运行时再调用动态链接器动态的链接, 达到节省内存的效果, 但是与静态链接库相比, 启动的速度稍微慢一些                 2. 词法分析:    单个字符读取, 将读取到的关键词, 标识符, 常量等存储到符号表中        比如:            读取到一个'a'时, 继续读取, 知道读取到一个' '或者'\t'时停止读取, 那么在这之前读到的就是标识符了, 我们假设就是'abc', 显然它是一个标识符, 我们将它        以
<标识符, 'abc'>
的形式存到符号表中, 如果读到的是'if'这个关键字时, 怎么能让程序知道这是关键字呢? 很显然我们在程序运行时需要初始化一个标识符的字典, 里面存放的是if, while等关键字, 这样只需要在这个字典中寻找即可. 3. 语法分析: 在进行词法分析的同时, 语法分析器也在工作, 他根据词法分析器的输出构建语法分析树(展示的是计算的逻辑) 4. 总之在进行完上述的操作之后, 会通过语法分析树这样一个有逻辑的树生成中间的代码, 有点类似于Python中的字节码指令, 接着在解释器执行的时候, 他只要读取这些执行就可以了

转载地址:http://cpbua.baihongyu.com/

你可能感兴趣的文章
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>