Programozási nyelvek


  1. TÖRTÉNETI ÁTTEKINTÉS
  2. 1.1 Ősnyelvek

    1. Természetes fejlődés során minőségileg új dolog születik. Az '50-es évek elején megkonstruálják a Fortrant. Létrehozásának oka a gépi kód alkalmazásának kényelmetlenné válása, valamint az automatizálás lehetőségének felmerülése. A Fortran tudományos, műszaki nyelv, szövegfeldolgozásra alkalmatlan, viszont alkalmas matematikai műveletek végzésére.
    2. Az '50-es évek második felében megszületik a Cobol, amely adatfeldolgozásra, pénzügyi, gazdasági, nyilvántartási feladatokra alkalmas.
    3. 1960-ban létrehozzák az Algol60-t. Ez az első matematikai értelemben definiált nyelv. Hivatkozási nyelve is van, rendezett fogalomrendszerrel rendelkezik.

    1.2 További nyelvek

    '60-as évek első fele: Több száz nyelv születik, általában az Algol60-ra hivatkoznak. (pl. BASIC, de csak a '80-as években válik világméretűvé).
    '60-as évek közepe: Olyan nyelvet akarnak alkotni, amely egyesíti az eddigi nyelvek előnyeit, és operációs rendszer írására is alkalmas. Így jön létre a PL/1. A nyelv túl bonyolultra sikerült, sokmindent megpróbáltak belezsúfolni. A szakma a PL/1-t alkalmatlanak nyilvánítja operációs rendszer írására, és az eddigi nyelveket használja fel.
    1967: SIMULA67: Egy teljesen eltérő filozófiát vezet be, mert objektumorientált.
    1968: ALGOL68: Olyan bonyolultra tervezték, hogy egy ideig fordítóprogramja sem volt. Elméleti jelentőségű.
    1971: Wirth, aki más jelentős nyelvek létrehozásában is segédkezett, megkonstruálja a PASCAL-t. Standard algoritmus-leíró nyelv, átveszi az Algol60 szerepét. Eszközrendszere szűkös, rengeteg implementációja létezik, rengeteg eltéréssel. A gyakorlatban is jelentős, pl. a közoktatásban az első számú nyelv.
    PROLOG: Európában, Franciaországban születik meg, a mesterséges intelligencia kutatás támogatására.
    '70-es évek közepe: Az amerikai hadügyminisztérium újabb kívánságlistát nyújt be, melynek eredménye az ADA. Ez a nyelv saját kategóriájában a csúcs, minden benne van, ami kell. Bonyolult, az elméletben kulcsnyelv, de gyakorlatban is jelentős.
    '70-es évek vége: C. Az ősnyelvek mellett új szerepet játszik, bizonyos verziói a '80-as évektől kezdve a szakma nyelvének számítanak.
    '80-as évek: Jelentős nyelvet nem konstruálnak

    '90-es évek: JAVA. Ma a Java az egyik legelterjedtebb nyelv.


  3. A PROGRAM FELÉPÍTÉSE
  4. A magasszintű nyelven megírt programot szövegnek (forrásszöveg) nevezzük. A programozás a szöveg (forrásszöveg) előállítása.
    Szintaktika: A szöveg összeállítására vonatkozó szabályok összessége.
    Szemantika: A program működésére vonatkozó szabályok összessége.
    Hivatkozási nyelv: Egy magasszintű nyelvnek definíciója van, ez általában szabvány. A hivatkozási nyelv a szintaktikai és szemantikai szabályokat adja meg, definiálja a nyelvet. Csak egy darab van belőle.
    Implementáció: A nyelv adott rendszeren belüli konkrét megvalósítása, általában nem kompatibilis a hivatkozási nyelvvel.
    Fordítóprogramos technika: fordító >> (tárgyprogram) >> szerkesztőprogram >> (futtatható program) >> betöltő
    A szintaktikai hibák a fordításnál, a szemantikai hibák a program futása alatt (vagy egyáltalán nem) derülnek ki. Csak szintaktikailag helyes szövegnek van tárgykódja. A szerkesztőprogram készíti a futtatható programot, a betöltő feladata a futtatható program betöltése a tárba és elindítása.
    Interpreteres technika: Nincs fordítóprogram (>> nincs tárgykód), nincs szerkesztőprogram (>> nincs futtatható program). A forrásszöveget elemei szerint értelmezi, az értelmezés után rögtön az eredményt szolgáltatja. Hátránya, hogy tárgykód hiányában állandóan kiértékel (pl. ciklusoknál), és előfordulhat, hogy az esetleges hibák helyére a tesztelés ideje alatt egyáltalán nem kerül a vezérlés (pl. elágazásoknál), tehát egyes szintaktikai hibák rejtve maradhatnak.

    2.1 Magasszintű nyelvek osztályozása

    2.1.1 Imperatív nyelvek
    Utasításszerkezetűek, tehát alapeszközei az utasítások és a változók. A program szövege utasítássorozat, minden utasítás mögött gépi kód áll. Minden program utasítássorozat, amely mögött több gépi utasítás áll. Kötődnek a Neumann-architektúrához, általában fordítóprogramosak. Algoritmikus nyelvek, a programban azt az algoritmust írom le, amelyet a gép végrehajt, és a probléma megoldása így születik meg. A program a hatását a tár egyes területein lévő értékeken fejti ki.
    Eljárásorientált: A program szövege külön eszközökkel részekre tagolható.
    pl. Fortran, Cobol, Algol60, PL/1, Pascal, C, Ada
    Objektumorientált: Modernebb nyelvek, az absztrakció megjelenése jellemzi.
    pl. Eiffel, Smalltalk, C++, Java, Simula67)

    2.1.2 Deklaratív nyelvek
    Nincs utasításfogalom, a Neumann-architektúrától távol áll. Nem algoritmikusak, a programban csak a problémát fogalmazom meg, a megoldást nem, az algoritmus a rendszerbe van beépítve. A tárhoz a programozónak kevés köze van, nem feladata a tár egyes részeinek módosítása.
    Funkcionális (applikatív) nyelvek: pl. Lisp
    Logikai nyelvek: Matematikai logikai alapokra épül. pl. Prolog

    2.1.3 Más elvű nyelvek
    Az előző nyelvek elveit tagadja, ide olyan nyelveket sorolunk, amiket máshová nem tudunk besorolni, pl. Apl.


  5. SZÖVEGÖSSZEÁLLÍTÁS
  6. Programírás: Szövegösszeállítás a programozási nyelv szemantikai és szintaktikai szabályainak figyelembevételével. A szintaktikai szabályok (formai szabályok) részben szövegesen ismertettetek, részben formálisak. Többféle formális eszközrendszer létezik a szintaktikai szabályok leírására, ezek egyfajta eszközök a nyelv definiálására.

    1. BNF (az Algol60 létrehozásakor keletkezett)
    2. Cobol-szerű formális leírás
    3. Szintakszis-gráf
    4. Hibrid (az előzőek keveréke)



    Szövegelemek: Karakter -> lexikális egység -> szintaktikai egység -> utasítás -> programegység -> fordítási egység -> program

    3.1 Karakterek

    A karakterek a szöveg legelemibb alkotórészei. Minden nyelv definiálja saját karakterkészletét, hivatkozási nyelvében ritkán, általában implementációfüggő. Egy nyelv minden szövegeleme az adott karakterkészletből épül fel. A karakterkészlet mögött mindig kódtábla áll, ez operációs rendszer- vagy hardverfüggő, ezzel a programozási nyelv nem foglalkozik.

    3.1.1 Betűk
    Az angol ABC 26 betűje.
    Nyelvek közötti eltérés a kis- és nagybetűk megkülönböztetésben van.

    3.1.2 Számjegyek
    Egyértelműen a decimális számok.

    3.1.3 Egyéb karakterek
    Implementációfüggő. Olyan nyelvekben, ahol a kisbetű nem betű, ott egyéb karakternek számít. Szintén egyéb karakternek számítanak az ékezetes betűk. Egyes nyelvekben viszont néhány egyéb karakternek nevezett karakter is lehet betű. Kitüntetett szerepe van a szóköznek.

    3.2 Lexikális egységek

    3.2.1 Szimbolikus nevek
    Azonosító: Olyan karaktersorozat, amely betűvel kezdődik és betűvel vagy számjeggyel folytatható. A programozó saját objektumainak megnevezésére használhatja, és a programban mint névre hivatkozhat rá. Hosszára a hivatkozási nyelv nem tesz megkötést, de az implementációk korlátozzák.
    Kulcsszó (alapszó, fenntartott szó): Olyan azonosító jellegű felépítéssel rendelkező karaktersorozat, amelyhez a nyelv rendel jelentést. Csak az adott értelemmel használható (jelentését a programozó nem változtathatja meg).
    Standard azonosító: Karaktersorozat, azonosítónak megfelelő felépítéssel. Jelentését a nyelv definiálja, de a programozó megváltoztathatja.
    Azonosító nélkül nem lehet programot írni. Egyes nyelvekben nincsenek kulcsszavak, nincs olyan karaktersorozat, amelyet ne használhatnánk azonosítónak.

    3.2.2 Címek
    Lexikális elem, az utasítás azonosítására szolgál, a program más pontjáról tudunk egy adott utasításra hivatkozni. A nyelvek egy részében ismeretlen fogalom, de a többség ismeri. Formailag előjel nélküli egész szám vagy azonosító lehet.

    3.2.3 Elhatároló jelek
    A program, mint szöveg, sorokra tagolódik, de lényeges a sor és az utasítás kapcsolata.
    Kötött formátumú nyelvek (ősnyelvek): Egy sorba csak egy utasítást enged meg, esetleg több sorba egy utasítást (tördeléssel). A programozási eszközök soron belüli pozíciója rögzített a kártyaorientáltság miatt.
    Szabad formátumú nyelvek (Algol60 óta): A sor és az utasítás kapcsolata elválik (lehetséges: egy sor egy utasítás, egy sor több utasítás, több sor több utasítás), a soron belüli pozíció nem rögzített, de el kell határolni, hogy egy utasítás meddig tart.
    Eszközök a megvalósítására:

    A tagolás célja, hogy a fordítóprogram bizonyos szövegelemeket meg tudjon különböztetni. A szimbolikus neveket, címkéket, megjegyzéseket és a konstansokat mindig el kell határolni. Lexikális elem az, ami két elhatárolójel között szerepel.
    Elhatárolójelek: : (kettőspont), ; (pontosvessző), ( ) (zárójel) stb. Ha nincs, akkor általános elhatároló jel a szóköz (akárhány lehet, akár elhatároló jel mellett is).

    3.2.4 Megjegyzés
    Olyan nyelvi eszköz, amely nem a fordítóprogramnak szól, hanem annak az embernek, aki a szöveget nézi (működési leírás, használati előírás stb.). Száma és hossza tetszőleges.
    Ősnyelvek: A megjegyzés egy teljes sor, a sor első karaktere jelzi, hogy megjegyzés következik.
    Kötött formátumú nyelvek: A sor bizonyos pozícióin kezdődik a megjegyzés.
    Nem kötött formátumú nyelvek: Bárhol lehet megjegyzés, ahol a program szövegében szóköz, mint elhatároló jel előfordulhat.
    A megjegyzésen belüli szóközök szimpla karakterek, és a kis- és nagybetűk is különböznek.

    3.2.5 Változó
    Olyan programozási eszköz, amelynek négy komponense van:
    1. Név:
    Egyedi azonosító, a program szövegében a változó mindig a nevével jelenik meg, ez hordozza a komponenseket.
    2. Attribútumok:
    A változó futás közbeni viselkedését, az általa felvehető értékeket határozzák meg. Az eljárásorientált nyelvekben a legfontosabb attribútum a típus, nem típusos nyelvekben ilyen komponens nincs, de más attribútum lehetséges.
    Változóhoz attribútum rendelés deklaráció segítségével történhet.

    1. explicit deklaráció
      Mindig a programozó végzi. A nyelvben külön utasítás van rá. Az utasításban szerepeltetni kell a változó teljes nevét és az attribútumokat.
    2. implicit deklaráció
      Szintén a programozó végzi. A deklarációs utasításban betűkhöz rendelem az attribútumokat. Ha a változó neve nem szerepelt explicit deklarációs utasításban, de nevének első betűjéhez rendeltem attribútumot, akkor a változó az adott attribútummal rendelkezik.
    3. automatikus deklaráció
      A programozó nem deklarál, a változó nevére sem explicit, sem implicit deklaráció nincs. Az attribútum hozzárendelését a változóhoz a fordítóprogram végzi, a változó nevének kezdőbetűje, ritkán egyéb karakterek segítségével.
    3. Cím
    A tár azon területének a címe, ahol az adott változó értéke elhelyezkedik.
    Címhozzárendelés, tárkiosztási módok:
    1. statikus címhozzárendelés
      Egy változóhoz a címkomponens a futás előtt rendelődik, később állandó. Végezheti a fordítóprogram, a szerkesztőprogram vagy a betöltőprogram.
    2. dinamikus címhozzárendelés
      Változó a futási időben kap címkomponenst (amikor aktivizálódik az a programegység, amelynek lokális változója). Ez futás közben változhat, lehet olyan futási idő intervallum, amikor nincs címkomponens. A hozzárendelést a futtatórendszer végzi.
    3. programozó által vezérelt címhozzárendelés
      A hozzárendelés a program szövegébe van beépítve.
      • abszolút cím rendelése a változó nevéhez
      • relatív: Cím hozzárendelése a változó nevéhez egy, már a tárban elhelyezett objektum címéhez képest helyezem el a változót.
      • a programozó a futtatórendszer segítségét kéri a hozzárendeléshez, a többit a futtatórendszer végzi. A programozó megmondhatja, hogy az adott változónak bizonyos pillanattól kezdve legyen címkomponense. Külön utasítás van a címkomponens megszüntetésére.
    4. Érték
    Az adott tárrészen elhelyezkedő bitkombináció. A típus eldönti, hogy hány byte-on, milyen ábrázolási móddal van ábrázolva a változó, és meghatározza az értékhatárokat.
    A értékkomponens hozzárendelése a változó nevéhez:

    3.2.6 Nevesített konstans
    Olyan programozási eszköz, amelynek három komponense van:
    1. Név
    Azonosító.
    2. Típus
    Az adott nyelvben használt típusok valamelyike.
    3. Érték
    Nem változtatható, mivel címkomponens nincs, vagy legalábbis a programozó számára nem hozzáférhető.
    Kérdés, hogy a nyelvekben van-e beépített (standard) nevesített konstans, a programozó definiálhat-e sajátot, hogyan adható meg az értéke (konstanssal, konstans kifejezéssel vagy kifejezéssel), milyen típussal rendelkezhet (skalár vagy strukturált).

    3.2.7 Literál, konstans
    Programozási eszköz, amelynek két komponense van: típus és érték. Nem deklarálható, mindig önmagát definiálja, a felírt karaktersorozat alakja dönti el a típusát és az értékét. Segítségével a program szövegébe fix érték építhető be.

    Egy szintet vissza, vagy vissza a főmenübe.