转载于:https://blog.csdn.net/ypshowm/article/details/89374706

编译过程主要分为四步:

1、词法分析(扫描)

  运行类似于有限状态机的算法将源代码的字符分割成一系列的记号。词法分析产生的记号一般分为几种:关键字、标识符、字面量(数字,字符串等)、特殊标记(加号,等号等)。另外,扫描器也完成其他一些工作,比如将标识符存放到符号表中,将数字、字符串常量存放到文字表中。

2、语法分析

  将由扫描器产生的记号进行语法分析,从而产生语法树。语法树:以表达式为结点的树。另外,在语法分析时,很多运算符的优先级和含义也被确定下来。

3、语义分析

  就是看看这个语句是否有意义。编译器能分析的语义是静态语义,即在编译期间可以确定的语义。

4、中间语言的生成

  源代码优化器会在源代码级别进行优化,进而产生中间代码。中间代码一般跟目标机器和运行环境是无关的,比如不包含数据的尺寸,变量的地址和寄存器的名字等。

最新文章

  1. 基于nutz框架理解Ioc容器
  2. Linux连接Internet
  3. SSH服务器与Android通信(2)--Android客户端接收数据
  4. Leetcode 137. Single Number I/II/III
  5. 【Delphi】圆角窗体
  6. 使用静态变量的方法求n!
  7. dreamvc框架(一)ioc容器的集成
  8. a标签增加onclick事件提示未定义function
  9. python alembic which comes from SQLalchemy
  10. [妙味JS基础]JS热身运动
  11. shared_ptr注意点
  12. javasrcipt的作用域和闭包(二)
  13. CF891C Envy 最小生成树/虚树
  14. Linux下调整ext3分区大小【转】
  15. Flex组件参考 代码参考汇总
  16. RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder
  17. Eclipse调试cas server 3.5.2.1
  18. 我的硬盘安装ArchLinux+xorg+gnome+美化
  19. Debian7安装后的配置(英文环境chromium浏览器中汉字变成方块的问题)
  20. UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)

热门文章

  1. python-利用xlrd模块读取excel数据,将excel数据转换成字典格式
  2. [题解]BZOJ1004 序列函数
  3. 【C# 线程】内存模型(C#)---非常重要 【多线程、并发、异步的基础知识】
  4. 点击弹出div内容包括遮罩层
  5. C# Md5Hash
  6. LeetCode-010-正则表达式匹配
  7. 【二】遗传算法(GA)的MATLAB实现
  8. k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患?
  9. thinkphp 用户登录记录日记
  10. tp5 Redis缓冲的设置与清除