所谓编译器,实际上就是我们编程时将输入的高级语言代码转换成相应的目标代码,从而实现将目标代码转换成汇编码的一种过渡工具。

这种工具根据具体情况不同,可以将不同的高级语言代码转换成不同的目标代码,例如将pascal语言代码转换成自己定义的四元式等。

而一个简单的编译器主要是由以下几个部分组成的:

  1. 词法分析
  2. 语法分析
  3. 语义分析及生成中间代码
  4. 代码优化
  5. 生成目标代码

另外还有对于符号表的管理和对错误的处理要贯穿始终,当然如果这样的一个编译器是用来提交课程作业的话,还少不了一个最基本的解释执行器,这样一个编译器的雏形就完成了。

在实际编程的时候,我们除了要对编译器功能部分的编写进行了解,同时我们还需要了解我们处理后的和处理前的数据在程序中的存放形式和使用方式。

关于存放形式,我认为一个简易的pl0编译器需要三个重要的存储空间,如下:

  第一个就是运行栈,用来对运行的时候的数据进行栈模式的操作并且同时能够起到作为数据存储的数据栈用途。

  第二个就是符号表,这个表顾名思义是用来存储在你做读入程序的过程中得到的标识符、常量、变量等等。

  第三个就是指令栈,这个栈同样只有一个用途就是在做一遍扫描的之后填入在不同时刻要求的不同指令,这些指令依次来操控运行栈和符号表以及可能会用到的寄存器的具体操作。

接下来要做的,就是按部就班的添加每一个部分所需要添加的功能了。

这些将会在接下来的几篇博客里进行进一步讲解。

以上内容如有错误或漏洞,希望各位读者能够给予更正,谢谢。

扩展pl0编译器设计——总述的更多相关文章

  1. 数字逻辑实践4->面向硬件电路的设计思维--FPGA设计总述

    本文是对实验课上讲解的"面向硬件电路的设计思维"的总结,结合数字逻辑课本,进行提炼和整理. 主要来源是课件与本人整理,部分参考了网络大佬的博客. 本文主要介绍不同于之前软件设计思维 ...

  2. Web应用程序系统的多用户权限控制设计及实现-总述【1】

    中大型的Web系统开发均需要权限的配置,基于多角色,多用户的操作权限管理是一个系统开发的基础.搭建好一套权限,用户,角色,页面一体的开发架构,可以用于后期业务的开发,同时也可用于不同业务的系统开发. ...

  3. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  4. Linux makefile教程之总述二[转]

    Makefile 总述——————— 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或 ...

  5. [转] Makefile 基础 (2) —— Makefile 总述

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  6. 基于ASP.Net Core开发一套通用后台框架记录-(总述)

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

  7. 自顶向下深入分析Netty(六)--Channel总述

    自顶向下深入分析Netty(六)--Channel总述 自顶向下深入分析Netty(六)--Channel源码实现 6.1 总述 6.1.1 Channel JDK中的Channel是通讯的载体,而N ...

  8. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...

  9. [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用

    [源码解析] PyTorch 分布式(5) ------ DistributedDataParallel 总述&如何使用 目录 [源码解析] PyTorch 分布式(5) ------ Dis ...

随机推荐

  1. Android(java)学习笔记130:ProgressBar使用的

    首先我们看例程如下: 1.main.xml文件如下: <?xml version="1.0" encoding="utf-8"?> <Line ...

  2. Unicode 编码解码

    1. Regex.Unescape(str);返回Unicode解码,非Unicode直接返回 /// <summary>      /// 2.转为Unicode编码      /// ...

  3. dedecms 知识点总结

    生成-更新主页html 将自定义字段在arclist调用:   内容模型管理==>频道模型管理==>增加新字段==>列表处理:  使字段可以在列表的底层模板中获得(自定义字段默认仅能 ...

  4. 【JavaScript DOM编程艺术(第二版)】笔记

    第1章 javascript简史 1.什么是DOM? 简单的说,DOM是一套对文档的内容进行抽象和概念化的方法.\         第2章 javascript语法 1.内建对象: 内建在javasc ...

  5. VS2012无法创建项目:未找到与约束……匹配的导出

    故障情况:7月10号后用VS2012创建项目时,弹出如下对话框,无法创建新项目: 而后经网络搜索确定是7月10号更新了系统补丁后造成的 解决方案: 1.卸载这两个补丁后重启电脑: 2.到http:// ...

  6. 对象创建型模式------Abstract Factory(抽象工厂)

    1. 意图    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.2. 别名    Kit3. 动机        假设我们要开发一款游戏,当然为了吸引更多的人玩,游戏难度不能太大 ...

  7. C语言:Day1~Day4

    点击右键查看原图

  8. 十分钟搭建个人网站:Jekyll主题BoHu

    最近花了三天时间制作了我的第一个jekyll theme--BoHu.一款知乎风格的模板,使用jekyll模板引擎,十分钟就能搭建属于你自己的静态博客网站. 本主题的特征为: 知乎风格 分页导航使用的 ...

  9. 13_ServletContext对象

    [简介] ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息,一个Web应用只会创建一个ServletContext对象. Web容器启动的时候,它会为每个We ...

  10. WIX Custom Action (immediate, deffered, rollback)

    Following content is directly reprinted from From MSI to WiX, Part 19 - The Art of Custom Action, Pa ...