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