/* 编译和运行环境
* Visual C++6.0,Visual C++.net and Visual C++.net 2003
* WinNT,Win2000,WinXP and Win2003
* 2gcc version 3.3.2 20031022(Red Hat Linux 3.3.2-1)
* Redhat Fedora core 1
* intel 32 platform
* 使用方法:
* 运行后输入 pl/0 源程序文件名称
* 回答是否输出虚拟机代码
* 回答是否输出名字表
* fa.tmp 输出虚拟机代码
* fa1.tmp 输出源文件及其各行对应的首地址
* fa2.tmp 输出结果
* fas.tmp 输出名字表
*/
#include<stdio.h>
#include <stdbool.h>
#include"pl0.h"
#include"string.h"
//解释执行时使用的栈
#define stacksize 500
int main()
{
bool nxtlev[symnum];
printf("Input pl/0 file?");
scanf("%s",fname); //输入文
件名
fin=fopen(fname,"r");
if(fin)
{
printf("List object code ?(N/Y)"); //是否输
出虚拟机代码
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,"Input pl/0 file?");
fprintf(fa1,"%s",fname);
init(); //初始化
评论0