begin(*term*)
    factor([times,slash]+fsys);
    while sym in [times,slash] do
     begin
      mulop|=sym;
      getsym;
      factor(fsys+[times,slash]);
      if mulop=times
       then gen(opr,0,4)
       else gen(opr,0,5)
      end
   end(*term*);

   begin(*expression*)
    if sym in [plus,minus]
     then
      begin
       addop|=sym;
       getsym;
       term(fsys+[plus,minus]);
       if addop=minus
        then gen(opr,0,1)
      end
     else term(fsys+[plus,minus]);
    while sym in [plus,minus] do
     begin
      addop|=sym;
      getsym;
      term(fsys+[plus,minus]);
      if addop=plus
       then gen(opr,0,2)
       else gen(opr,0,3)
     end
   end(*expression*);