Az ELAN programozási nyelv

Bevezetés

1. Bevezetés

Egy rövid összefoglalás az ELAN programozási nyelvről

I. Az ELAN programozási nyelv története

C. H. A. Koster, az ELAN nyelv megalkotója

Az ELAN programozási nyelvet C. H. A. Koster holland professzor találta ki 1979-ben, Nyugat-Berlinben, majd azóta Hollandiában a Nijmegeni egyetemen fejleszti tovább. Az ELAN név (ELAN = Educational LANguage) jól utal a célra: olyan nyelvet szeretett volna kialakítani, amely elsősorban oktatási célra szolgál.
A nyelv Magyarországon nagyon hamar elterjedt (1981-től kezdve), elsősorban a Budapesti Műszaki Egyetemen dolgozó Hanák D. Péter és munkatársai honosító tevékenységének következtében.
Az ELAN nyelvet három változatban fejlesztették ki. Az ELAN nyelv legszűkebb változata az ELAN0, amely korai mikroszámítógépekre készült (pl. Commodore 64 és társai), és az ELAN nyelvnek csak egy minimális utasításkészletét tartalmazta. (Nem voltak benne programegységek, valós típus, rekord típuskonstrukció, sokirányú elágazás, sokféle file-típus, ...) Az ELAN0 1979 és 1983 között készült el. E korai változatnak 1985-ben elkészült a magyar nyelvű megvalósítása is, amelyben a parancsok, valamint az üzenetek magyarul használhatók.
Az ELAN nyelv következő változata az ELAN1, amely 1985 környékén jelent meg. Használatához legalább IBM XT számítógép szükséges. Az ELAN1 már "majdnem" a teljes ELAN nyelvet tartalmazza, csupán a fordítási egységek hiányoznak belőle. Az ELAN1 fordítóprogram ugyan megérti a teljes ELAN nyelv utasításkészletét, de a fordítási egységekkel kapcsolatos ellenőrzéseket még nem végzi el.
E hiányt pótolja a teljes ELAN nyelv, amelynek az összefoglalását kíséreljük meg ebben a nyelvi ismertetőben.
Az ELAN nyelvet az 1990-es években MS-DOS környezetben az ELTÉ-n is oktatták. Később, amikor a 2000-es évek elején a Windows 2000 és Windows XP operációs rendszerek megjelenésével az MS-DOS operációs rendszer használata kiszorult az egyetemi számítógépekről, az ELAN nyelv oktatása is visszaszorult az ELTÉ-n. Az ELAN legutolsó kézikönyve 1998-ban készült az 1.7-es verzióhoz. A legfrissebb fejlemény az ELAN nyelv történetében, hogy az ELAN nyelvhez 2009-ben az Interneten elérhetővé tettek egy Marc Seutter (marcs@cs.ru.nl) által fejlesztett, a Linux/UNIX operációs rendszerben futtatható fordítóprogramot, amely jelenleg is szabadon letölthető az Internetről.

Az ELAN nyelv verziói, használati köre


Nyugat-Berlini Műszaki Egyetem: ELAN (Educational LANguage), 1981
Nijmegen, Hollandia (C.H.A. Koster): ELAN0 – az ELAN szűk részhalmaza
Magyarország, BME MMT: C64, HT, C+4, ... változatok, 1984-től
ELAN1 – 1987
ELAN – 1989
Kézikönyv az ELAN 1.7-es verziójához – 1998
Linux-környezetben használható fordítóprogram az ELAN 1.8-hoz – 2009
Az ELAN kifejlesztésének célja: a programozás oktatásához készült
Az ELAN őse: a Pascal nyelv
Az ELAN nyelv elterjedési területei: Németország, Hollandia

II. Az ELAN nyelv jellemzői


1. Amatőr, Neumann-elvű
2. Program = több fordítási egység = több programegység (4-féle típusú)
3. Dinamikus deklarációkiértékelés, automatikus memóriahozzárendelés
4. Nincs blokkstruktúra
5. Deklarációs rész nem különül el
6. Statikus hatáskör kijelölés
7. Dinamikus memóriakezelés
8. Az alapszavak nagybetűsek, minden más kisbetűs: nincs védett azonosító
9. Azonosítók átlapolhatók.
10. Erősen típusos
11. Típuskompatibilitás struktúra szerint
12. Típusszármaztatás, típus paraméterezése típussal
13. Nincs sor = utasítás megfeleltetés (de a rendszer automatikusan sorokra tördel, bekezdésekkel)
14. Utasításelválasztó jel a pontosvessző
15. Jellegzetes programozási környezet
16. Paraméterátadás: érték és eredmény szerinti

III. Az ELAN program szerkezete




<program1> ::= <program0> programegységek
<programegység> ::= eljárásfej : eljárástörzs. <ELAN0 program> eljárásvég | típusdefiníció
<program0> ::= <finomítás>-ok sorozata
<finomítás> ::= program : utasítások . | név : utasítások .


IV. Az adatok megadása


1. Konstansdefiníciók


típus CONST név :: érték , ... ; ...



2. Változó deklarálása


típus VAR név :: kezdőérték , ... ; ...



A névhez rendel: típust és esetleg kezdőértéket.
Érték nélküli változót nem lehet használni.
A változónév tartalmazhat szóközt.

3. Típusdefiníció (önálló programegység)


TYPE név=típusmegadás



4. Elemi típusok


INT, BOOL, TEXT, REAL



Műveletek:


Az INT (azaz: egész) típus műveletei:


előjelek,*,DIV,MOD,+,-,relációk,INCR,DECR



A BOOL (azaz: logikai) típus műveletei:


NOT,AND,OR,=,<>,true,false,XOR



A TEXT (azaz: szöveg) típus műveletei:


HEAD,TAIL,LENGTH,CAT(konkatenálás),SUB(i.betű),relációk,+,*



A REAL (azaz: valós) típus műveletei:


/,**,sqrt,exp,ln,log,log10,sin,cos,tan,arcsin,arccos,arctan,abs,max,min



Speciális valós konstansok:


e, pi



Konverzió:


real(egész)=valós, round,trunc(valós)=egész



Speciális szövegműveletek: szóközökkel kiegészítés, részképzés, keresés, csere, adott hosszú beolvasás

Konverzió:


text(szám,formátum)=szöveg, int(szöveg)=egész, real(szöveg)=valós



5. Tömb (ELAN terminológiával "sor")


ROW elemszám típus VAR név :: [érték,...]
ROW elemszám típus CONST név :: [érték,...]



Példa:


ROW 6 INT CONST prímek :: [2,3,5,7,11,13]



Indexelés 1-től, van tömbkonstans és tömbértékadás.
A[I][J] módon lehet hivatkozni a mátrixokra. Lehet mátrix sorára is hivatkozni. A tömbméret csak típus nélküli konstans lehet.


6. Rekord típus:


STRUCT (típus mezőnév, ... )



Hivatkozás:


változónév.mezőnév



Van konstans:


KOMPLEX CONST i ::komplex(0.0,1.0)



7. Szinoníma (makró) (azonos a Pascal konstans fogalmával)


LET név = érték


V. Utasítások


1. Értékadás (van feltételes kifejezés is)


Változó := kifejezés


Vagy pedig:


változó OPERÁTOR kifejezés

Megjegyzés: ezek mind műveletek, függvény nincs!


Precedencia:


+,-,NOT,HEAD,TAIL,LENGTH
*,DIV,MOD
+,–
relációk
AND
OR,XOR
SUB
INCR,DECR,CAT



2. Elágazás (ELAN terminológia "választás")

2.1. Elágazás megvalósítása IF-fel:


IF feltétel THEN utasítások FI
IF feltétel THEN utasítások ELSE utasítások FI
IF feltétel THEN utasítások ELIF feltétel THEN utasítások ELSE utasítások FI

A FI helyett ENDIF is írható.


2.2. Többirányú elágazás megvalósítása SELECT-tel:


SELECT kifejezés OF
CASE értékek: utasítások
...
OTHERWISE utasítások
ENDSELECT



3. Ciklus (ELAN0 terminológia "ismétlés")

3.1. Előre nem ismert lépésszámú ciklusok:

3.1.1. Elöltesztelős ciklus:


WHILE kifejezés REP utasítások ENDREP

Az elöltesztelős ciklus addig hajtódik végre, amíg igaz a kifejezés logikai értéke


3.1.2. Hátultesztelős ciklus:


REP utasítások UNTIL kifejezés ENDREP

A hátultesztelős ciklus addig hajtódik végre, amíg nem igaz a kifejezés logikai értéke


3.2. Előre ismert lépésszámú ciklusok:

3.2.1. Egyesével növekvő számlálós ciklus:


FOR változó FROM kezdőérték UPTO végérték REP utasítások ENDREP



3.2.2. Egyesével csökkenő számlálós ciklus:


FOR változó FROM kezdőérték DOWNTO végérték REP utasítások ENDREP



3.2.3. Ciklusváltozó nélküli számlálós ciklus:


UPTO darabszám REP utasítások ENDREP



4. Beolvasás, kiírás (eljárások)


A get nevű utasítással lehet billentyűzetről beolvasni egész vagy szöveg típusú adatot.
A put nevű utasítással lehet képernyőre kiíratni egész vagy szöveg típusú adatot.
Egyszerre 1 file lehet nyitva, lemezes változatban 1 input és 1 output file


new file(név), old file(név), close file, erase file(név)
write(érték), writeline, read (változó), file ended
line újsor, cursor(sor,oszlop), ascii(szám)



5. Finomítás


Név : utasítások .



Eljárás paraméter és lokális változó nélkül.
Nevük tartalmazhat szóközt.
Függvényérték: a finomítás utolsó utasításának értéke, amely kifejezés, vagy feltételes kifejezés lehet.


Az adott eljárásból való visszatérés:


LEAVE finomításnév



A kiszámított függvényérték visszaadása:


LEAVE finomításnév WITH kifejezés


VI. Az ELAN programegységei


1. Eljárás:


PROC név(paraméterek):
eljárástörzs .
az eljárás lokális finomításai
ENDPROC név;



2. Függvény:


típus PROC név(paraméterek):
függvénytörzs
függvényérték .
a függvény lokális finomításai
ENDPROC név;



3. Operátor:


típus OP NÉV(max. 2 paraméter):
operátortörzs
operátorérték .
az eljárás lokális finomításai
ENDOP NÉV;


Az operátor neve tetszőleges jel lehet, akár +, * stb.


4. Paraméterek:

Az ELAN-forráskódban az elválasztójel: ,


Paraméterátadás:


típus VAR név, típus CONST név
[típus] PROC (paraméterek típusa) név



Eljárásparaméterrel hívás:


[típus] PROC (paraméterek) név


VII. Az ELAN speciális típusmegadási lehetőségei


1. Származtatott típus:


TYPE típusnév = létező típus



A változó reprezentációja:


CONCR változó

Azaz: CONCR változó jelenti a változó reprezentációját


Az adott típusú érték:


típusnév : érték

Azaz: típusnév : érték jelenti az adott típusú értéket


Példa:


TYPE HOSSZ = REAL;
HOSSZ OP +(HOSSZ CONST x,y):
HOSSZ: CONCR x + CONCR y
ENDOP +;



2. Típussal paraméterezett típus:


TYPE MATRIX (M) = ROW n ROW m M

MATRIX (M) OP (M) + (MATRIX (M) CONST a,b):
MATRIX (M) VAR c;
...
c;
END OP +;

PROC (M) put (MATRIX (M) CONST a);
...
END PROC put;



3. Rekurzív típus


TYPE LISTA = STRUCT (INT elem, LISTA kov)

BOOL PROC ures (LISTA CONST l):
ISNIL CONCR l;
END PROC ures;

PROC legyenures (LISTA VAR l):
CONCR l:=NIL;
END PROC legyenures;

LISTA CONST ureslista :: LISTA:NIL;

LISTA CONST egyelemu :: LISTA: [1,LISTA: NIL];



hozzáfűzés:


l.kov:=ujlista


VIII. Az ELAN fordítási egységei




PACKET modulnév DEFINES eljárás és típusnevek
<ELAN1 program>
ENDPACKET modulnév;