⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pl0.h

📁 一个简单的词法分析程序. 可以将文件分析.
💻 H
字号:
#define norw 14
#define txmax 100
#define nmax 14
#define al 10
#define amax 2047
#define levmax 3
#define cxmax 200
/* enum{
	false
		true


}*/
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{
	enum fct f;
	int l;
	int a;
};
FILE * fas;
FILE * fa;
FILE * fa1;
FILE * fa2;
bool listswitch;
bool tableswitch;
char ch;
enum symbol sym;
char id[al+1];
int num;
int cc,ll;
int cx;
char line[81];
char a[al+1];
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 objict kind;
	int val;
	int level;
	int adr;
	int size;
};
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 * sl,bool * s2,int n);
int inset(int e,bool *s);
int addset(bool *sr,bool *sl,bool *s2,int n);
int subset(bool *sr,bool *sl,bool *s2,int n);
int mulset(bool *sr,bool *sl,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 * ptx,int lev,int * pdx);
int constdeclaration(int * ptx,int lev,int * pdx);
void position(char * idt,int tx);
void enter(enum object k,int * ptx,int lev,int * pdx);
int base(int l,int * s,int b);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -