资源简介

pl0解释器的分离实现代码程序,献给编译的朋友,也献给为作业而烦恼的朋友,解压以后就可以运行。

资源截图

代码片段和文件信息

// pl0 compiler source code

#include 
#include 
#include 
#include 
#include “set.h“
#include “pl0.h“


//////////////////////////////////////////////////////////////////////
int dx;  // data allocation index

int chuandaoshu(char *p)
{
int i=0;
for (i=0;i<=7;i++)
{
if(p==cod[i])
return 0;
else if(p==cod[i])
return 1;
else if(p==cod[i])
return 2;
else if(p==cod[i])
return 3;
else if(p==cod[i])
return 4;
else if(p==cod[i])
return 5;
else if(p==cod[i])
return 6;
else if(p==cod[i])
return 7;
else return -1;
}

}


int base(int stack[] int currentLevel int levelDiff)////////////////////////////////////////////////
{
int b = currentLevel;

while (levelDiff--)
b = stack[b];
return b;
} // base

//////////////////////////////////////////////////////////////////////
// interprets and executes codes.
void interpret()
{
int pc;        // program counter
int stack[STACKSIZE];
int top;       // top of stack
int b;         // program base and top-stack register
instruction i; // instruction register

printf(“开始PL/0 程序.\n“);
fprintf(outfile “开始PL/0 程序.\n“);

pc = 0;
b = 1;
top = 3;
stack[1] = stack[2] = stack[3] = 0;
do
{
i = code[pc++];
switch (i.f)
{
case LIT:
stack[++top] = i.a;
break;
case OPR:
switch (i.a) // operator
{
case OPR_RET:
top = b - 1;
pc = stack[top + 3];
b = stack[top + 2];
break;
case OPR_NEG:
stack[top] = -stack[top];
break;
case OPR_ADD:
top--;
stack[top] += stack[top + 1];
break;
case OPR_MIN:
top--;
stack[top] -= stack[top + 1];
break;
case OPR_MUL:
top--;
stack[top] *= stack[top + 1];
break;
case OPR_DIV:
top--;
if (stack[top + 1] == 0)
{
fprintf(stderr “Runtime Error: Divided by zero.\n“);
fprintf(stderr “Program terminated.\n“);
continue;
}
stack[top] /= stack[top + 1];
break;
case OPR_ODD:
stack[top] %= 2;
break;
case OPR_EQU:
top--;
stack[top] = stack[top] == stack[top + 1];
break;
case OPR_NEQ:
top--;
stack[top] = stack[top] != stack[top + 1];
case OPR_LES:
top--;
stack[top] = stack[top] < stack[top + 1];
break;
case OPR_GEQ:
top--;
stack[top] = stack[top] >= stack[top + 1];
case OPR_GTR:
top--;
stack[top] = stack[top] > stack[top + 1];
break;
case OPR_LEQ:
top--;
stack[top] = stack[top] <= stack[top + 1];
} // switch
break;
case LOD:
stack[++top] = stack[base(stack b i.l) + i.a];
break;
case STO:
stack[base(stack b i.l) + i.a] = stack[top];
printf(“%d\n“ stack[top]);
fprintf(outfile “%d\n“ stack[top]);
top--;
break;
case CAL:
stack[top + 1] = base(stack b i.l);
// generate new block mark
stack[top + 2] = b;
stack[top + 3] = pc;
b = top + 1;
pc = i.a;
break;
case INT:
top += i.a;
break;
case JMP:

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-07-12 15:15  pl0分离解释器的实现\
     目录           0  2012-07-10 17:10  pl0分离解释器的实现\Debug\
     文件          33  2012-07-11 14:03  pl0分离解释器的实现\Debug\hbin.out
     文件         336  2012-07-10 14:49  pl0分离解释器的实现\Debug\hbin.txt
     文件      204885  2012-07-10 17:11  pl0分离解释器的实现\Debug\pl0.exe
     文件      236308  2012-07-10 17:11  pl0分离解释器的实现\Debug\pl0.ilk
     文件       22827  2012-07-10 17:11  pl0分离解释器的实现\Debug\pl0.obj
     文件      217308  2012-07-10 17:10  pl0分离解释器的实现\Debug\pl0.pch
     文件      541696  2012-07-10 17:11  pl0分离解释器的实现\Debug\pl0.pdb
     文件        5953  2004-08-27 22:19  pl0分离解释器的实现\Debug\set.obj
     文件        1641  2004-08-27 22:30  pl0分离解释器的实现\Debug\test.out
     文件         233  2004-08-27 22:25  pl0分离解释器的实现\Debug\test.pl0
     文件           0  2004-08-27 22:21  pl0分离解释器的实现\Debug\test.pl0.bak
     文件       41984  2012-07-11 14:02  pl0分离解释器的实现\Debug\vc60.idb
     文件       53248  2012-07-10 17:11  pl0分离解释器的实现\Debug\vc60.pdb
     文件        4389  2012-07-10 17:11  pl0分离解释器的实现\pl0.c
     文件        4420  2004-08-27 22:34  pl0分离解释器的实现\pl0.dsp
     文件         529  2004-08-27 22:34  pl0分离解释器的实现\pl0.dsw
     文件        5034  2012-07-10 17:10  pl0分离解释器的实现\pl0.h
     文件       58368  2012-07-11 14:03  pl0分离解释器的实现\pl0.ncb
     文件       48640  2012-07-11 14:03  pl0分离解释器的实现\pl0.opt
     文件        1424  2012-07-10 17:11  pl0分离解释器的实现\pl0.plg
     文件        1893  2002-02-28 16:15  pl0分离解释器的实现\set.c
     文件         430  2012-07-09 16:20  pl0分离解释器的实现\set.h
     文件          56  2012-07-12 15:17  pl0分离解释器的实现\帮助文档.txt

评论

共有 条评论