Pascal
A HupWiki-ből...
Tartalomjegyzék |
A Pascal programozási nyelv
A nyelv története
A Pascal magas szintű programozási nyelv, amelyet Niklaus Wirth alkotott meg Zürichben az 1960-as és 70-es évek fordulóján. A nyelvet Blaise Pascalról, a nagy 17. századi francia matematikusról és filozófusról nevezte el. Az Algol és más nyelvek logikájából kiindulva, azokat - főleg az adatszervezés terén - új elemekkel bővítve, remek programnyelvet alkotott. A Standard Pascal meglehetősen puritán nyelv volt, csak a legszükségesebb parancsokat és utasításokat tartalmazta, a programozónak meglehetősen sok munkája volt. A programnyelv azonban valóban jól használható, közel áll az emberi gondolkodáshoz és könnyen elsajátítható. Ezért aztán nem kell csodálkozni, hogy rohamtempóban terjedt el a világban - főleg a személyi számítógépek megjelenése óta. Szoftvercégek sora adta ki saját változatát, kiegészítve újabb parancsokkal, függvényekkel, miközben a kezelését egyre kényelmesebbé tették, integrált keretrendszert alkottak hozzá stb. Az egymással konkuráló szoftvercégek Pascal változatai közül kétségtelenül a Borland cégé lett a legsikeresebb. Az évek során a Turbo Pascal verziók között ma a 7.0-nál tartanak, de már évekkel ezelőtt megjelent a Windows-os változat is. Sőt megjelent a Delphi nevű, szintén Pascal-kódú Windows-os fejlesztőrendszer 16 és 32 bites változata is. Az oktatási segédletben a Turbo (Borland) Pascal 7.0 verzióval foglalkozunk.
Vázlat:
1968, ALGOL60-ra, ALGOL W-re alapozva + adatstruktúrálás
1. fordítóprogram: 1970
1. publikációk: 1971
1973: Revised Report (átdolgozott jelentés)
1983: újabb, szigorúbb szabvány
Készítő: Niklaus Wirth (Zürich)
Cél: jó fordítóprogram
Turbo Pascal verziók (1983-tól, 7.0 1992-ben)
A nyelv jellemzői
- Amatőr, Neumann-elvű
- Program = 1 fordítási egység = több programegység, blokkstruktúra
- Statikus deklaráció kiértékelés
- Dinamikus memóriakezelés (statikus és véges élettartamú változók), van kézi lefoglalás, törlés is, sokféle élettartam
- Hatáskör, láthatóság: statikus hatáskör kijelölés
- Paraméterátadás: cím szerinti, érték szerinti (eljárásparaméter)
- Típuskompatibilitás név szerint
- Azonosítók nem lapolhatók át
- Nem erősen típusos (1973 szerint), erősen típusos (1983 szerint)
- Alapszavak védettek
- Nincs sor=utasítás megfeleltetés
- Utasítás elválasztó jel a pontosvessző
- Mindent előre kell definiálni (alulról felfelé építkezés)
A program szerkezete
PROGRAM név; deklarációk BEGIN utasítások END.
- deklarációk: (a szabvány szerint kötött sorrendben, TP szerint nem)
- címkedeklarációk
- konstansdefiníciók<
- típusdefiníciók
- változódeklarációk
- eljárás- vagy függvénydeklarációk
Adatok megadása
Konstansdefiníciók (típus nélküli konstans)
- CONST név=érték; név=érték; ...
Változó deklarációk
- VAR változó, változó: típus; változó: típus; ...
Nincs a változóknak kezdőértéke
Elemi típusok
- INTEGER,
- REAL,
- BOOLEAN,
- CHAR
- (felsorolás) – nem sorolható fel már létező típus eleme, mert nem egyértelmű, hogy egy konstans melyik típusba tartozik
- résztartomány – egész, karakter vagy felsorolás típusnak lehet
Műveletek
Relációk minden elemi típushoz léteznek
- logikai: AND,OR,NOT
- egész: +,-,*,DIV,MOD,ABS,SQR,SUCC,PRED,MAXINT,ODD(szám)
- valós: +,-,*,/,ABS,SQR,SQRT,SIN,COS,ARCTAN,EXP,TRUNC, ROUND
- karakter: ORD,CHR,PRED,SUCC
- felsorolás:SUCC,PRED,ORD
Tömb
- ARRAY [indextartomány] OF elemtípus
- indexelés: A[I]
- index tetszőleges véges típus lehet
- nincs tömbkonstans (Turbo Pascalban van), konstrukciós művelet
- Szövegtípus: PACKED ARRAY [indextartomány] OF CHAR
Rekord
TYPE név=RECORD mezőnevek: típus; .. mezőnevek: típus END
- Hivatkozás: változónév.mezőnév.mezőnév
- WITH változónév DO utasítás
- Van rekord értékadás
- Nincs rekordkonstans (Turbo Pascalban van), konstrukciós művelet
- Nem egyedi a rekordleírás záró utasítása
- Rekord CASE szerkezettel (unió)
TYPE név=RECORD mezőnevek: típus; .. CASE mezőnév: típus OF értékek: (mezőleírások); ... értékek: (mezőleírások) END
- A mezőnevek a CASE szerkezeten belül is egyediek legyenek!
- A változórész csak a végén szerepelhet.
Halmaz
TYPE típusnév=SET OF elemtípus
- Muveletei: +,-,*,<,<=,>,>=,=,<>,in
- Van halmazkonstans és konstrukciós művelet ([elem,elem,...])
- Nem lehet bejárni! (Bonyolult egy halmaz kiírása, beolvasása)
File
TYPE típusnév=FILE OF elemtípus TYPE text=FILE OF char
- Műveletek:
- RESET(FILE,név),
- REWRITE(FILE,név),
- CLOSE(FILE),
- READ(FILE,változók),
- READLN(TEXTFILE,változók),
- WRITE(FILE,kifejezések),
- WRITELN(TEXTFILE,kifejezések),
- EOLN(TEXTFILE),
- EOF(FILE),
- SEEK(FILE,sorszám)
Mutató
típusa: ^típus, amire mutat: változó^
utasítások: new(változó), dispose(változó)
--145.236.66.94 2005. március 27., 08:57 (CEST)Jaja
Típusdefiniálás
TYPE típusnév=típusdefiníció; típusnév=típusdefiníció; ...
- Nem adható a típushoz muvelet.
- A típus nem paraméterezhető.
Utasítások
Értékadás
változó := kifejezés
- Nem lehet: file típus Lehet: valós:=egész
- precedencia: NOT
- *,/,DIV,MOD,AND
- +,–,OR
- relációk
Összetett utasítás – a nyelv technikai eleme
BEGIN utasítások END
Elágazás
IF feltétel THEN utasítás
IF feltétel THEN utasítás ELSE utasítás
CASE kifejezés OF értékek: utasítás ; ... értékek: utasítás END
- Nincs IF záró utasítás, a CASE záró pedig nem egyedi
Ciklus
WHILE kifejezés DO utasítás – amíg igaz REPEAT utasítás UNTIL kifejezés – amíg igaz nem lesz FOR cv := kezdet TO vég DO utasítás DOWNTO
- Nincs ciklus záró utasítás
- Ciklusváltozó: tetszőleges diszkrét típus, eljárásra lokális (TP szerint nem), a ciklus belsejében nem módosítható
Beolvasás, kiírás
READ(változók), READLN(változók) WRITE(kifejezések), WRITELN(kifejezések) EOLN
- ugyanez file-okkal is, EOF, RESET, REWRITE
- Csak karakter, egész, valós típusú érték olvasható, ezeken kívül szöveg és logikai írható.
- Elválasztójel számok között: szóköz vagy sorvége.
Eljárás vagy függvény
Eljárás:
PROCEDURE név (paraméterek); deklarációk BEGIN utasítások END;
Függvény:
FUNCTION név (paraméterek):típus; deklarációk BEGIN utasítások név:=kifejezés
END;
- Operátor nincs.
- A függvény csak elemi típusú lehet.
- A paraméterek között elválasztójel: – hívásnál: , – definiálásnál: ;
- Mellékhatás:
- a függvény megváltoztathatja a paramétereit és a globális változókat is.
A:=F(X)+F(X) és A:=F(X)*2 különbözhet
- A függvény (eljárás) definíciójának meg kell előznie a hivatkozást. Kivétel:
PROCEDURE Q(paraméterek); FORWARD; ... PROCEDURE Q; ... END;
Turbo Pascal specialitások
Lépés a professzionális programozási nyelvek felé.
- Konstans számítható másik konstansból (bárhol, ahol konstans szerepelhet).
- Vannak típusos konstansok: CONST név: típus=érték;
- tömbkonstans: [érték, érték, érték, ... ]
- rekordkonstans: [mezőnév: érték; mezőnév: érték; ... ]
- Változatos számtípusok: 1, 2, 4 byte-os egész, előjel nélküli egészek, különböző pontosságú és nagyságrendű valósak; STRING és STRING[N] típusok.
- Típuskonverzió: típusnév(érték).
- A sokfelé ágazásban van különben-ág:
- CASE kifejezés OF
- ...
- ELSE utasítás
- END;
- Eljárásoknak lehet konstans, illetve típus nélküli paramétere:
- PROCEDURE X(CONST a: WORD); cím szerint adja át, nem engedi változtatni
- PROCEDURE X(a,b; hossz: WORD);
- TYPE V=ARRAY [1..1000] OF BYTE;
- ...
- FOR i:=1 TO hossz DO V(a)[i]:=V(b)[i];
- Van abszolút címzés (egy változó milyen memóriacímre kerüljön).
- VAR i: INTEGER ABSOLUTE memóriacím
- Program = sok fordítási egység (UNIT)
- Program felépítés:
- PROGRAM név;
- USES fordítási egység nevek;
- ...
- END.
UNIT felépítés:
UNIT név; USES fordítási egység nevek; INTERFACE deklarációk (eljárásoknak csak a neve és paraméterei, a törzs nélkül) IMPLEMENTATION a fenti eljárások, valamint lokális deklarációk BEGIN Kezdőértékadó utasítások END.
- Filekezelés
- ASSIGN(FILE,név), RESET(FILE), RESET(FILE,rekordhossz),
- REWRITE(FILE), SEEK, APPEND, CLOSE, FILEPOS, FILESIZE, SEEKEOF,
- SEEKEOLN, CHDIR, ...
- A deklarációk sorrendje szabad
- Léptetések: SHL, SHR, logikai művelet: XOR
- Logikai műveletek az egész típuson bitenkénti műveletet adnak
- @X – X címe (változó, eljárás, függvény)
- PROCEDURE ...; EXTERNAL; – külső assembly eljárás
- PROCEDURE ...; INLINE ($xx,$xx,...) – belső gépi kódú rész
- SIZEOF(típusnév)
- Eljárástípus
Pascal fordítóprogramok és fejlesztőeszközök
Kereskedelmi termékek
A legismertebb kereskedelmi pascal fejlesztőeszközöket a Borland Software Corporation készítette/készíti. Ezen termékek zárt forrásúak.
A Borland Software Corporation termékei
Turbo Pascal
A DOS alatt használható változat volt a híres Turbo Pascal (sokan ezen tanultak meg programozni...). Az 5.5-ös változat ma már szabadon letölthető a cég honlapjáról (community.borland.com/museum). Ezek a változatok (Talán az 5.0-tól FIXME) már támogatták az OOP programozást.
Borland Pascal
A Borland Pascal 7 DOS és Win16 alatt használható fejlesztőeszköz, de már képes volt 16 bites környezetre is fordítani.
Delphi, Kylix
A cég közben megjelentette a Delphi-t, mely már GUI alatt dolgozott Windows környezetben. Ez eleinte 16 bites volt, majd a Delphi 2-től (vagy Delphi 3-tól FIXME) már 32 bites fordítót tarttalmazott. Később kiadták a Kylix-ot, mely Linuxon is elérhetővé tette a RAD fejlesztőeszközöket. A cég sokat tett az Open Source közösség érdekében azáltal, hogy mind Windows, mind Linux alatt elérhetővé tette (igaz butított) változatát a Delphi ill. Kylix fejlesztőeszközeinek. Ezek letölthetőek a cég honlapjáról (Delphi 7 Personal Kylix 3 Personal), majd regisztráció után használhatók, bár csak GPL-es program fejlesztésére (pontosan lásd a licencben!). További jó pont, hogy a Kylix használható C++ fejlesztéshez is, mint IDE.
Nyílt forrású pascal fejlesztőeszközök
A Nyílt forrású programok forráskódja hozzáférhető bárki számára.