Gramatiko de modela lingvo

   
   tuto = esprimo "." .
   esprimo = termo {("+" | "-") termo}.
   termo = faktoro {"*" faktoro}.
   faktoro = nomo | "(" esprimo ")".
   nomo = litero.

Rekursia desupriĝo en Paskalo

   
PROGRAMO postmetu(enigo,eligo);
   { traduku la "tuto"n de "esprimo" el modela lingvo
     al postmeta operaciskribo }
MARKO   13;          {erarmarko: antaŭtempa dosierfino}
VAR     s: signa;    {la kuranta signo ankoraŭ ne fintraktita}

PROCEDURO simbolon;  {legu en s-on la sekvan signifan simbolon}
  STARTO
     RIPETU
        SE doFin(enigo) TIAM AL 13;
        legu(s)
     ĜIS s<>' '      {preterigu brusignojn: spacetojn, linifinojn}
  FINO;   (*de simbolon*)

PROCEDURO esprimo;  {esprimo havas eningigitajn procedurojn}
  VAR op: signa;    {postmetenda operacisigno}

      PROCEDURO termo;   {termo = faktoro*faktoro...}

         PROCEDURO faktoro;  STARTO  {faktoro ne havas lokaĵojn}
           SE s='(' TIAM STARTO simbolon; esprimo FINO
           ALIE  skribu(s);
           simbolon;       {rezignu la fintraktitan s-on, legu freŝan}
         FINO; {de faktoro}

      STARTO {--- la korpo de termo}
         faktoro;
         DUM s='*' FARU STARTO simbolon; faktoro; skribu('*') FINO
      FINO;  {--- finiĝis termo}

  STARTO {--- la korpo de esprimo}
     termo;
     DUM (s='+') AŬ (s='-') FARU STARTO
        op:=s; simbolon; termo; skribu(op);
     FINO
  FINO;  {--- finiĝis esprimo}

 STARTO
    simbolon; esprimo; skribuLin; {--- kontrolendus: s='.'}
13:FINO.


[Indekso][Instrukcio]