CDN加速镜像 | 设为首页 | 加入收藏夹
当前位置: 首页 资源下载 源码下载 其它 编译器/词法分析

文件名称:pl/0

  • 所属分类:
  • 标签属性:
  • 上传时间:
    2010-09-13
  • 文件大小:
    24.55kb
  • 已下载:
    0次
  • 提 供 者:
  • 相关连接:
  • 下载说明:
    别用迅雷下载,失败请重下,重下不扣分!

介绍说明--下载内容来自于网络,使用问题请自行百度

         /*PL/0编译系统C版本头文件pl0.h*/
/*
typedef enum
{
  false,
  true
} bool;
*/
#define norw 13         /*关键字个数*/
#define txmax 100        /*名字表容量*/
#define nmax 14         /*number的最大位数*/
#define al 10          /*符号的最大长度*/  
#define amax 2047        /*地址上界*/
#define levmax 3        /*最大允许过程嵌套声明层数[0,levmax]*/
#define cxmax 200        /*最多的虚拟机代码数*/
/*符号*/
enum symbol{   
   nul,    ident,    number,     plus,     minus,
   times,   slash,    oddsym,     eql,     neq,
   lss,    leq,     gtr,      geq,     lparen,
   rparen,   comma,    semicolon,   period,    becomes,
   beginsym,  endsym,    ifsym,     thensym,   whilesym,
   writesym,  readsym,   dosym,     callsym,   constsym,
   varsym,   procsym,
};
#define symnum 32
/*名字表中的类型*/
enum object{
   constant,
   variable,
   procedur,
};
/*虚拟机代码*/
enum fct{
  lit,    opr,    lod,
  sto,    cal,    inte,
  jmp,    jpc,  
};
#define fctnum 8
/*虚拟机结构代码*/
struct instruction
{
/*454*/
  enum fct f;               // 虚拟机代码指令
  int l;                  //引用层与声明层的层次差
  int a;                  //根据f的不同而不同
};
FILE * fas;                 //输出名字表
FILE * fa;                  //输出虚拟机代码
FILE * fa1;                 //输出源文件及其各行对应的首地址
FILE * fa2;                 //输出结果
bool listswitch;               //显示虚拟机代码与否
bool tableswitch;              //显示名字与否
char ch;                   //获取字符的缓冲区,getch使用
enum symbol sym;               //当前的符号
char id[al+1];                //当前ident,多出的一个字节用于存放0
int num;                   //当前number
int cc,ll;                  //getch使用的计数器,cc表示当前字符(ch)的位置
int cx;                   //虚拟机代码指针,取值范围[0,cxmax-1]
char line[81];                //读取行缓冲区
char a[al+1];                //临时符号,多出的一个字节用于存放0
struct instruction code[cxmax];       //存放虚拟机代码的数组
char word[norw][al];             //保留字
enum symbol wsym[norw];           //保留字对应的符号值
enum symbol ssym[256];            //单字符的符号值
char mnemonic[fctnum][5];          //虚拟机代码指令名称
bool declbegsys[symnum];           //表示声明开始的符号集合
bool statbegsys[symnum];           //表示语句开始的符号集合
bool facbegsys[symnum];           //表示因子开始的符号集合
//名字表结构
struct tablestruct
{
  char name[al];              //名字
  enum object kind;            //类型:const,var,array or procedure
  int val;                 //数值,仅const使用
  int level;                //所须层,仅const不能用
  int adr;                 //地址,仅const不能用
  int size;                //需要分配的数据空间,仅procedure使用
};
struct tablestruct table[txmax];      //名字表
FILE * fin;
FILE * fout;
char fname[al];
int err;                  //错误计数器

//当函数中发生fatal error时,返回-1告知调用它的函数,最终退出程序

#define getsymdo                if(-1==getsym()) return -1
#define getchdo                if(-1==getch()) return -1
#define testdo(a,b,c)             if(-1==test(a,b,c)) return -1
#define gendo(a,b,c)              if(-1==gen(a,b,c)) return -1
#define expressiondo(a,b,c)          if(-1==expression(a,b,c)) return -1
#define factordo(a,b,c)            if(-1==factor(a,b,c)) return -1
#define termdo(a,b,c)             if(-1==term(a,b,c)) return -1
#define conditiondo(a,b,c)           if(-1==condition(a,b,c)) return -1
#define statementdo(a,b,c)           if(-1==statement(a,b,c)) return -1
#define constdeclarationdo(a,b,c)       if(-1==constdeclaration(a,b,c)) return -1
#define vardeclarationdo(a,b,c)        if(-1==vardeclaration(a,b,c)) return -1

void error(int n);
int getsym();
int getch();
void init();
int gen(enum fct x,int y ,int z);
int test(bool *s1,bool *s2,int n);
int inset(int e,bool *s);
int addset(bool *str,bool * s1,bool * s2,int n);
int subset(bool *str,bool * s1,bool * s2,int n);
int mulset(bool *str,bool * s1,bool * s2,int n);
int block(int lev,int tx,bool * fsys);
void interpret();
int factor(bool * fsys,int * ptx,int lev);
int term(bool * fsys,int * ptx,int lev);
int condition(bool * fsys,int * ptx,int lev);
int expression(bool * fsys,int * ptx,int lev);
int statement(bool * fsys,int * ptx,int lev);
void listcode(int cx0);
int vardeclaration(int *ptr, int lev,int *ptx);
int constdeclaration(int *ptr, int lev,int *ptx);
int position(char * idt,int tx);
void enter(enum object k,int * ptx,int lev, int * pdx);
int base(int l,int * s,int b)

(系统自动生成,下载前可以参看下载内容)

下载文件列表

压缩包 : pl0 c版本.rar 列表
pl0 c版本\pl0.cpp.doc
pl0 c版本\PL0.h.doc
pl0 c版本

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 搜珍网是交换下载平台,只提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。更多...
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或换浏览器;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.

相关评论

暂无评论内容.

发表评论

*快速评论: 推荐 一般 有密码 和说明不符 不是源码或资料 文件不全 不能解压 纯粹是垃圾
*内  容:
*验 证 码:
搜珍网 www.dssz.com