1.扫描程序(scanner)

  把源代码中的语句扫描进来,并分解成token。即词法分析。

2.语法分析程序(parser)

  进行语法分析,并将分析结果用分析树(parse tree)或者语法树(syntax tree)表示出来。

3.语义分析程序(semantic analyzer)

  在语法树下面添加语义分析

  如a[index]=4+2;

  将a识别成 array of integer ,index识别成integer,4、2识别成常量。

  并补充在语法树下面。

4.源代码优化程序(source code optimizer)

  改进源代码,生成中间代码。

  例如a[index] = 4+2

  t=4+2

  a[index]=t;

  则经过源代码优化后可形成a[index]= 6 这也被称为常量合并。

  源代码优化程序在语法树的基础上进行,并将其转化为三元式或类似的线性结构进行输出而成为中间代码。

5.代码生成器(code generator)

  生成目标代码

  在本书中以汇编语言作为目标代码,上式a[index]=4+2;经过以上步骤后,代码生成器生成的目标代码为

  mov r0,index

  mul r0,2

  mov r1,&a;

  mov r1,r0;

  mov *r1,6

  注:以上取地址的方式参照C语言,故取a的地址用&a,取r1的地址用*r

6.目标代码优化程序(target code optimizer)

  优化目标代码

  在这个阶段中,编译器尝试着改进由代码生成器生成的目标代码。这种改进包括选择编址模式以提高性能、将速度慢的指令更换成速度快的,以及删除多余的操作。

  如上述汇编代码可优化为:

  mov r0,index

  shl r0

  mov &a[r0],6

PS:以上为阅读该书1.3节总结&备忘

转载于:https://www.cnblogs.com/kangyun/p/4329269.html

编译器的普遍翻译步骤相关推荐

  1. 支持国产处理器仿真的全数字实时仿真平台SkyEye与可信编译器L2C的核心翻译步骤

    1.核心翻译步骤示例 本节我们以第2节提到的Lustre语言的主要特性为线索来解释L2C在翻译过程中的关键节点是如何处理的, 并以图 1的实例来解释Lustre程序是如何被一步步地翻译到Clight语 ...

  2. 全数字实时仿真软件SkyEye与可信编译器L2C的核心翻译步骤的设计与实现

    有关翻译正确性验证的重点疑难问题及其设计实现方案 在L2C可信编译器的设计与实现中, 对于实线所对应的翻译过程 (CompCert编译器除外) 均借助于Coq证明了正确性 (语义保持性), 然后得出L ...

  3. 一般编译器错误_[翻译]MLIR:摩尔定律终结的编译器基础结构

    [翻译]MLIR:摩尔定律终结的编译器基础结构 MLIR:A Compiler Infrastructure for the End of Moore's Law 作者:Chris Lattner等 ...

  4. 国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍

    为了满足国内某安全攸关领域的需求, L2C编译器的开发始于2010年9月, 其目标是设计实现一个经过形式化验证的可信编译器, 其源语言是面向领域的同步数据流语言Lustre*(Lustre语言的一个变 ...

  5. 实现一个简单的编译器

    简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...

  6. 自己写编译器学习总结

    如何写一个简单的编译器? https://www.zhihu.com/question/36756224 初学编译原理,想写一个简单的编译器. 是时候亮出我的 LL 语言了,全称:Lambda Lit ...

  7. 编译器构造概述(详细)

    一.             编译器简介 前面谈到静态链接器构造的基本流程,最后提到所构造的链接器若要能正常工作的前提是需要构造一个能生成符合链接器输入文件格式的编译器,本文构造一个符合这种具体格式要 ...

  8. 全数字实时仿真平台SkyEye和同步数据流语义与翻译正确性验证

    全数字实时仿真平台 SkyEye,中文全称天目全数字实时仿真软件,应用软件仿真技术,逼真地模拟出被测软件的物理环境.用图形化方式构建虚拟目标系统,有效降低了硬件工程师和软件工程师之间的沟通成本,软件工 ...

  9. 编译器设计(一)——简单介绍一个编译器的结构

    一个编译器的结构 一.语言处理器 二.编译器的结构 三.词法分析 四.语法分析 五.语义分析 六.中间代码生成 七.机器无关代码代码优化 一.语言处理器 计算机很笨,只能认识0和1,而人呢,脑子的存储 ...

最新文章

  1. HDU 2084 数塔(DP)(JAVA版)
  2. Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:命令选项...
  3. 打好网约车“安全牌”,T3出行以人、车、路保障
  4. 详解协方差与协方差矩阵
  5. 11.python并发入门(part8 基于线程队列实现生产者消费者模型)
  6. Faster R-CNN代码例子
  7. 个人开发者福利:没有注册公司,如何发布自己的小程序
  8. QT实现完整TIM登录框界面样式
  9. viewcube翻译_view cube是什么意思
  10. 使用Nginx做图片服务器时候,配置之后图片访问一直是 404问题解决
  11. c3p0 服务启动获取连接超时_c3p0获取连接Connection后的Close()---释疑
  12. 物联网云平台四个功能领域
  13. oracle数据从一个表空间导入到另外一个表空间
  14. CentOS 安装rz和sz命令
  15. HTML5+CSS——个人在线简历
  16. 统计学从数据到结论(第四版) pdf
  17. Python实现高斯滤波
  18. JS (GMT)与普通时间格式的互相转换,JS转GMT格式时间
  19. 【PMP】PMBOK 笔记 第3章 项目管理过程
  20. 数字化转型中平台思维的十大要素-《数字化转型的道与术》

热门文章

  1. 消息中间件-Activemq之Broker-Cluster
  2. java之ibatis数据缓存
  3. mysql进程SHOW PROCESSLIST详解Command命令状态
  4. source insight快捷键及使用技巧
  5. 说说Android桌面(Launcher应用)背后的故事(二)——应用程序的添加
  6. 图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了
  7. Tungsten Fabric SDN — Service Chain — 高级特性
  8. 分布式系统架构设计系列文章
  9. SQLite 版本引发的 Python 程序调用问题
  10. stm32的时钟系统