资源简介
扩展了一些功能,++,--,*=,/=,取反,取余,一维数组,for循环,while循环,write包含换行,可以输出文本等功能,里面有具体的测试例子
代码片段和文件信息
/*带详细注释的C语言版本PL/0编译程序
*编译和运行环境:
*1Visual C++6.0VisualC++.NET and Visual C++.NET 2003
*WinNT Win2000 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“pl0.h“
#include“string.h“
/*解释执行时使用的栈*/
#define stacksize 500
char WORDS[200][20]; //用于记录文本最多200条
int W=0; //用来记录文本的个数
int CXb=300; //用来break跳转
int CXc=400; //用来continue跳转
int I=1000; //a:=++b; 用来保存a在字母表的位置
int Ia=1000; //同上,用来临时保存
int main()
{
bool nxtlev[symnum];
printf(“Input pl/0 file ?“);
scanf(“%s“fname); /*输入文件名*/
fin=fopen(fname“r“);
if(fin)
{
printf(“List object code ?(Y/N)“); /*是否输出虚拟机代码*/
scanf(“%s“fname);
listswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
printf(“List symbol table ? (Y/N)“); /*是否输出名字表*/
scanf(“%s“fname);
tableswitch=(fname[0]==‘y‘||fname[0]==‘Y‘);
fa1=fopen(“fa1.tmp““w“);
fprintf(fa1“Iput pl/0 file ?“);
fprintf(fa1“%s\n“ fname);
init(); /*初始化*/
err=0;
cc=cx=ll=0;
ch=‘ ‘;
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)
{
fa2=fopen(“fa2.tmp“ “w“);
interpret();
fclose(fa2);
}
else
{
printf(“Errors in pl/0 program“);
}
}
fclose(fin);
}
else
{
printf(“Can‘t open file! \n“);
}
printf(“\n“);
//printf(“%s“WORDS);
return 0;
}
/*
*初始化
*/
void init()
{
int i;
for(i=0;i<=255;i++)
{
ssym[i]=nul;
}
ssym[‘+‘]=plus;
ssym[‘-‘]=minus;
ssym[‘*‘]=times;
ssym[‘/‘]=slash;
ssym[‘(‘]=lparen;
ssym[‘)‘]=rparen;
ssym[‘=‘]=eql;
ssym[‘‘]=comma;
ssym[‘.‘]=period;
ssym[‘#‘]=neq;
ssym[‘;‘]=semicolon;
ssym[‘%‘]=percent; ///////////// 取余
ssym[‘~‘]=not; ///////////// 取反
ssym[‘“‘]=words; ///////////// 文本
/*设置保留字名字按照字母顺序便于折半查找*/
strcpy(&(word[0][0])“begin“);
strcpy(&(word[1][0])“break“);
strcpy(&(word[2][0])“call“);
strcpy(&(word[3][0])“const“);
strcpy(&(word[4][0])“continue“);
strcpy(&(word[5][0])“do“);
strcpy(&(word[6][0])“else“); //增加else
strcpy(&(word[7][0])“end“);
strcpy(&(word[8][0])“for“); //增加for
strcpy(&(word[9][0])“if“);
strcpy(&(word[10][0])“odd“);
strcpy(&(word[11][0])“procedure“);
strcpy(&(word[12][0])“read“);
strcpy(&(word[13][0])“sqrt“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-11 00:05 pl0\
目录 0 2019-01-10 11:41 pl0\Debug\
文件 66 2014-01-03 09:10 pl0\Debug\fa.tmp
文件 130 2014-01-03 09:10 pl0\Debug\fa1.tmp
文件 91 2014-01-03 09:10 pl0\Debug\fas.tmp
文件 217165 2019-01-10 11:10 pl0\Debug\pl0.exe
文件 865788 2019-01-10 11:10 pl0\Debug\pl0.ilk
文件 76478 2019-01-10 11:10 pl0\Debug\pl0.obj
文件 230184 2019-01-10 11:10 pl0\Debug\pl0.pch
文件 558080 2019-01-10 11:10 pl0\Debug\pl0.pdb
文件 164864 2019-01-10 11:11 pl0\Debug\vc60.idb
文件 86016 2019-01-10 11:10 pl0\Debug\vc60.pdb
文件 0 2019-01-10 11:11 pl0\fa.tmp
文件 410 2019-01-10 11:11 pl0\fa1.tmp
文件 21 2019-01-10 11:11 pl0\fa2.tmp
文件 0 2019-01-10 11:11 pl0\fas.tmp
文件 61719 2019-01-10 11:10 pl0\pl0.cpp
文件 3365 2019-01-10 11:10 pl0\pl0.dsp
文件 531 2019-01-10 11:41 pl0\pl0.dsw
文件 4959 2019-01-09 22:30 pl0\pl0.h
文件 17920 2019-01-09 22:18 pl0\pl0.h.doc
文件 66560 2019-01-10 11:41 pl0\pl0.ncb
文件 48640 2019-01-10 11:41 pl0\pl0.opt
文件 731 2019-01-10 11:10 pl0\pl0.plg
文件 529 2007-11-23 15:47 pl0\pl0.txt
文件 29713 2018-11-24 15:03 pl0\pl0源程序.docx
文件 516 2007-11-26 12:40 pl0\Test.cpp
文件 237 2007-09-28 14:04 pl0\test.txt
文件 759 2019-01-09 22:30 pl0\test0.txt
文件 180 2019-01-08 21:16 pl0\test1.txt
文件 178 2019-01-10 23:07 pl0\testchengdeng.txt
............此处省略14个文件信息
- 上一篇:PCB Logo Creator.zip
- 下一篇:Cimatron完美后处理
相关资源
- 编译原理课后练习习题
- 编译原理考点,编译原理考点整理。
- 2018燕山大学软件工程编译原理
- 编译原理实验-计算器-完成品
- 编译原理实验 C0编译器的 设计与实现
- 编译原理陈火旺第三版课后练习答案
- 北邮编译原理课程设计
- 西农编译原理实习报告
- 广工2015编译原理实验报告
- 程序设计语言编译原理第三版-成火旺
- 华中科技大学编译原理实验yacc源码
- 编译原理识别活缀的DFA
- 编译原理实验 计算器 语法树 逆波兰
- FOR循环语句的翻译LR,输出三地址
- 编译原理实验指导含源代码
- 编译原理实验报告完整版词法语法语
- 编译原理及实现课后答案
- 《编译原理第二版》龙书部分习题答
- 合工大 编译原理课程设计 LR(1)
- PL0语言编译器分析实验报告
- 编译原理课后第十章答案
- 编译原理课后习题全部答案(陈火旺
- 《编译原理》蒋立源课后答案
- zw_编译原理-龙书答案.zip
- 科技大学 编译原理 华保健 全86讲
- 程序设计语言-编译原理第三版 课后习
- 程序设计语言编译原理(陈火旺第3版
- 西安交通大学 编译原理 冯博琴教授
- 编译原理第三版课后习题答案
- 杭电编译原理实验报告
评论
共有 条评论