资源简介
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
相关资源
- 《编译原理》清华大学版中的pl0扩充
- Dibrugarh地区牛场土壤中潜在的益生菌
- 使用分离的光子标记射流观察sNN = 5
- 超滤膜分离技术在维生素B12生产中的
- 枸杞低聚糖的分离与结构鉴定
- 霹雳萝芙木中生物碱的分离和结构鉴
- 家蚕天然膜蛋白PRMC2的分离纯化
- 家蚕天然膜蛋白Bmb019518的分离纯化
- VSP波场分离的径向中值滤波方法
- springBoot+security+oauth2 资源和认证分离
- 推广的Tanh函数方法与形式分离变量法
- G-code-Interpreter,G代码解释器
- 爱旅行项目源码
- 基于yml 配置方式 ,实现springBoot+sha
- 论文研究 - EPRB实验的“纠缠&rdqu
- 论文研究 - RNA-Seq和散装分离基因分析
- 论文研究 - 评估新分离物的产油潜力
- 论文研究 - 分离的微藻菌株对城市河
- 禽畜粪便堆肥中优势菌株的分离及其
- 旋风分离器流场数值模拟及其涡结构
- 用SHPB径向冲击边裂纹平台圆环(ECF
- 论文研究 - 从自然水生环境中分离出
- 分离混合声音的ICA程序
- 应用电分离再生的溶液除湿空调系统
- 论文研究 - 肥育猪场板条下的平皮带
- 固液分离—氨吹脱—生物接触氧
- 旋风分离器出口边界条件对其流场模
- “垂向异重流式水沙分离鳃&rdquo
- β-SiC微粉过滤分级实验研究
- Redis哨兵模式sentinel学习总结及部署记
评论
共有 条评论