所谓编译器,实际上就是我们编程时将输入的高级语言代码转换成相应的目标代码,从而实现将目标代码转换成汇编码的一种过渡工具。
这种工具根据具体情况不同,可以将不同的高级语言代码转换成不同的目标代码,例如将pascal语言代码转换成自己定义的四元式等。
而一个简单的编译器主要是由以下几个部分组成的:
词法分析
语法分析
语义分析及生成中间代码
代码优化
生成目标代码
另外还有对于符号表的管理和对错误的处理要贯穿始终,当然如果这样的一个编译器是用来提交课程作业的话,还少不了一个最基本的解释执行器,这样一个编译器的雏形就完成了。
在实际编程的时候,我们除了要对编译器功能部分的编写进行了解,同时我们还需要了解我们处理后的和处理前的数据在程序中的存放形式和使用方式。
关于存放形式,我认为一个简易的pl0编译器需要三个重要的存储空间,如下:
第一个就是运行栈,用来对运行的时候的数据进行栈模式的操作并且同时能够起到作为数据存储的数据栈用途。
第二个就是符号表,这个表顾名思义是用来存储在你做读入程序的过程中得到的标识符、常量、变量等等。
第三个就是指令栈,这个栈同样只有一个用途就是在做一遍扫描的之后填入在不同时刻要求的不同指令,这些指令依次来操控运行栈和符号表以及可能会用到的寄存器的具体操作。
接下来要做的,就是按部就班的添加每一个部分所需要添加的功能了。
这些将会在接下来的几篇博客里进行进一步讲解。
以上内容如有错误或漏洞,希望各位读者能够给予更正,谢谢。