| Karakterkészlet | |
| Lexikális elemek (szimbolikus nevek) | |
| Szintaktikai elemek (kifejezések) | |
| Utasítások | |
| Programegységek | |
| Fordítási egység | |
| Program |
Programozási módszerek
![]()
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
| Mű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.
![]()
Olyan karaktersor mely betűvel kezdodik és betűvel vagy számjeggyel, folytatódik.
| A programozó által használt eszközök, megnevezésére szolgál. | |
| Hosszuk minimum egy karakter, a maximum implementációfüggő | |
| Az 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 …
| Ezekből épülnek fel az utasítások |
3, Standard azonosítók:
| Olyan 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.
| Az utasítás előtt áll, a címkét kettőspont követi. | |
| A 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.
| A pascalban bárhol elhelyezhető, ahol elhatároló szóköz van. | |
| A megjegyzés elejét és végét jelezni kell, a "{" , "}" jelekkel. | |
| A 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:
| Né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. | |
| Attribútumok (adattípus): Meghatározza, hogy a változó milyen értékeket vehet fel. | |
| Cím: Megadja, hogy a változó tartalma, a memóriában hol helyezkedik el. | |
| É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:
| Adattípus | |
| Érték |
lehet:
| Egész: | |||||
Decimális: [+/-] számjegy sorozat. pl.: -123
| |||||
| Valós: | |||||
| |||||
| Szöveges | |||||
| |||||
| Karakter: | |||||
| |||||
| Má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. | |||||
| Cí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:
|
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.
|

8. Tipizált konstansok:
Kezdoértékes változóként muködik megadása

![]()
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.
| Operandusok: Lehetnek konstansok, nevesített konstansok, változók, függvényhívások. | |
| Operátorok: A nyelvben megengedett műveleti jelek. | |
| Kerek 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:
| Értéke: | |
| Tí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 .
Egyszeru utasítások:
· Értékadás:
· 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:
· Összetett utasítás - szekvencia : BEGIN utasítás [;
utasítás] END
· 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 |
![]()
A pascal nyelv által ismert programegységek
| alprogram: | |
| objektum: nem része ennek a tananyagnak |
| PROGRAMFEJ | |
| program 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.
| DEFINÍCIÓS RÉSZ |
| label 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 } |
| DEKLARÁCIÓS RÉSZ |
| eljárások függvények deklarációi |
| FŐPROGRAM |
Begin
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:
| Ismétlodő részeket csak egyszer kell megírni | |
| A 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:
Végjel |
Eljárások
deklarációja: Procedure név [(form. param. lista)]; Függvények deklarációja: Function név [(form. param. lista)]: típusazonosító; Deklarációs, definíciós
utasítások |
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.
| Az egyes paraméterek a törzsben objektumnévként használhatók (pl.: változó) |
Törzs:
| Olyan objektumok deklarációi és definíciói, melyek az alprogram sajátjai (lokális objektumok) | |
| Végrehajtható utasítások, melyekkel az alprogram által realizált tevékenységet adom meg. | |
| Hivatkozások olyan objektumra, amelyet nem az alprogramon belől deklaráltunk, hanem valamely őt tartalmazó programegységben.. (globális objektumok). |
| Az 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:
| A formális paramétereknek a meghívott alprogram területén van címkomponense. | |
| Az aktuális paraméternek léteznie kell értékkomponensének | |
| Az é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
| A formális paraméternek nincs címkomponense az alprogram területén | |
| Az aktuális paraméter rendelkezik címkomponensel | |
| Hí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.
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:
| A hatáskör megállapítás fordítási időben történik, alapja a programegységek szerkezete. | |
| A 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.
![]()
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.
![]()
A lefordított egységek összelinkelt, futtatható (EXE vagy COM kiterjesztésű) állapota.
![]()
![]()