program jisuanqi;
var nextch:char;
result:real;
procedure readnextch;
{读下一个字符的过程}
begin
repeat
if eoln then nextch:=';'
else begin
read(nextch);
write(nextch);
end;
until nextch<>'';
end;
procedure readnumber(var number:real);
{读数的过程}
var scale:real;
begin
{处理整数部分}
number:=0;
while nextch in['0'..'9'] do
begin
number:=number*10+ord(nextch)-ord('0');
readnextch;
end;
if nextch='.' then begin
{处理小数部分}
scale:=1;
readnextch;
while nextch in['0'..'9'] do
begin
number:=number*10+ord(nextch)-ord('0');
scale:=scale*10;
readnextch;
end;
number:=number/scale;
end;
end;
procedure readexpression(var exprvalue:real);
{读表达式的过程}
var addop:char;
nexttermval:real;
procedure readterm(var termvalue:real);
{读项的过程}
var mulop:char;
nextfacval:real;
procedure readfactor(var factorvalue:real);
{读因子的过程}
begin
if nextch in['0'..'9'] then readnumber(factorvalue) {读数}
else if nextch='(' then begin
readnextch;{读表达式}
readexpression(factorvalue);
if nextch=')' then readnextch
else writeln('error');
end
else begin
writeln('error');
factorvalue:=1;
end;
end;
begin
{读因子}
readfactor(termvalue);
while nextch in ['*','/'] do
begin
mulop:=nextch;
readnextch;
{读下一个因子}
readfactor(nextfacval);
{因子与因子乘除}
case mulop of
'*':termvalue:=termvalue*nextfacval;
'/':termvalue:=termvalue/nextfacval;
end;
end;
end;
begin
{读项}
readterm(exprvalue);
while nextch in ['+','-'] do
begin
addop:=nextch;
readnextch;
{读下一项}
readterm(nexttermval);
{项与项加减}
case addop of
'+':exprvalue:=exprvalue+nexttermval;
'-':exprvalue:=exprvalue-nexttermval;
end;
end;
end;
begin
readnextch;
{读表达式}
readexpression(result);
{输出结果}
writeln('=',result:20:6);
end.
这个是我初中那会整的代码,参考一下这个,回答下面附了一张图:
http://zhidao.baidu.com/question/148843124