| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6025 人关注过本帖, 1 人收藏
标题:RockCarry PL/0 Compiler V0.3
取消只看楼主 加入收藏
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
结帖率:95.65%
收藏(1)
 问题点数:0 回复次数:4 
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
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
看来大家对这个作品不感兴趣啊。
2008-06-03 09:41
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
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
收藏
得分:0 
最近还是有点忙,再加上打游戏,都没怎么做自己的程序了。
不过 RGE 中已经加入了对 VESA 全面的支持,包括显示模式的识别和设置,显存的管理,硬件滚屏和换页的功能也支持了。
游戏的 MAP 的实现作了一下尝试,效果不好,后来就停止了。
下一步我打算先把 GUI 的部分完成,我正在参考一些实现,包括 Jig 的 Space C,目前思路基本上有了,但是还不明晰。
编译技术方面,我正在打算写一个 16bit 的虚拟机,有自己的 cpu 和硬件部件,然后编译器产生这个虚拟机的目标代码。
总之,一些在头脑 里面想象起来是非常的美好和激动,然而呢,自己却还没有怎么行动啊。
RGE 目前也是越来越完善了,不过效率还是令人不满意的,不过应付一简单的 RPG 是足够了。
2008-07-29 20:16
快速回复:RockCarry PL/0 Compiler V0.3
数据加载中...
 
   



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

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