📄 symtbl.cpp
字号:
}/*end printSymTbl*/
/*-----------------------------------------------------------------*/
void SymbolTable::printGlobVar(struct GlobalVariable *ptr)
{
printf("GLOBAL VAR--------------\n");
printf("identifier=%s\n",&((*strTbl).text[(*ptr).text]));
printf("data type=%s\n",globSz[(*ptr).dType]);
printf("length="); pU8((*ptr).len); printf("\n");
printf("size="); pU8((*ptr).size); printf("\n");
printf("offset="); pS8(-((S8)(*ptr).offset)); printf("\n");
printf("line=%lu\n",(*ptr).line);
return;
}/*end printGlobVar*/
/*-----------------------------------------------------------------*/
void SymbolTable::printProc(struct Procedure *ptr)
{
U4 i;
printf("PROC--------------------\n");
printf("identifier=%s\n",&((*strTbl).text[(*ptr).text]));
printf("address="); pU8((*ptr).address); printf("\n");
printf("line=%lu\n\n",(*ptr).line);
if((*ptr).nRet)
{
printf("RET\n");
printf("\tid=%s\n",&((*strTbl).text[((*ptr).ret).text]));
printf("\tfpOffset=%ld\n",((*ptr).ret).fpOffset);
printf("\tline=%lu\n",((*ptr).ret).line);
}
printf("ARGS\n");
for(i=0;i<(*ptr).iArg;i++)
{
printf("\t%d)",i);
printf("id=%s\n",&((*strTbl).text[((*ptr).arg[i]).text]));
printf("\tfpOffset=%ld\n",((*ptr).arg[i]).fpOffset);
printf("\tline=%lu\n",((*ptr).arg[i]).line);
}
printf("LOCALS\n");
for(i=0;i<(*ptr).iLocal;i++)
{
printf("\t%d)",i);
printf("id=%s\n",&((*strTbl).text[((*ptr).local[i]).text]));
printf("\tfpOffset=%ld\n",((*ptr).local[i]).fpOffset);
printf("\tline=%lu\n",((*ptr).local[i]).line);
}
printf("LABELS\n");
for(i=0;i<(*ptr).iLabel;i++)
{
printf("\t%d)",i);
printf("id=%s\n",&((*strTbl).text[((*ptr).label[i]).text]));
printf("\taddress=");
pU8(((*ptr).label[i]).address);
printf("\n");
printf("\tline=%lu\n",((*ptr).label[i]).line);
}
return;
}/*end printProc*/
/*-----------------------------------------------------------------*/
void SymbolTable::test()
{
U8 str_index;
char name[32];
struct GlobalVariable globvar;
struct Procedure proc;
struct StackFrame sf;
struct Label label;
strcpy(name,"gVar_1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
globvar.text=str_index;
globvar.dType=1;
globvar.len=globvar.size=globvar.offset=globvar.line=0;
addGlobVar(&globvar);
strcpy(name,"gVar_2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
globvar.text=str_index;
globvar.dType=1;
globvar.len=globvar.size=globvar.offset=globvar.line=0;
addGlobVar(&globvar);
strcpy(name,"gVar_3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
globvar.text=str_index;
globvar.dType=1;
globvar.len=globvar.size=globvar.offset=globvar.line=0;
addGlobVar(&globvar);
strcpy(name,"gVar_4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
globvar.text=str_index;
globvar.dType=1;
globvar.len=globvar.size=globvar.offset=globvar.line=0;
addGlobVar(&globvar);
strcpy(name,"gVar_5");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
globvar.text=str_index;
globvar.dType=1;
globvar.len=globvar.size=globvar.offset=globvar.line=0;
addGlobVar(&globvar);
/*add 4 procedures*/
strcpy(name,"proc1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
proc.text=str_index;
proc.address = proc.line = 0;
addProc(&proc);
strcpy(name,"proc1_ret");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
setProcRetHL(&sf);
strcpy(name,"proc1_arg1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc1_arg2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc1_arg3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc1_arg4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc1_loc1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc1_loc2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc1_loc3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc1_loc4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc1_lbl1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc1_lbl2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc1_lbl3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc1_lbl4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
proc.text=str_index;
proc.address = proc.line = 0;
addProc(&proc);
strcpy(name,"proc2_ret");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
setProcRetHL(&sf);
strcpy(name,"proc2_arg1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc2_arg2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc2_arg3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc2_arg4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc2_loc1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc2_loc2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc2_loc3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc2_loc4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc2_lbl1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc2_lbl2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc2_lbl3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc2_lbl4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
proc.text=str_index;
proc.address = proc.line = 0;
addProc(&proc);
strcpy(name,"proc3_ret");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
setProcRetHL(&sf);
strcpy(name,"proc3_arg1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc3_arg2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc3_arg3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc3_arg4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc3_loc1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc3_loc2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc3_loc3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc3_loc4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc3_lbl1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc3_lbl2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc3_lbl3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc3_lbl4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
proc.text=str_index;
proc.address = proc.line = 0;
addProc(&proc);
strcpy(name,"proc4_ret");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
setProcRetHL(&sf);
strcpy(name,"proc4_arg1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc4_arg2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc4_arg3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc4_arg4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcArgHL(&sf);
strcpy(name,"proc4_loc1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc4_loc2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc4_loc3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc4_loc4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
sf.text = str_index;
sf.fpOffset = sf.line =0;
addProcLocHL(&sf);
strcpy(name,"proc4_lbl1");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc4_lbl2");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc4_lbl3");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
strcpy(name,"proc4_lbl4");
str_index = (*strTbl).iStr;
(*strTbl).addStrTbl(name);
label.text = str_index;
label.address = label.line =0;
addProcLblHL(&label);
printSymTbl();
(*strTbl).printStrTbl();
return;
}/*end test*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -