资源简介
仿照Pascal语言,对pl0编译程序(清华大学书后源码)进行以下简单扩展——
不等号:
指针: & @
if - else
for
++ -- += -=
数组
程序还有多不足,希望和大家共同学习!!
代码片段和文件信息
//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 cc
*fa1.tmp 输出源文件及其各行对应的首地址
*fa2.tmp 输出结果
*fas.tmp 输出名字表
*/
#include
#include“pl0.h“
#include“string.h“
/*解释执行时使用的栈*/
int main()
{
bool nxtlev[symnum];
printf(“Input pl/0 file ?“);
scanf(“%s“fname); /*输入文件名*/
fin=fopen(fname“r“);
if(fin) //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; //cc是getchar使用的计数器,表示当前字符ch的位置;cx:虚拟机代码指针
ch=‘ ‘; //漏掉空格,读取一个字符
if(-1!=getsym())
{
fa=fopen(“fa.tmp““w“); //输出虚拟机代码
fas=fopen(“fas.tmp““w“); //输出名字表
addset(nxtlevdeclbegsysstatbegsyssymnum);
nxtlev[period]=true; //period 句号的意思
if(-1==block(00nxtlev)) /*调用编译程序*/
{
fclose(fa);
fclose(fa1);
fclose(fas); //除了fa2输出结果没关
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“);
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[‘[‘]=lmparen; //新
ssym[‘]‘]=rmparen; //新
ssym[‘=‘]=eql;
ssym[‘‘]=comma;
ssym[‘.‘]=period;
ssym[‘;‘]=semicolon;
ssym[‘&‘]=radsym; //新
ssym[‘@‘]=padsym; //新
/*设置保留字名字按照字母顺序便于折半查找*/
strcpy(&(word[0][0])“begin“);
strcpy(&(word[1][0])“call“);
strcpy(&(word[2][0])“const“);
strcpy(&(word[3][0])“do“);
strcpy(&(word[4][0])“downto“); //新
strcpy(&(word[5][0])“else“); //新
strcpy(&(word[
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 151 2010-06-09 14:15 郑博涵070104010056\++--.txt
文件 141 2010-06-19 14:07 郑博涵070104010056\array_basic.txt
文件 172 2010-06-09 14:45 郑博涵070104010056\array_mul.txt
文件 213043 2010-07-03 10:21 郑博涵070104010056\Debug\PL0.exe
文件 210996 2010-07-03 10:21 郑博涵070104010056\Debug\PL0.ilk
文件 65307 2010-07-03 10:21 郑博涵070104010056\Debug\PL0.obj
文件 224512 2010-07-03 10:21 郑博涵070104010056\Debug\PL0.pch
文件 410624 2010-07-03 10:21 郑博涵070104010056\Debug\PL0.pdb
文件 33792 2010-07-03 10:28 郑博涵070104010056\Debug\vc60.idb
文件 53248 2010-07-03 10:21 郑博涵070104010056\Debug\vc60.pdb
文件 84 2007-01-04 11:46 郑博涵070104010056\else_and_notequal.txt
文件 106 2010-06-19 23:02 郑博涵070104010056\expand_=.txt
文件 0 2010-07-03 10:29 郑博涵070104010056\fa.tmp
文件 157 2010-07-03 10:29 郑博涵070104010056\fa1.tmp
文件 30 2010-07-03 10:29 郑博涵070104010056\fa2.tmp
文件 0 2010-07-03 10:29 郑博涵070104010056\fas.tmp
文件 107 2010-06-09 00:02 郑博涵070104010056\for_array.txt
文件 267 2006-12-11 11:23 郑博涵070104010056\lxm.PL0
文件 53002 2010-07-03 10:19 郑博涵070104010056\PL0.cpp
文件 3365 2006-12-14 01:56 郑博涵070104010056\PL0.dsp
文件 529 2006-12-11 11:30 郑博涵070104010056\PL0.dsw
文件 5354 2010-06-19 17:13 郑博涵070104010056\pl0.h
文件 91136 2010-07-03 10:30 郑博涵070104010056\PL0.ncb
文件 48640 2010-07-03 10:30 郑博涵070104010056\PL0.opt
文件 1098 2010-07-03 10:21 郑博涵070104010056\PL0.plg
文件 562 2006-12-11 10:52 郑博涵070104010056\PL0.sln
文件 3938 2006-12-11 09:15 郑博涵070104010056\PL0.vcproj
文件 62 2010-06-10 16:38 郑博涵070104010056\point_basic.txt
文件 131072 2006-12-11 09:13 郑博涵070104010056\Project1.tds
文件 475 2010-06-19 23:03 郑博涵070104010056\测试程序说明.txt
............此处省略5个文件信息
相关资源
- pl0语言扩充源代码
- 北航编译原理课程设计PL0文法代码及
- 编译原理三级项目pl0扩展
- PL0C.rar
- PL0语言编译器分析实验报告
- 气压计IIC模式驱动SPL06.rar
- pl0语法分析器(编译原理实验)
- 山东大学编译原理pl0实验
- PL0语法分析器(递归子程序法).doc
- 编译原理课程设计,PL0程序代码和报
- SPL06-001_datasheet_V2.0
- 编译原理课程设计-PL0编译程序
- PL0(包括对其的扩充)
- 增强版的pl0编译器,支持for循环及b
- 编译原理PL0功能扩充
- PL0语言编译程序分析和详细注释(P
- pl0词法语法分析器
- 编译原理-PL0-实验报告
- 编译原理实验-简单的PL0编译器
- 编译原理课设和实验:PL0编译器扩充
- pl0语言 添加注释
评论
共有 条评论