|
关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码(2) "goto",GOTO, "for",FOR, "next",NEXT, "to",TO, "gosub",GOSUB, "return",RETURN, "end",END, NULL,END }; char token[80]; char token_type,tok; struct label { char name [LAB_LEN]; char *p; /* point to place to go in source */ }; struct label label_table[NUM_LAB]; char *find_label(),*gpop(); struct for_stack { int var; /* counter variable */ int target; /* target value */ char *loc; } fstack[FOR_NEST]; /* stack for FOR/NEXT loop */ struct for_stack fpop(); char *gstack[SUB_NEST]; /* stack for gosub */ int ftos; /* index to top of FOR stack */ int gtos; /* index to top of GOSUB */ void print(),scan_labels(),find_eol(),exec_goto(); void gosub(),greturn(),gpush(),label_init(),fpush(); /* Load a program */ load_program (char *p,char *fname) { FILE *fp; int i=0; if (!(fp=fopen(fname,"rb"))) return 0; i=0; do { *p = getc(fp); p++;i++; } while (!feof(fp)&&i<PROG_SIZE); *(p-2) = '\0'; /* null terminate the program */ fclose (fp); return 1; } /* assign a variable a value */ assignment() { int var,value;
/* getthe variable name */ get_token(); if (!isalpha(*token)) { serror(4);
|