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