Pascal Nyelv szerkezete
bulletKarakterkészlet
bulletLexikális elemek (szimbolikus nevek)
bulletSzintaktikai elemek (kifejezések)
bulletUtasítások
bulletProgramegységek
bulletFordítási egység
bulletProgram

Programozási módszerek

Karakterkészlet

Minden programozási nyelv rögzíti a saját karakterkészletét:

Betű: az angol ABC betűi: (A..Z, a..z ). A PASCAL nem tesz különbséget a kis és nagybetűk között. Betűként jelenik meg, még néhány speciális jel, pl.: "_" jel

Számjegyek: 0..9

Egyéb karakter: (műveleti, határoló, írásjelek, szóköz) pl.: [ ] + - * / < > . , : ; ^ stb.

A pascalban az utasítások a soroktól függetlenek, a végüket bizonyos alapszavak, vagy ennek hiányában a ";" jelzi. (A turbo pascal, általában az alapszó megléte esetén is megengedi a ";" használatát.

A lexikális elemeket általában el kell választani egymástól, ezt valósítják meg az elhatároló jelek. Ezek a
bulletMűveleti jelek, Zárójelek, Valamilyen írásjelek, Szóköz.

Szóköz elhelyezhető minden elhatároló jel előtt és után is.

Minden olyan helyen, ahol egy szóköz megengedett, ott tetszőleges számú megengedett.

Vissza

Lexikai egységek:

1, Azonosítók:

Olyan karaktersor mely betűvel kezdodik és betűvel vagy számjeggyel, folytatódik.
bulletA programozó által használt eszközök, megnevezésére szolgál.
bulletHosszuk minimum egy karakter, a maximum implementációfüggő
bulletAz imperatív nyelvek egyik legfontosabb elemei

2, Kulcsszó, alapszó:

Olyan karaktersorozat, melynek a nyelv tulajdonít jelentőséget és a programozó, ezt nem változtathatja meg. Pl.: begin, end, if …
bulletEzekből épülnek fel az utasítások

3, Standard azonosítók:
bulletOlyan karaktersor, melynek a nyelv tulajdonít jelentőséget, de a programozó ezt megváltoztathatja. pl.: Pascal függvénynevek

Az azonosítókat, kulcsszavakat, standardazonosítókat szimbolikus neveknek is nevezzük

4, Címke:

A program szövegében az utasítások azonosítására szolgál, így a program más helyéről hivatkozni lehet az adott utasításra.
bulletAz utasítás előtt áll, a címkét kettőspont követi.
bulletA standard pascal-ban csak előjelnélküli egész lehet, a turbó pascal viszont megengedi az azonosító használatát

5, Megjegyzés:

Olyan karaktersorozat, mely a forrásprogramot olvasó személynek szól, a program menetére nincs hatással.
bulletA pascalban bárhol elhelyezhető, ahol elhatároló szóköz van.
bulletA megjegyzés elejét és végét jelezni kell, a "{" , "}" jelekkel.
bulletA megjegyzés szövegén belől a szóköz nem elhatároló jel, a megjegyzésben a pascal karakterfogalmán kívül eső jelek is megengedettek. pl.: ékezetes karakterek.

6, Változók:

Az imperatív nyelvek legfontosabb programozói eszköze.

Jellemzői:
bulletNév: Azonosító, a program szövegében a változó mindig a nevével jelenik meg, változónevet mindig a programozó választ.
bulletAttribútumok (adattípus): Meghatározza, hogy a változó milyen értékeket vehet fel.
bulletCím: Megadja, hogy a változó tartalma, a memóriában hol helyezkedik el.
bulletÉrték:

A változó, az alkalmazásától függoen képviselheti ezeket. pl.: Az értékadás jobb oldalán címet jelent, kifejezésben értékkomponensével jelenik meg.

Attribútum hozzárendelése változókhoz: A pascal szigorúan típusos nyelv, ezért a változókhoz az attribútumokat, mindig explicit módon, deklarációval kell megadni. (ld.: Var)

Címkomponens hozzárendelése változókhoz:

A pascal dinamikus tárkiosztást vall, tehát a változó akkor kap címkomponenst, amikor aktivizálódik az a programegység, amelynek ő lokális változója és a címkomponens megszunik, ha az adott programegység befejezi működését. Ezen túl, még a programozónak is meg van a lehetosége, hogy futási időben a program adott pontján abszolút ill. valamihez képest relatív címet rendeljen a változóhoz.

Élettartam: Címkomponenshez kapcsolódó fogalom. Egy adott objektum élettartama a futási idő azon része amelyben az objektumnak van címkomponense. (Lásd dinamikus tárkiosztás)

Értékkomponens hozzárendelése változókhoz:

Értékadó utasítással:

Input segítségével: Valamely perifériáról olvasunk be értéket a változónak

Kezdőérték adással: A turbo pascalban lehetoségünk van arra, hogy a változó a címkomponenssel egyszerre értékkomponenst is kapjon. Ehhez a deklarációs részben nem csak a változó nevét és attribútumát, hanem értékkomponenst is meg kell adni. A tp7 verziótól kezdve alapértelmezés szerint kezdőértéket ad, a rendszer "kinullázza" a frissen definiált változókat, így nem fordulhat elő az a hiba, hogy egy érték nélküli változót helyezünk el egy kifejezésben.

7, Konstansok:

Olyan programozási eszközök, melyek önmagukat definiálják, nincs neve. Olyan karaktersor, mely meghatározza saját típusát és értékét.

Jellemzői:
bulletAdattípus
bulletÉrték

lehet:
bulletEgész:
bulletDecimális: [+/-] számjegy sorozat. pl.: -123
bulletHexadecimális: $ hexadecimális-számjegy sorozat. pl.: $1a
bulletValós:
bullet
bulletTizedes tört: tizedes pontot tartalmazó szám. pl.: 1,23
bulletExponenciális: e betűt tartalmazó szám: 123e-2
bulletSzöveges
bullet
bulletKaraktersor: pl.: 'Péter'
bulletKarakter:
bullet
bulletEgy darab karakter: pl.: a
bulletMás nyelvekben létezik: Logikai is, de ezt a konstanstípust a pasal nem ismeri, helyette a true (1) és a false (0) nevesített konstansokat, használja.
bulletCím is, de ezt a pascal elojel nélküli egészként kezeli, és a környezet dönti el, hogy címként használjuk.

8. Nevesített konstansok:

Jellemzői:
bullet
bulletNév
bulletAdattípus
bulletÉrték

A nevesített konstans neve mindig az értéket, képviseli.

Címük nem lényeges (létezik, de nem dolgozhatunk vele ill. nem illik.)

Értékük állandó, deklarációban konstanssal ill. konstans-kifejezéssel adjuk meg, értéke futás közben nem változhat.
bullet
bulletA pascalban vannak standard konstansok: pl.: true, false, nil
bulletA programozó is definiálhat, nevesített konstansokat:

8. Tipizált konstansok:

Kezdoértékes változóként muködik megadása

Vissza

 Szintaktikai elemek (kifejezések):

Feladatuk, hogy, a program egy adott pontján a már ismert értékekbol új értékeket állítsanak elő.

Formálisan a következo elemekbol áll.
bulletOperandusok: Lehetnek konstansok, nevesített konstansok, változók, függvényhívások.
bulletOperátorok: A nyelvben megengedett műveleti jelek.
bulletKerek zárójelek: Az operátorok végrehajtásának változtathatjuk meg. A felesleges (redundáns) zárójelek megengedettek.

Az operátorok vagy zárójelek nem kötelező részei a kifejezésnek, ezek akár el is hagyhatók, pl.: egy változó önmagában is kifejezésnek számít.

Jellemzoi:
bulletÉrtéke:
bulletTípusa:

Ezek a paraméterek a kifejezés kiértékelése során kapnak értéket. A pascal infix alakot használ, balról jobbra szabállyal és precedencia érvényesítéssel. A szigorúan típusos nyelvek a típus-egyenértékuség elvét vallják az eredmény típusának meghatározásához, bár a pascal egy-két kivételt megenged. pl.: egy egész osztása egy valóssal. A pascal a típus-egyenértékuségnél a név egyenértékűséget vallja. Logikai muveleti jelek esetén a futtatórendszer üzemmódjaként beállítható, hogy legyen-e a rövidzár kiértékelés .

Vissza

Utasítások

 Egyszeru utasítások:
bullet· Értékadás:
bulletváltozó := kifejezés Pl. összeg := 245;
ilyen esetekben az értékadás jobb oldalán lévo változó mint címkomponens szerepel, melyhez hozzárendeljük a jobb oldalon lévo kifejezés értékkomponensét.

· Eljáráshívás: eljárás-azonosító [(aktuális paraméterlista )]

· metódus hívás : OOP-ben.

· vezérlés átadás : GOTO címke Pl. GOTO VÉGE;

· Gépi kódú betét : INLINE(elem)

· Assembler betét: ASM utasítás END

Struktúrált utasítások:
bullet· Összetett utasítás - szekvencia : BEGIN utasítás [; utasítás] END
bulletUtasításblokk minden olyan helyen elhelyezhető, ahol egy utasítás szerepelhet, így azon helyeken, ahol csak egy utasítás adható meg a blokkok segítségével tetszőleges utasítást elhelyezhetünk. A pascal blokk fogalom nem egyezik a más nyelvekben megadott blokkfogalommal, itt nincsenek a blokkoknak hatáskör-elhatárolási funkciójuk.

· elágazás - szelekció : IF feltétel THEN utasítás ELSE utasítás

· Választás - többágú szelekció :

CASE szelektor OF utasítás [; utasítás] ELSE utasítás [;utasítás]

· Hátul-tesztelő ciklus - iteráció: REPEAT utasítás UNTIL kilépési feltétel

· Elol-tesztelő ciklus - iteráció: WHILE belépési feltétel DO utasítás

· Elol-tesztelő fix lépésszámú ciklus - iteráció : FOR ciklusváltozó := kezdoőrték TO/DOWNTO végérték DO utasítás

· Minosítő utasítás: WITH változó-azonosító DO utasítás

Vissza

Programegységek:

A pascal nyelv által ismert programegységek
bulletalprogram:
bulletobjektum: nem része ennek a tananyagnak

Pascal program felépítése

Alprogram

Név hatásköre Lokális, globális név

A pascal program felépítése:
bulletPROGRAMFEJ
bulletprogram azonosító;

uses azonosító;

A uses után a program által használt UNIT-okat (külső file-ok, amelyekben előre elkészített univerzálisan hasznosítható függvényeket eljárásokat típusokat, konstansokat adunk meg) soroljuk fel.

bulletDEFINÍCIÓS RÉSZ
bulletlabel címke; {a programban használt címkék definiálása}

type azonosító=típusazonosító; {a programozó által definiált típusok}

const azonosító=konstans kifejezés; {a programban használt konstansok definiálása}

var azonosító:típusazonosító/típusleírás; { a program változóinak definiálása }

bulletDEKLARÁCIÓS RÉSZ
bulleteljárások függvények deklarációi
bulletFŐPROGRAM
bulletBegin
bullet
bulletutasítások

 end.

Alprogram: Az eljárásorientált nyelvek jellegzetes egysége, a mélységében tagolja a programszöveget. A pascal nyelvben az alprogramok, újabb alprogramokat tartalmazhatnak, így a program tetszőleges mélységben struktúrálható.

Elonye:
bulletIsmétlodő részeket csak egyszer kell megírni
bulletA procedurális absztrakció része, "felparaméterezhető", így univerzálisan alkalmazható. Ennek segítségével valósíthatjuk meg a strukturális programozást is.
Alprogrm definíciója:
Fej:
bullet
bulletNév
bulletFormális paraméterlista
Törzs:
bullet
bulletDeklarációs, definíciós utasítások
bulletVégrehajtható utasítások.

Végjel

Eljárások deklarációja:

Procedure név [(form. param. lista)];
Deklarációs, definíciós utasítások
begin
eljárásblokk
end;

Függvények deklarációja:

Function név [(form. param. lista)]: típusazonosító; Deklarációs, definíciós utasítások
begin
függvényblokk
név:=kifejezés
end;

Név: Szokásos azonosító

Formális paraméterek: Az alprogram ezek segítségével kommunikál az ot meghívó programegységgel. A formális paraméterek a programegység meghívását követően az aktuális paraméterek segítségével kapnak értéket.
bulletAz egyes paraméterek a törzsben objektumnévként használhatók (pl.: változó)

Törzs:
bulletOlyan objektumok deklarációi és definíciói, melyek az alprogram sajátjai (lokális objektumok)
bulletVégrehajtható utasítások, melyekkel az alprogram által realizált tevékenységet adom meg.
bulletHivatkozások olyan objektumra, amelyet nem az alprogramon belől deklaráltunk, hanem valamely őt tartalmazó programegységben.. (globális objektumok).
bulletAz alprogram környezete alatt a globális változók együttesét értjük.

Alprogramok lehetnek:

Eljárás: Olyan alprogram, melynek célja bizonyos tevékenység végrehajtása.

Függvény: Olyan programegység, melynek célja egy érték meghatározása, melyet a függvény neve hordoz. Mivel a függvénynévhez értéket rendelünk a definíciós utasításban meg kell adni a függvény érték típusát is.

Hivatkozás az alprogramokra:

Eljárás: utasításszeruen: eljárásnév(aktuális paraméterlista)

Függvény: Csak kifejezésben pl.: változó := függvénynév(aktuális paraméterek)

Az alprogramok tetszés szerint hívhatják egymást, ilyenkor a hívási láncban lévő összes alprogram aktívnak tekintendő. Mindig a legutoljára hívott alprogram fejezi be leghamarabb a tevékenységét. Amennyiben egy alprogram önmagát, vagy az őt tartalmazó programegységet hívja meg, akkor közvetlen ill. közvetett rekurzióról beszélünk. A pascal nyelv megengedi a rekurziót (ezt a forward kulcsszót követő alprogramfej előzetes megadásával jelezni kell).

Alprogramok befejeződik, ha:

Szabályos

Szabálytatlan

Elérjük a végét
Eljárások esetén befejeztet
ő utasítással (Exit)
Goto-val kiugrunk a programegységből
Teljes programot befejeztet
ő utasítással (Halt)

Paraméterkiértékelés:

Az a folyamat, amikor a formális és aktuális paraméterek egymáshoz rendelődnek. Meghatározódnak az alprogram muködéséhez szükséges adatok.

Sorrendi kérdés:

A paraméterátadás a felírás sorrendjében történik, szükséges, hogy sorrendben a formális és aktuális paraméterek típusegyenértékuek legyenek.

Számbeli kérdés, lehetoségek:

1, Az aktuális paraméterek számának meg kell egyeznie a formális paraméterek száméval

2, Az aktuális paraméterek száma kevesebb lehet, ilyenkor a többit alapértelmezett értékét veszi fel

3, A formális paraméterek száma nem kötött, nem ismert, így az aktuális paraméterek száma is tetszőleges lehet

A pascal a standard függvények ill. standard eljárások esetén mindhárom módszert ismeri, de a programozó által megadott alprogramoknál, a számbeli egyezésnek meg kell lenni.

Információ mozgása, lehetőségek:

1, Érték szerinti paraméterátadás:
bulletA formális paramétereknek a meghívott alprogram területén van címkomponense.
bulletAz aktuális paraméternek léteznie kell értékkomponensének
bulletAz értékkomponens híváskor meghatározódik, átmásolódik az alprogram területére és ezután kezd lefutni a program.

Ilyen módon a hívó programegység tud értéket átadni a hívott programegységnek.

formális paraméterlista: (azonosító1: típusazonosító; azonosító2: típusazonosító)

aktuális paraméterlista : (kifejezés1, kifejezés2)

2, Cím szerinti paraméterátadás
bulletA formális paraméternek nincs címkomponense az alprogram területén
bulletAz aktuális paraméter rendelkezik címkomponensel
bulletHívás esetén a cím adódik tovább.

Ilyen módon a hívó programegység kaphat is értéket, vissza is adhat értéket a hívó egységnek. Hátránya, az alprogram hozzáfér a hívó programegység területéhez így hibás programfutás esetén nagyobb problémákat okozhat. Más programnyelvek egyéb módszereket is ismernek.

A pascalban függvényeknél is megengedett ez a módszer, így a függvény is meg tudja változtatni a környezetét, ezt mellékhatásnak nevezik, ez nem okoz hibát, bár logikailag az alkalmazása ellentmondásos, elkerülendő.

formális paraméterlista: (var azonosító1: típusazonosító; var azonosító2: típusazonosító)

aktuális paraméterlista : (változó1, változó2)

pl.:

 PROCEDURE OSSZEAD ( a: INTEGER; b: INTEGER; VAR c: INTEGER )
BEGIN
READLN(a,b); { a,b - bemeno változó }
c:=a+b; { c - kimeno változó }
WRITELN(c);
END;

Ez esetben a és b változót érték szerinti paraméterátadással, míg c cím szeinti paraméterátadással definiáltuk.

Hatáskörkezelés

Az alprogramok definiálása során létrehozhatunk új változókat, konstansokat. Felmerül a kérdés mikortól meddig érvényesek ezek a nevek ill. mi történik, ha olyan nevet adok meg, ami már valamely más programegységben létezik? Ezeket a problémákat definiálja a hatáskörkezelés.

Egy név hatásköre az a programrész, amelyben, felhasználási módja, jellemzői, jelentése ugyanaz. Egy progrmegységen belol egy név kétszer nem deklarálható.

A pascal alapvetoen statikus hatáskörkezelést valósít meg tehát:
bulletA hatáskör megállapítás fordítási időben történik, alapja a programegységek szerkezete.
bulletA pascal jellegzetessége, hogy a név hatásköre a deklarációjától kezdődik, ellentétben a többi nyelvel, ahol az adott programegység aktivizálódásakor.

definíciók:

Lokális név: Az a név, mely az adott programegységben lett deklarálva, ott lokális név.

Szabad név: Olyan név, mely az adott programegységben nem lett deklarálva, ott szabad név.

Név hatásköre: Az a programegység, amelynek az adott név lokális neve, továbbá, minden olyan programegység, amelyet az adott programegység tartalmaz. Kivéve, ha valamelyik programegységben a nevet újradefiniáltuk. Ilyenkor az újradefiniált részt nem számítjuk a hatáskörbe.

Globális név: Egy programegységben lévő szabad név globális név, ha valamely ot tartalmazó programegységben lokális név, ellenkező esetben programhiba.

Válaszolva a feltett kérdésre egy névhez rendelt érték, típus stb. addig érvényes, amíg az adott programegységben vagyunk, ill. minden alprogramjában, kivéve, ha valamelyik alprogramban újradefiniáltuk. Ekkor az újradefiniáló alprogram ill. annak a további alprogramjai nem része az eredeti hatáskörnek, mivel itt a név már új jellemzokkel bír. Azon programegységekben, amelyek nem alprogramjai a vizsgált programegységünknek a név nem használható, vagy valahol máshol megadott jellemzoi az érvényesek.

pl.: Egy A egységben deklarált X változó akkor és csak akkor látható (hivatkozható) egy B egységben, ha teljesülnek a következő feltételek :

· A és B ugyanazon egységek vagy a B egység alprogramja A-nak és az X változó előbb volt deklarálva, mint a B egység.

· X-et nem deklaráljuk újra egy olyan C egységben, amely alprogramja A-nak, de nem alprogramja B-nek, vagy egy szinten van B-vel.

Vissza

Fordítási egység:

Lehetőség van több külön fordított egység egy programmá szervezésére.

Alkalmazása: ha többen készítenek egy programot vagy szisztematikusan nagyobb egységekben készítjük illetve, ha gyakran használt rutinjainkat egy előre elkészített egységbe szervezzük és azt kívánjuk használni.

Vissza

Program

A lefordított egységek összelinkelt, futtatható (EXE vagy COM kiterjesztésű) állapota.

Vissza