CLU példaprogramok

Szimbólumtábla-kezelő


Íme egy több modulból álló fordítóprogram CLU nyelven!
A rendszer négy részből áll:

  • Page Stack: rögzített hosszú, tetszőleges típusú tömbök potenciálisan végtelen vermének generikus implementálása. A megvalósítás a CLU-ban megszokott módszerekkel és eszközökkel történik, lineárisan láncolva egymáshoz az elemeket…

  • [cluster, record, oneof, rep, tagcase, exception handling]  (Részletek)  (CLU forrás)
  • Unbounded Stack: a rendszer lelke. Ez a hagyományos értelemben vett verem speciális célorientált kiterjesztésekkel és potenciálisan végtelen hosszal. A modul generikus, azaz a verem elemeinek megszorítás nélküli típusa paraméterként szerepel. Az elemeket kötegeljük, s az egyes kötegeket ábrázoljuk egy láncolt verem-struktúrában. A kötegek tárolását a Page Stack modul végzi, s itt "csak" az elemek kötegeken belüli kezelése valósul meg. A kötegek mérete ugyancsak generikus paraméter. Újdonság a virtuális Push/Pop műveletpáros, amivel akár arra is lehetőség nyílik, hogy újból lejátsszuk a verem-műveleket, vagy többször végigolvassuk a vermet, akármelyik végétől kezdve…

  • [cluster, record, rep, exception handling]  (Részletek)  (CLU forrás)
  • Symbol Table: magát a szimbólumtáblát megvalósító modul. A szimbólumtábla verem, melynél elemei kulcs-érték párok. A speciálisan felépített Unbounded Stack-nek köszönhetően nagyon egyszerű az implementáció, a beépített hibakezelési részek ellenére is.

  • [cluster, exception handling]  (Részletek)  (CLU forrás)
  • Compiler: azért, hogy tesztelhessük a programot, készíthetünk egy egyszerű fordítóprogramot. Csupán három programozási elemet ismer: egymásba ágyazható eljárás-deklarációk, változó-definíciók, és egy fordítási direktíva. Lényegében csak a stream- és string-kezelés érdemel kiemelést, illetve jól megfigyelhető a kivételkezelés blokkokhoz való kötése.

  • [string, stream, exception handling]  (Részletek)  (CLU forrás)

    A rendszert DOS 6.0 alatt futó Clu2c, CluLink programokkal (és a megfelelő DJGPP eszközök felinstallálása után) fordíthatjuk:

    clu2c compiler.clu
    clu2c stckpage.clu
    clu2c stack.clu
    clu2c symtable.clu
    clulink compiler.c stckpage.c stack.c symtable.c -o compiler