7.11 增加字符输入函数readchar() 文法
语句 ::== readchar(ident [, ident]) 7.11.1 增加关键字
enum symbol writecharsym strcpy(&(word[i++][0]),\wsym[i++]=writecharsym; 增加语句开始符集
statbegsys[readcharsym]=true; 7.11.2 增加字符输入指令 opr 0 16
void interpret(){ ... case 18: ... }
7.11.3 修改statement函数语句处理分支
printf(\fprintf(fa2,\getchar();
scanf(\fprintf(fa2,\t++; break;
int statement() { ...
else if (sym==readcharsym) { getsymdo; if(sym!=lparen) { error(34);
} else { do { getsymdo; if(sym==ident) { i=position(id, *ptx); if (i!=0) { if (table[i].kind==character) {
gendo(opr,0,18);
gendo(sto,lev-table[i].level,table[i].adr); */ }
else
/* 储存到变量
}
} else { }
} else { }
{ }
error(35);
error(11);
error(35);
getsymdo;
}while (sym==comma); /*一条read语句可读多个变量 */
if(sym!=rparen) { } else { }
getsymdo; { }
getsymdo; error(33);
/* 格式错误,应是右括号*/
while(!inset(sym,fsys))/* 出错补救,直到收到上层函数的后跟符号*/
} ... }
六、 测试用例
6.1 测试不等号<>
测试代码 var b; begin b :=0; if b<> 1 then write(1); end. 运行结果
6.2 测试else语句
测试代码 var b; begin b :=2; if b<> 2 then write(1); else write(2);
write(3) end. 结果
6.3测试 *= /= 代码 var a,b; begin a:=2; b:=4; a*= 2; write(a); b /=2; write(b); end. 结果
6.4测试 FOR <变量>:=<表达式> TO <表达式> DO <语句>
代码 var a,b,c; begin
a:=2;