procedure listcode;
var i:integer;
begin (*list code generated for this block*)
if listswitch
then
begin
for i|=cx0 to cx-1 do
with code[i] do
begin
writeln(i,mnemonic[f]:5,l:3,a:5);
writeln(fa,i:4,mnemonic[f]:5,l:3,a:5)
end;
end
end(*listcode*);
procedure statement(fsys:symset);
var i,cx1,cx2:integer;
procedureexpression(fsys:symset);
var addop:symbol;
procedure term(fsys:symset);
var mulop:symbol;
procedure factor(fsys:symset);
var i:integer;
begin
test(facbegsys,fsys,24);
while sym in facbegsys do
begin
if sym=ident
then
begin
i|=position(id);
if i=0
then error(11)
else
with table[i] do
case kind of
constant:gen(lit,0,val);
variable:gen(lod,lev-level,adr);
procedur:error(21)
end;
getsym
end
else
if sym=number
then
begin
if num>amax
then
begin
error(31);
num|=0
end;
gen(lit,0,num);
getsym
end
else
if sym=lparen
then
begin
getsym;
expression([rparen]+fsys);
if sym=rparen
then getsym
else error(22)
end;
test(fsys,facbegsys,23)
end
end(*factor*);
|