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*);