www.pudn.com > pl0.zip > Table.cpp


// Table.cpp: implementation of the Table class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "Table.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
Table::Table(Simpsc *p) 
{ 
	pl=p; 
	lev=0; 
	tx[0]=0; 
} 
 
 
void Table::Enter(obj k,Word *Token) 
{ 
	 
	if (pl->gra->ReturnLevel()>lev) 
		tx[++lev]=tx[lev-1]; 
	else if (pl->gra->ReturnLevel()) 
		lev--; 
 
	tx[lev]++; 
	if (tx[lev]>=TABLE_MAX) return; 
	strcpy(table[tx[lev]].name,pl->gra->ReturnName(Token)); 
	table[tx[lev]].kind=k; 
	switch (k) 
	{ 
	case constant: 
		break; 
	case variable: 
		table[tx[lev]].level=pl->gra->ReturnLevel(); 
		table[tx[lev]].adr=pl->gra->ReturnAddr(); 
		break; 
	case procedure: 
		table[tx[lev]].level=pl->gra->ReturnLevel(); 
		break; 
	} 
} 
 
void Table::GetVal(int num) 
{ 
	table[tx[lev]].val=num; 
} 
 
int Table::ReturnIndex() 
{ 
	return tx[lev]; 
} 
 
int Table::Position(char *id) 
{ 
	int i=tx[lev]; 
	while (stricmp(table[i].name,id) && i>0) i--; 
	return i; 
}