| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6029 人关注过本帖, 1 人收藏
标题:RockCarry PL/0 Compiler V0.3
只看楼主 加入收藏
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
结帖率:95.65%
收藏(1)
 问题点数:0 回复次数:14 
RockCarry PL/0 Compiler V0.3
==============================
 RockCarry PL/0 Compiler V0.3
==============================

一、简介
---------
RockCarry PL/0 Compiler 是一个 PL/0 语言的编译器,最初版本是在大学的编译原理课程实验时开发的。V0.3 版是以 V0.22 为参考,全部重写了所有的代码,因此代码更加规范,可读性更好,在程序的架构上也有改进,使得程序更加精简清晰。V0.22 版中,还额外实现了输入输出语句和一个简单的虚拟机,从而组成了一个简易的编译运行系统。由于 V0.22 中输入输出语句和虚拟机的设计并不合理,因此 V0.3 版中不会再实现这些功能。

另一方面,我个人并不喜欢使用 pascal 语言,当时做这个也是因为课程的需要,所以这个版本也许就是最终版了,尽管它距离真正的编译器,还有很遥远的距离。目前这个版本,可以产生文本格式的四元式序列、变量表和符号表。已经全部实现了当时编译原理课程设计的要求。可以作为初学者的参考,当然如果大家直接拿这个去交作业,也是绝对没有问题的。


二、文件说明
-------------
src 目录中存放了该项目全部的源文件:
    scanner.txt 词法分析程序的 lex 源程序
    parser.txt  语法分析及语义处理的 yacc 源程序
    stdefine.h  本项目用到的一个 c 语言标准头文件
    test.pl0    一个 pl/0 语言的测试用例
    build.bat   自动编译批处理程序
    clean.bat   自动清除批处理程序

如果你正确安装了我所制作的 tc 命令行编译器,那么你只需要直接双击运行 build.bat 就可以完成本项目的编译了,编译后会产生 如下的文件:
    lex.yy.c     由 lex 工具生成的词法分析 c 程序
    y.tab.c      由 yacc 工具生成的语法分析 c 程序
    error.txt    保存 build 过程中所产生的错误信息
    lexxyy.obj   由 tcc 编译 lex.yy.c 所产生的目标文件
    ytab.obj     由 tcc 编译 y.tab.c 所产生的目标文件
    scanner.exe  词法分析测试程序
    compiler.exe 即是 pl/0 语言编译器

如果你没有安装 tc 命令行编译器,则不会生成目标文件(*.obj)和可执行文件(*.exe),你可以使用你自己喜欢的编译器编译 lex.yy.c 和 y.tab.c 两个文件,即可生成 compiler, 如果你还想生成 scanner 测试程序,请单独编译 lex.yy.c 并预定以宏 _TEST_ 即可。

tools 目录中存放了 windows 版本的 lex & yacc 工具:
    flex.exe windows 版的 lex 工具,来源于 GNU 的 flex.
    yacc.exe windows 般的 yacc 工具,来源于 Berkeley yacc.

doc 目录中存放了全部的开发文档和参考文档。


三、使用方法
-------------
如何编译?前面已经简单的提到,如果你安装了 tc 命令行编译器,你只需要双击运行 build.bat 即可完成编译。如果你没有安装,你仍然需要双击运行 build.bat, 之后会产生 lex.yy.c 和 y.tab.c 两个 c 语言源程序,使用你喜欢的 c 编译器编译他们就可以产生 pl/0 compiler 了。

源程序说明,scanner.txt 中的 main 函数实现了一个 c-scanner 的测试程序,并且使用了 _TEST_ 宏定义进行预处理,如果你想编译得到 scanner 测试程序,请直接编译 lex.yy.c 并且加上 _TEST_ 的宏定义。parser.txt 中实现了 force_fpf 函数,该函数是专门为 tc 编译器书写,用来解决 tc 编译中的浮点库链接问题,在别的编译器中,该函数没有意义,可以去掉。

正确编译后将产生 scanner.exe 和 compiler.exe 两个可执行程序,他们分别是词法分析测试程序和 pl/0 编译器程序。运行 scanner.exe 按照提示输入 pl/0 源程序文件名和词法分析结果输出文件名,即可完成对 pl/0 源程序的词法分析,分析结果为一个文本文件。运行 compiler.exe 程序,按照提示输入 pl/0 源程序和编译结果文件,即可完成编译。编译成功将会提示 done. 否则会提示编译错误信息。编译成功后生成一个文本文件,其中包含了四元式序列、变量表和符号表。


四、发展方向
-------------
这一版相对 V0.22 虽然没有实质性的改变,甚至 V0.22 已有的功能都没有完全实现。然而,时隔多年再次重写这个,也算重新理清了思路,复习了相关的理论和工具。一下步,我希望自己设计一个简化版本的 c 语言,然后完成词法分析、语法分析、语义处理和中间代码生成。我就称它为 rockcarry c-minus, 在 c-minus 中,将会包含以下特性:
    1. 提供对函数的支持
    2. 提供对一维数组的支持
    3. 提供对指针变量的支持
    4. 提供扩展函数接口及相关的语法,使得 c-minus 可以使用 c 静态库和动态库
    5. 支持 byte(8bit), int(32bit), float(32bit), 三种数据类型
    6. 实现 if, for, while, switch, goto 等于语句的简化版本

对 c-minus 的编译器来说,将会提供如下的特性:
    1. 更加完善的编译错误信息
    2. 代码优化和目标代码的生成
    3. 定义目标文件格式和相应的链接程序

另外还需要实现一个更加实用的虚拟机。更多的特性我也不考虑了,就目前这些,已经是有很多超出了我个人的能力范围,需要更多的学习和实践才能实现。在能力没有达到之前,一切的想法都只是空想而已,除了更让自己兴奋,别无用处。


          RockCarry
          2008-5-31

[[it] 本帖最后由 RockCarry 于 2008-5-31 12:02 编辑 [/it]]

RockCarry PL0 Compiler V0.3.rar (136.16 KB)
搜索更多相关主题的帖子: Compiler RockCarry 虚拟机 课程 编译 
2008-05-31 11:12
卖血上网
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-05-31 11:38
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
看来大家对这个作品不感兴趣啊。
2008-06-03 09:41
kk4868
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2007-6-3
收藏
得分:0 
太深奥
特步,非一般的感觉

2008-06-03 09:53
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
不一般的NB
我也想自己开发个编译器类,只是水平太次,理论知识太贫乏。

RockCarry 兄有新进展,也到我们论坛发份吧?或专门给你立个项目,给你个版块,你把自己的进度发出来。朋友们也可以参与讨论。

个人网站 -  http://.h001.
2008-06-12 09:52
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
好,这个论坛的人气也是不行了,等以后我也转移阵地,去你们那儿看看啦。
2008-06-12 11:53
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
看来真的是时候离开这个是非之地了,这个论坛既没有什么人气,也没有什么值得学习和尊重的人,讨论的气氛也不太好。哎。
2008-06-13 10:16
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
[bo][un]RockCarry[/un] 在 2008-6-13 10:16 的发言:[/bo]

看来真的是时候离开这个是非之地了,这个论坛既没有什么人气,也没有什么值得学习和尊重的人,讨论的气氛也不太好。哎。

那你想去哪里 找到落脚的地方来这里吼一下 我也跟过去o(∩_∩)o...
2008-06-13 10:27
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
LS及LS的LS就是值得学习和尊重的人呀
别走呀

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-06-13 10:29
xufeichen
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-6-21
收藏
得分:0 
很好,就要它
2008-06-21 00:32
快速回复:RockCarry PL/0 Compiler V0.3
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019660 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved