• 大小: 253KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: pl0  

资源简介

仿照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个文件信息

评论

共有 条评论