|
关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码(9) get_token(); if (*token != ',') serror(1); get_token(); } else printf ("? "); /* otherwise, prompt with / */ var = toupper(*token) - 'A'; /* get the input var */ scanf ("%d",&i); /* read input */ variables[var] = i; /* store it */ } /* execute a GOSUB command */ void gosub() { char *loc;
get_token(); /* find the label to call */ loc = find_label(token); if (loc=='\0') serror(7); /* label not defined */ else { gpush(prog); /* save place to return to */ prog = loc; /* start program running at that loc */ } } /* return from GOSUB */ void greturn() { prog = gpop(); }
/* GOSUB stack push function */ void gpush(char *s) { gtos++;
if (gtos==SUB_NEST) { serror(12); return; } gstack[gtos] = s; } /* GOSUB stack pop function */ char *gpop() { if (gtos==0) { serror(13); return 0; } return gstack[gtos--]; }
main (int argc,char *argv[]) { char in[80]; int answer; char *p_buf;
|