c语言做的pl0编译器

源代码在线查看: table.cpp

软件大小: 32 K
上传用户: tiantianyuehui
关键词: pl0 c语言 编译器
下载地址: 免注册下载 普通下载 VIP

相关代码

				// table.cpp: implementation of the table class.
				//////////////////////////////////////////////////////////////////////
				#include 
				#include "cifa.h"
				#include "table.h"
				#include "yufa.h"
				
				Ctable::Ctable(CPlCompiler *p)
				{
					pl=p;
					lev=0;
					tx[0]=0;
					table[0].name[0]=0;
				}
				//开始登陆
				void Ctable::Enter(enum object k)
				{
					if (pl->yufa->Level()>lev)
						tx[++lev]=tx[lev-1];
					else if (pl->yufa->Level()						lev--;
					tx[lev]++;
					if (tx[lev]>=TABLE_SIZE) return;
					strcpy(table[tx[lev]].name,pl->cifa->id);
					table[tx[lev]].kind=k;
					switch (k)
					{
					case constant:                             //如果是常量名
						table[tx[lev]].val=pl->cifa->num;
						break;
					case variable:                             //如果是变量名
						table[tx[lev]].level=pl->yufa->Level();//记下它所属的层次号
						table[tx[lev]].adr=pl->yufa->DataAddr();
						break;
					case procedure:                            //如果要登陆的是过程名
						table[tx[lev]].level=pl->yufa->Level();
						break;
					}
				}
				int Ctable::Position(char *id)
				{
					int i=tx[lev];
					while (stricmp(table[i].name,id) && i>0) i--;
					return i;
				}			

相关资源