|
关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码(5) find_eol(); do { get_token(); if (token_type==NUMBER) { addr = get_next_label(token); if (addr==-1addr==-2) { (addr==-1) ? serror(5):serror(6); } strcpy (label_table[addr].name,token); label_table[addr].p = prog; /* current point in program */ } /* if not on a blank line , find next line */ if (tok!=EOL) find_eol(); } while (tok!=FINISHED); prog = temp; /* restore to original */ } /* find the start of next line */ void find_eol() { while (*prog!='\n'&&*prog!='\0') ++prog; if (*prog) prog++; }
/* return index of next free posion in the label array -1 is returned if the array is full. -2 is returned when duplicate label is found. */ get_next_label(char *s) { register int t;
for (t=0;t<NUM_LAB;++t) { if (label_table[t].name[0]==0) return t; if (!strcmp(label_table[t].name,s)) return -2; /* dup */ } return -1;
|