资源简介
一.课程设计目的
在分析理解一个教学型编译程序(如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个文件信息
相关资源
- FTP课程设计(服务端+客户端)
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 高频电子线路课程设计报告收音机
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 端口扫描课程设计详细的报告
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 分页系统模拟实验 操作系统 课程设
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 模拟段页式虚拟存储管理中地址转换
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
- 航空订票系统_数据结构课程设计
- c 课程设计 职工信息管理系统
- 广工操作系统实验
- 汇编语言,课程设计,红绿灯
- 机床液压系统课程设计卧式钻床动力
- 课程设计蔬菜大棚自动控制系统,包
- 密码学课程设计:DES加密解密算法的
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
评论
共有 条评论