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

这种工具根据具体情况不同,可以将不同的高级语言代码转换成不同的目标代码,例如将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. 汽车OBD2诊断程序开发 (原文转载,思路很清晰!)

    1.因TL718已经为你建立了物理层.数据链层和部分应用层的协议,所以只要OBD2标准应用层协议文本,ISO15031-5 或 SAE J1979(这两个协议是相同的内容).    2.TL718诊断 ...

  2. 关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记

    并没有都读完,不过感觉还是有必要做一个笔记的,毕竟这只是随笔不是文章,所以可以有多少写多少,也算是工作总结了,最重要的是这个好在可以,完成所有有意义文档的检索,比起自己的word来说高级很多~~~. ...

  3. linux系统下搭建自己的web服务器

    之前在windows 2008 server上搭建了一个用于测试的web服务器,但是在打开网站的时候特别的慢,尤其是图片的加载都会失败,当时以为是路径的问题,但是在服务器上自己打开都特别慢,自己实在找 ...

  4. 哇!今天找到一个非常好用的自动补全插件-necomplete.vim

    看别人说的什么xpcomplete,snipte,拿来都不会用,这个necomplete.vim还挺好用的,不用去按C-X,C-O进行补全,把关键字自动的列出来,调用的是用户自定义补全,^u^n^p的 ...

  5. easyUI 比较时间大小

    //                    function toDate(str){ //                        var sd=str.split("-" ...

  6. Visual Studio 2015中的常用调试技巧分享

    .NET 技术交流群:337901356 欢迎您的加入! 为什么要学习调试? 调试(Debug)是作为一个程序员必须要学会的东西,学会调试可以极大的提高开发效率,排错时间,很多人不喜欢调试,但我认为这 ...

  7. SharePoint移动客户端--Rshare 中的Smart Cache

    Rshare中的Smart Cache 能好好的帮助那些移动客户,当网络信号不好或者没有wifi的时候,cache大有可为,只要你在上飞机执勤cache 了相关文档,你就可以在飞行模式下继续你的工作. ...

  8. RabbitMQ 原文译1.1--HelloWord

    本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷. RabitMQ 是一个消息中间件,其实就是从消息生产者那里接受消息,然后发送给消息消费者.在这个传输过程中,可以定义一些缓存,持 ...

  9. SQL Server调优系列进阶篇 - 深入剖析统计信息

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  10. 查看帮助文档的一些方法:help,dir,type,func_global等

    help与dir与type:在使用python来编写代码时,会经常使用python自带函数或模块,一些不常用的函数或是模块的用途不是很清楚,这时候就需要用到help函数来查看帮助.这里要注意下,hel ...