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.

Free Pascal

GNU Pascal

Dev-Pascal

Lazarus