资源简介
一.课程设计目的
在分析理解一个教学型编译程序(如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个文件信息
相关资源
- 操作系统课程设计报告-多用户文件系
- 数字逻辑电路课程设计报告 课题:数
- 超市会员管理系统,课程设计,会员
- 编译原理课程设计源代码和超强报告
- 软件测试课程设计报告
- 数据库课程设计开题报告
- 单片机数字钟课程设计.zip
- 工厂供电课程设计_某机械厂降压变电
- 基于51单片机八路抢答器课程设计
- 计算机网络课程设计----模拟Ethernet帧
- 最新机械原理课程设计 牛头刨床
- 编译原理习题答案
- 操作系统课程设计,单索引文件系统
- 编译原理赋值语句的翻译
- 校园网规划与设计 课程设计
- 编译原理课件 北邮
- 广工操作系统实验报告文档+代码+可执
- 数据库课程设计—新生入学管理系统
- 数字集成电路课程设计 38译码器
- 计算机网络课程设计报告中小型网络
- 课程设计基于单片机的八路抢答器.
- EDA课程设计三人抢答器
- 汉诺塔课程设计
- 十进制加法器课程设计常规型微程序
- 单声道和双声道音频功率放大课程设
- 数电交通灯仿真课程设计
- 网络工程课程设计—企业部门网络规
- 北邮编译原理实验二:语法分析程序
- 网上图书管理系统struts2+hibernate的课程
- 西电 编译原理上级报告
评论
共有 条评论