else if (ch=='-') { } getchdo; if (ch=='-') // 自减检测 { } else { } sym = minus; sym=mminus; getchdo; 1.3 修改init(),增加以下语句 void init() { ... ssym['&']=andsym; ... } ssym['!']=neq; 1.4 修改init()增加保留字识别 strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\strcpy(&(word[i++][0]),\ i = 0; /*设置保留字符号*/ wsym[i++]=dosym; wsym[i++]=downtosym; wsym[i++] =elsesym; wsym[i++]=forsym; wsym[i++]=returnsym; wsym[i++]=thensym; wsym[i++]=tosym; 1.5 修改单词总数symnum,加2 #define NumOfKeywork 21 //21是完成时的状态 (2)修改单词:不等号# 改为 <>
2.1 修改getsym(),识别<> getsym() { ...
else if(ch=='<')
{ }
getchdo;
if(ch=='=') //小于等于 { }
else if(ch=='>') //不等于 { } else { }
sym = lss; sym=neq; getchdo; sym=leq; getchdo;
... }
(3)增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。
3.1 文法 将原本 条件语句 -> if条件 then 语句
改为 条件语句 -> if条件 then 语句 [else 语句]
<条件语句> ::== if <条件> then <语句> [else <语句>]
3.2修改statement
else if(sym==ifsym) /*准备按照if语句处理*/
/*经statement处理后,cx为then后语句执行 {
getsymdo;
memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlev[thensym]=true;
nxtlev[dosym]=true; /*后跟符号为then或do*/
conditiondo(nxtlev,ptx,lev); /*调用条件处理(逻辑运算)函数*/ if(sym==thensym) { } else { }
cx1=codePointer; /*保存当前指令地址*/ gendo(jpc,0,0); /*生成条件跳转指令,暂写0*/ statementdo(fsys,ptx,lev); /*处理then后的语句*/
error(16); /*缺少then*/ getsymdo;