资源简介

一.课程设计目的 在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。 二.课程设计要求 1. 基本内容 (1)扩充赋值运算:+= 和 -= (2)扩充语句(Pascal的FOR语句): ①FOR := TO DO ②FOR := DOWNTO DO 其中,语句①的循环变量的步长为2, 语句②的循环变量的步长为-2。 2. 选做内容 (1)增加运算:++ 和 --。 (2)增加类型:① 字符类型; ② 实数类型。 (3)扩充函数:① 有返回值和返回语句;② 有参数函数。 (4)增加一维数组类型(可增加指令)。 (5)其他典型语言设施。 3.本人在课程设计中已实现的功能 (1)增加单词:保留字 ELSE,FOR,TO,DOWNTO, REPEAT, UNTIL, RETURN 运算符 +=,-=,++,-- (2)修改单词:不等号# 改为 (3)增加条件语句的ELSE子句 (4)扩充赋值运算:+= 和 -= (5)扩充语句 ①FOR := TO DO ②FOR := DOWNTO DO (6)增加运算:++ 和 --(包括前后++、--运算) (7)增加一维数组类型 (8) 其他典型语言设施:REPEAT 语句 UNTIL 语句

资源截图

代码片段和文件信息

//A.2     C      版   本

/*编译和运行环境:
*1Visual C++6.0VisualC++.NET and Visual C++.NET 2003
*WinNT Win 200 WinXP and  Win2003 
*2 gcc version 3.3.2  20031022(Red Hat Linux 3.3.2-1)
*Redhat Fedora core 1
*Intel 32 platform
*使用方法:
*运行后输入PL/0 源程序文件名
*回答是否输出虚拟机代码
*回答是否输出名字表
*fa.tmp 输出虚拟机代码
*fa1.tmp  输出源文件及其各行对应的首地址
*fa2.tmp  输出结果 
*fas.tmp  输出名字表
*/
#include
#include 
#include
#include“pl0.h“
#include“string.h“
/*解释执行时使用的栈*/
#define stacksize 500
int main()
{
bool nxtlev[symnum];
printf(“\n        **************             编译原理实验          ******************\n“);
printf(“\n      ****  班别:08计算机科学与技术2班  姓名:蔡谋善  学号:3108006465 ****\n\n“); 
printf(“      *                   开始调试代码时间:1月2号                         *  \n“);
printf(“      *                   完成调试代码时间:1月9号                         *  \n“);
    printf(“      *                                                                    *  \n“);
printf(“\n      **********************************************************************\n“);
printf(“\n请输入PL/0文件路径>>“);
scanf(“%s“fname);                                     /*输入文件名*/
fin=fopen(fname“r“);
//fin=fopen(“05.txt““r“);
if(fin)
{
printf(“是否输出虚拟机代码?(Y/N)“);                //是否输出虚拟机代码
scanf(“%s“fname);
listswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
printf(“是否输出名字表? (Y/N)“);             //是否输出名字表
scanf(“%s“fname);
tableswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
fa1=fopen(“fa1.tmp““w“);
printf(“\n\n输出源文件及其各行对应的首地址:\n“);
fprintf(fa1“输出源文件及其各行对应的首地址:\n“);
init();                                          /*初始化*/
err=0;
cc=cx=ll=0;
ch=‘ ‘;
/*
//***************************************
//词法分析程序
getsym();
while(sym!=period)
{
printf(“%s  “symout[sym]);
if(sym==ident)
printf(“%s  “id);
else if(sym==number)
printf(“%d  “num);

getsym();
}
//******************************************
*/
if(-1!=getsym())
{

fa=fopen(“fa.tmp““w“);
fas=fopen(“fas.tmp““w“);
addset(nxtlevdeclbegsysstatbegsyssymnum);
nxtlev[period]=true;  

if(-1==block(00nxtlev)) //调用编译程序
{
fclose(fa);
fclose(fa1);
fclose(fas);
fclose(fin);
printf(“\n“);
return 0;
}
fclose(fa);
fclose(fa1);
fclose(fas);
if(sym!=period)
{
error(9);
}
if(err==0)
{
time_t timep; 
                struct tm *p;
char *wday[]={“Sun““Mon““Tue““Wed““Thu““Fri““Sat“};   
fa2=fopen(“fa2.tmp““w“);                   
                time(&timep); 
                p=gmtime(&timep); 
                printf(“开始解释执行目标代码时间: %d-%d-%d“(1900+p->tm_year) (1+p->tm_mon)p->tm_mday); 
                printf(“ %s %d:%d:%d\n“ wday[p->tm_wday] p->tm_hour p->tm_min p->tm_sec); 
interpret();
printf(“完成解释执行目标代码时间: %d-%d-%d“(1900+p->tm_year) (1+p->tm_mon)p->tm_mday); 
                printf(“ %s %d:%d:%d\n“ wday[

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        218  2009-01-06 17:44  编译原理课程设计\课程设计\测试代码\ARRAY.PL0

     文件         95  2011-01-08 23:58  编译原理课程设计\课程设计\测试代码\ELSE.PL0

     文件        187  2011-01-09 21:03  编译原理课程设计\课程设计\测试代码\fa.tmp

     文件        105  2011-01-09 21:03  编译原理课程设计\课程设计\测试代码\fa1.tmp

     文件         68  2011-01-09 21:03  编译原理课程设计\课程设计\测试代码\fa2.tmp

     文件         21  2011-01-09 21:03  编译原理课程设计\课程设计\测试代码\fas.tmp

     文件         60  2011-01-09 21:03  编译原理课程设计\课程设计\测试代码\FORDOWNTO.PL0

     文件         53  2011-01-09 20:58  编译原理课程设计\课程设计\测试代码\FORTO.PL0

     文件     233560  2011-01-09 20:58  编译原理课程设计\课程设计\测试代码\PL0.exe

     文件        111  2011-01-09 01:44  编译原理课程设计\课程设计\测试代码\REPEAT.PL0

     文件        114  2011-01-09 00:06  编译原理课程设计\课程设计\测试代码\YUNSUAN.PL0

     目录          0  2011-01-08 15:35  编译原理课程设计\课程设计\测试代码

     文件     233560  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\Debug\PL0.exe

     文件     294652  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\Debug\PL0.ilk

     文件      96596  2011-01-09 20:57  编译原理课程设计\课程设计\源程序\Debug\PL0.obj

     文件     255556  2011-01-08 23:55  编译原理课程设计\课程设计\源程序\Debug\PL0.pch

     文件     574464  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\Debug\PL0.pdb

     文件      41984  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\Debug\vc60.idb

     文件      53248  2011-01-09 20:57  编译原理课程设计\课程设计\源程序\Debug\vc60.pdb

     目录          0  2011-01-08 23:53  编译原理课程设计\课程设计\源程序\Debug

     文件      53598  2011-01-09 20:57  编译原理课程设计\课程设计\源程序\PL0.cpp

     文件       3365  2011-01-09 20:57  编译原理课程设计\课程设计\源程序\PL0.dsp

     文件        531  2011-01-09 22:08  编译原理课程设计\课程设计\源程序\PL0.dsw

     文件     233560  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\PL0.exe

     文件       7238  2011-01-09 21:11  编译原理课程设计\课程设计\源程序\pl0.h

     文件      41984  2011-01-09 01:23  编译原理课程设计\课程设计\源程序\PL0.ncb

     文件      48640  2011-01-09 22:08  编译原理课程设计\课程设计\源程序\PL0.opt

     文件        731  2011-01-09 20:58  编译原理课程设计\课程设计\源程序\PL0.plg

     目录          0  2011-03-18 13:32  编译原理课程设计\课程设计\源程序

     文件    2410496  2011-03-18 13:32  编译原理课程设计\课程设计\课程设计报告.doc

............此处省略5个文件信息

评论

共有 条评论