A CLU programozási nyelv

CLU szintaxis



CLU2C ("CLU to C")

  1. A program

2. A program használata

3. A fordító parancsai (clu2c)

4. A szerkesztő parancsai (clulink)

5. CLU bővítések: 5.1. Start_up Procedure

5.2. Objektum-orientált eljáráshivatkozás

5.3. Típuskönyvtár kiegészítések

6. Dokumentáció


1. A program

A CLU fordítók újabb változatai a P-CLU (Portable CLU / hordozható CLU) fordítók, a CLU2C is ebbe a kategóriába tartozik. Ezek egységesen C forrásnyelvű programot készítenek a CLU forrásnyelvű programból, majd a CLU saját C könyvtáraival kiegészítve egy C fordító program segítségével készítik el a futtatható programot. Ebből adódik, hogy csak olyan számítógépekre "hordozható", ahol van C fordító, de ez szerencsére a legtöbb operációs rendszerre igaz, másrészt viszont a C programok hordozhatósága sem garantált minden rendszer között. Az Augustára telepített CLU2C fordítót a Department of Mathematical an d Computing Sciences, Tokyo Institute of Technology egyetemen fejlesztették, a jelenlegi 2.0-ás verziót 1997-ben készítették el. Fordításhoz a GCC C fordítót használja. (Most már a Valerie-n is van CLU2C fordító.) DOS-ra is készült fordító, ami a megfelelő GNU GCC fordítót igényli.  

2. A program használata

Az alábbi leírás elsősorban az Augustára vonatkozik, a Valerie-n is ugyanezeket kellene beállítani, de ezt sokkal egyszerűbben is meg lehet tenni. (lásd lejjebb) A gcc programhoz szükség van arra, hogy a PATH környezeti változóban szerepeljen a /opt/gnu/bin könyvtár. Ezt a programot nem kell közvetlenül használnunk, csak a CLU2C programjainak van rá szüksége. (Ha szeretnénk használni a man programot, akkor a MANPATH környezeti változóba is be kell állítani az /opt/gnu/man könyvtárat. Itt erre nincs szükség, de jól jöhet pl. ha paramétereket akarunk átadni a clulink-en keresztül.) A CLU2C programjai - clu2c, clulink, plink - a /usr/local/bin könyvtárban találhatók. A plink programot sem kell közvetlenül elindítanunk, a clulink program használja. Ennek a könyvtárnak is benne kell lennie a PATH környezeti változóban, de ez általában benne is van. A CLU program fordításához használt parancsok: clu2c, clulink. A fenti beállításokat megtehetjük a saját könyvtárunkban található .profile szöveges file tartalmának kijavításával, hiszen abban rendszerint van már egy PATH beállítás. Ha nincs PATH beállítás ebben a file-ban, akkor írjuk a végére a következő parancsokat (a kis és nagybetűk lényegesek): PATH=$PATH:/opt/gnu/bin:/usr/local/bin
export PATH (A .profile tartalmának megváltoztatása csak a következő bejelentkezés után válik hatásossá.) Ezeknél sokkal több beállításra van szükségük a programoknak, de a többit a fordító és a szerkesztő már ismeri. (Az installálás során kapták meg ezeket a paramétereket.) A Valerie-n az alkalmazások package-ekbe vannak szervezve, egy ilyen package használatba vételkor minden szükséges beállítást elvégez. A gcc package alapértelmezésben már használatban van, ezt nem kell külön megadni. available_package     - kiirja az elérhető package-eket
which_package     - kiirja a használatban levő package-eket
use_<nev     - használatba veszi az adott nevű package-et (kisbetűvel kell megadni)
use_clu     - a CLU2C fordító használatba vétele Ezt az utóbbi sort lehet a .profile-ba elhelyezni, ha a fordítót szeretnénk használni. Tesztelésképpen fordítsunk le és próbáljunk ki egy egyszerű programot: hello.clu       - forrás, CLU nyelven írt program
clu2c hello.clu - fordítás
hello.c         - eredmény, a CLU program C-re fordított változata
clulink -o hello hello.c - szerkesztés (és C fordítás)
hello           - végeredmény, a futtatható program
hello             - a lefordított program kipróbálása Ha valami nem stimmelne, akkor a következőket ellenőrizhetjük: - Az Augustára vagy a Valerie-re vagyunk-e bejelentkezve (csak ide van telepítve).
- A gcc program elindul-e (önmagában, esetleg fordíthatunk vele valamit, ha van).
- A clu2c, clulink egyáltalán elindul-e.
- Ha minden kötél szakad, megpróbálhatjuk megkeresni a rendszergazdát, és tanácsot kérhetünk Tőle. (Ez nem teljesen reménytelen, mert ismerek valakit, akinek ez egyszer már sikerült.)

3. A fordító parancsai (clu2c)

A CLU2C a következő file-okkal dolgozik. A kiterjesztések, amit megadunk, mindenhol az alapértelmezést jelentik és bárhol felülbírálható.
<filename.clu
Egy CLU forrásnyelvű program, tartalmazhat egy vagy több cluster-t.
<filename.equ
Equate (constansdefiníció, átnevezés, stb.) parancsokat tartalmazó forrásnyelvű porgram. Szerkesztéskor ezek logikailag a "legfelső  szinten" (clustereken kívűl) helyezkednek el, és a forrásszövegben bárhol átdefiniálhatók.
<filename.spc, <filename.lib
Interfész specifikációs file. Az .spc olvasható formátumban, a .lib bináris formátumban, több .spc-ből a clu2c-vel egy .lib készíthető. A CLU cluster fejlécét tartalmazza. Akkor van szükség ilyen file-okra, ha a forrásszöveg nem áll rendelkezésre. Pl. a CLU2C osztálykönyvtárainak is vannak ilyen specifikációs file-jai a /usr/local/lic/clu2c/lib könyvtárban, ezek egyrészt egzakt specifikációt tartalmaznak, másrészt segédletként is használható a benne található megjegyzések miatt.
<filename.c, s egyebek
A clu2c alapértelmezés szerint a forrás nevével megegyező, de .c kiterjesztésű C forrásfile-t készít, ebből szerkeszti össze a porgramot a clulink. A két fázis közben még készülnek egyéb file-ok is, de ezeket nem tárgyaljuk. A clu2c-t alapvetően kétféle üzemmódban lehet használni, parancssorban opciókkal és paraméterekkel használva, valamint interpreter módban, ahol parancsok adhatók ki. Itt csak a paraméteres módot adjuk meg, a dokumentáció tartalmazza az interpreter parancsokat is, de az -n opcióval kérhető "fordítás" is a két mód között. Szintakszis:
clu2c [option ...] input_spec
Opciók:
-c
Compile-only: Csak fordít. Normális esetben a specifikációt is innen veszi a fordító, de ezzel a paranccsal elő lehet írni, hogy ne. Ekkor a specifikációt más forrásból kell biztosítani.
-d <file.lib
Dump: A forrásokból összegyűjtött specifikációkat ebben az interfész specifikációs library-ba tárolja le. Később használható inputként.
-F
Force-Code-Generation: Akkor is elkészíti a C nyelvű forrást, ha a fordítás közben hiba történt.
-f <file.xfile
Execute: Betölti és végrehajtja a file-ban levő parancsokat. Batch-ként használható.
-g
Debug: A C debug-jához szükséges információt is befordítja.
-h
Help.
-M
Make: Ebben a módban a fordító megpróbálja automatikusan összegyűjteni a lefordítandó forrásfile-okat az aktuális könyvtárban. Hasonló a make funkcióhoz, de ez nem a paraméterezhető.
-n
Dry-run: Kiírja a paramétereknek megfelelő parancsokat, de nem hajtja végre.
-O [false/time/space]
Optimization mode: Ha nincs opció, az a false-nak felel meg, ha van, de nincs paraméter, akkor a time-nak. A fordítás optimalizálásának beállítása.
-p
Syntax-only: Csak szintaktikai ellenőrzést végez.
-s
Spec-only: Csak a specifikációt értelmezi, de nem fordít. (a -c inverze)
-t
Type-check-only: Csak szintaktikai és szemantikai ellenőrzést végez.
-x
Externals: Keresztreferencia táblát készít.
input_spec ...
Forrásnyelvű állományok felsorolva, az alapértelmezés szerinti kiterjesztés .clu. Megadható input specifikációkat tartalmazó szöveges file is (a többi között) @ jellel kezdve a file nevét, ennek az alapértelmezett kiterjesztése .xload. Használhatók meta-karakterek (pl.: *) is.  

4. A szerkesztő parancsai (clulink)

A clulink program szerkeszti a futtaható állományt. Ehhez segítségül a gcc programot használja.
Szintakszis:
clulink [options ...] input_spec
Options:
-g
Debug: Debug információt is generál - debugger-hez.
-h
Help.
-v
Verbose: Részletesebb információkat ír ki.
-o <filename
Output: A futtaható file neve. Alapértelmezés az input file neve .a kiterjesztéssel.
-L <directory
Libdir: Hozzáveszi az adott könyvtárat a C library file-ok keresési útvonalához.
-l <filename
Lib: C library file megadása közvetlenül.
-F <flags
Flags: Paraméterek átadása a C fordítónak.
-f
Force-compilation: Akkor is fordít, ha közben hiba történt.
input_spec ...
Forrásnyelvű  (.c) állományok felsorolva, alapértelmezés szerinti kiterjesztés nincs (?), pontosan meg kell adni.
Van még néhány felesleges paraméter, valamint megválasztható az előfordító (plink) és a C fordító is, ezekről részletes információ található a dokumentációban.  

5. CLU bővítések

A CLU2C több hasznos kiegészítést is tartalmaz az eredetileg megtervezett CLU-hoz képest. Ezeket itt csak sorra vesszük, a részletes leírásuk megtalálható a dokumentációban.

5.1. Start_up Procedure

A CLU definíciója nem írja elő, hogy melyik eljárással induljon a program. A CLU2C fordító erre a célra mindig egy start_up nevű, külön clusterben megadott eljárást használ, melynek fejléce kötelezően:
start_up = proc ()
A start_up eljárásnak nem lehet paramétere, és nincsenek saját kivételei. A start_up eljárás vagy normál módon, vagy egy failure kivétellel fejeződhet be.

5.2. Objektum-orintált eljáráshivatkozás

A CLU2C-t kiegészítették egy új szintaktikus cukorral, mely lehetővé teszi, hogy az objektum-oriantált nyelvekben megszokott módon is hivatkozhassunk az eljárásokra.
primary!name [()] <-- T$name (primary)
primary!name (exp, ...) <-- T$name (primary, exp, ...)
Itt a T a primary változó típusa.

5.3. Típuskönyvtár kiegészítések

A CLU nyelvben végül is nem készítettek típuskönyvtárakat, de ezt a CLU2C-ben pótolták. Az új típusok egy része rendszerfüggő funkciókat valósít meg: file- és könyvtárkezelés,  file-név kezelő eljárások, környezeti értékek elérése, a program indításkor megadott argumentumok használata, rendszeróra, stb. Másrészt hasznos kiegészítések vannak: matematikai függvények, előjel nélküli egész, stb. Ezeknek az új típusoknak és eljárásoknak a specifikációs (.spc) forrásfile-jai a /usr/local/lib/clu2c/lib könyvtárban megtalálhatók, megjegyzésekkel kiegészítve. (A dokumentáció is tartalmazza ezeket a specifikációkat, lásd a következő fejezetet.)

6. Dokumentáció

Egy elég részletes dokumentáció található TEX formátumban a /usr/local/lib/clu2c/doc könyvtárban. Minden file-nak .texi a kiterjesztése, a fő dokumentum a clu2c.texi, ez hivatkozik a többire. Ez a web oldal tulajdonképpen ennek a dokumentációnak a rövidített változata. Ha sikerül kinyomtatni, formás, 51 oldalas kézikönyvet nyerhetünk vele.
Leírom - hátha másnak is jól jön -, hogy ez nekem hogyan jött össze, de biztos vagyok benne, hogy nem ez a legegyszerűbb módja: - Lemásoltam a fenti .texi kiterjesztésű file-okat a saját könyvtáramba
tex clu2c.texi - erre elkészült egy clu2c.dvi nevű file
- Ftp-vel áttöltöttem a saját PC-mre
- Az Internetről letöltöttem egy ingyenes, PC-re szánt TEX programot (lásd. alább)
- Ennek egy alkalmas segédprogramjával kinyomtattam egy HP nyomtatón PC-s TEX: Christian Schenk 1997-ben készített MIKTex nevű programja. Amennyire meg tudom ítélni, nagyon hasonló a Unix verzióhoz, de DOS-os programokból áll. Ennek ellenére ragaszkodik hozzá, hogy Windows 95 vagy Windows NT alatt fusson (ugyanis win32 rendszerhívásokat használ). Van benne egy YAP nevű program - ez az egyetlen Windows-os felületű a csomagban -, mellyel megtekinthetők és kinyomtathatók a .dvi file-ok. (A YAP programban be kell állítani a nyomtató betűtípusát és felbontását.) Néhány Internet cím: http://www.snafu.de/~cschenk/miktex
ftp://ftp.dante.de
ftp://ftp.tex.ac.uk