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

这种工具根据具体情况不同,可以将不同的高级语言代码转换成不同的目标代码,例如将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. 在Objective-C声明Block的几种方式

    1.作为局部变量 returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...}; 2.作为类的属性 @property ...

  2. java中volatile关键字的含义 (转载)

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  3. 关于Collections中的sort()方法总结

    用Java集合中的Collections.sort方法对list排序的两种方法 本文部分引用自:http://my.oschina.net/leoson/blog/131904 用Collection ...

  4. MySQL 세자리 마다 콤마 찍기

    MySQL에서 세자리 마다 콤마를 찍으려면 FORMAT 함수를 이용하시면 됩니다. FORMAT( 컬럼명, 소수점이하 자리수 ) 여기서 컬럼의 자료형이 varchar와 같은 문자형이 ...

  5. webstorm添加vue模板支持

    字谕纪泽: 八月一日,刘曾撰来营,接尔第二号信并薛晓帆信,得悉家中四宅平定,至以为尉. 汝读”四书”无甚心得,由不能虚心涵泳,切己体察.朱子教人读书之法,此二语最为精当.尔现读”离娄”,即如“离娄”首 ...

  6. 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...

  7. orcale授权

    grant connect,resource,dba to 表名;--用户授权 CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURC ...

  8. SQL Server(函数) 关键字的使用 三

    三, 函数关键字 -- 使用介绍 28, Function的使用(Function的内建 SQL函数)? 内建 SQL 函数的语法是: SELECT function(列) FROM 表) 29, a ...

  9. zookeeper实现互斥锁

    简单的说,zookeeper就是为了解决集群环境中数据一致性的问题. 举个很简单栗子: 有一个变量A,分别存在于两台服务器中,某个程序需要用到变量A,就随机地访问其中一台服务器并取得变量A的值,对吧? ...

  10. wpf ListBox或ListView等数据控件 绑定数据,最简单的方式

    在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注 ...