Sekvan paĝon! Antaŭan paĝon! Indekson! Instrukcion!

Ekzemplo pri rekursia desupriĝo

Gramatiko de modela lingvo

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

La programo en Paskalo

PROGRAMO postmetu(enigo,eligo); 
   { traduku la "tuto"n de "esprimo" el la 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.


Sekvan paĝon Indekson Instrukcion