begin (*block*) dx|=3; tx0|=tx; table[tx].adr|=cx; gen(jmp,0,0); if lev>levmax then error(32); repeat if sym=constsym then begin getsym; repeat constdeclaration; while sym=comma do begin getsym; constdeclaration end; if sym=semicolon then getsym else error(5) until sym<>ident end; if sym=varsym then begin getsym; repeat vardeclaration; while sym=comma do begin getsym; vardeclaration end; if sym=semicolon then getsym else error(5) until sym<>ident; end; while sym=procsym do begin getsym; if sym=ident then begin enter(procedur); getsym end else error(4); if sym=semicolon then getsym else error(5); block(lev+1,tx,[semicolon]+fsys); if sym=semicolon then begin getsym; test(statbegsys+[ident,procsym],fsys,6); end else error(5) end; test(statbegsys+[ident],declbegsys,7) until not(sym in declbegsys); code[table[tx0].adr].a|=cx; with table[tx0] do begin adr|=cx; size|=dx; end; cx0|=cx; gen(int,0,dx); statement([semicolon,endsym]+fsys); gen(opr,0,0); test(fsys,[],8); listcode end (*block*); |