资源简介
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增加添加对布尔bool类型的支持处理
- 气压高度计SPL06封装
- 编译原理讨论课PPTpl0编译器源程序讲
- 编译原理课程设计_pl0扩展
- shellcode 执行盒
- pid算法,积分分离,抗积饱和
- 一种新的联合块对角化卷积盲分离时
- opencv实现背景分离
- linux 命令解释器
- NC代码解释器
- swagger前后端分离开发.zip
- pl0语言扩充源代码
- 北航编译原理课程设计PL0文法代码及
- 解释器+编译器+Lua库+头文件(Lua 5.0
- 若依前后端分离项目部署文档.docx
- 简单代码解释器
- 信号的盲分离 完整的报告加程序
- springboot集成jwt和shiro实现前后端分离
- ssm+maven整合,前后端分离技术完整源
- 2018尚硅谷电商项目前后端分离视频教
- 盲信号处理中的盲源分离经典FASTICA算
- 编译原理三级项目pl0扩展
- 在Linux环境下模拟实现简单命令解释器
- lua5.3解释器
- 基于NodeJS+Express+mongoDB+Bootstrap的全栈式
- vue+springboot前后端分离项目源码
- 基于稀疏变量的欠定盲源分离
- PL0C.rar
- 前后端分离的SSM项目教程
- 利用联合对角化技术进行信号盲分离
评论
共有 条评论