Hogyan csinálják (csinálták)? többi lent
Huhh... Elég nehezet kérdezel, ezt 6. félévben oktatják nálunk (ELTE-IK) BSc-n.
Vázlatosan kb. úgy, hogy megalkotnak egy nyelvet (ez lesz a programozási nyelv), amit különféle szabályokkal le lehet írni. Fontos szempont, hogy algoritmikusan eldönthető legyen, hogy eleme-e egy szöveg (a program) a nyelvnek - ez azt jelenti, hogy a program érvényes. Ha eleme, akkor egy másik algoritmus meghatározza, hogy melyik elemi kifejezésekből és milyen módon épül fel a program, ezt a szerkezetet pedig egy fordító újraépíti egy másik nyelven (ez lehet gépi kód, de akár egy magasabb szintű nyelv, pl. a .NET is). Ez éppen a fordítókra (compiler) igaz, de az értelmezők (interpreter) is hasonlóan működnek, csak azok parancsonként fordítanak.
A fordítót/értelmező meg kb. bármilyen rendelkezésre álló nyelven meg lehet írni, akár gépi kódban is, csak úgy macerás.
Egy nyelvet első sorban a szintaxisa jellemez.
Egy nyelv készítésekor először ki kell találni magát a nyelvet: mire akarod használni, milyen elemei lesznek, miket kell tudnia (előzőnek: nem feltétlenül kell "teljesnek" lennie, hiszen lehet egy leíró nyelv is valami doménre). Ha a koncepció megvan, akkor általában egy másik nyelven szabatosan leírják. Úgy kell elképzelni, mint amikor egy szöveges feladatot képletekké formálnak, hogy a matematikai módszerekkel már kiértékelhető legyen. Itt is így van, a konkrét "képleteket" ld. lent.
A nyelvhez kell egy parser. Ez nem más, mint egy program, ami a készített nyelven írt szöveget fel tudja dolgozni. Hogy mit csinál vele, ld. lent.
A feldolgozás általában úgy történik, hogy legalább két menete van a szöveg feldolgozásának:
1. Lexikai analízis - Ekkor egy célprogram a programkódot "szavakra", illetve elemeire bontja, mint pl. kulcsszavak, számok, stringek, műveleti jelek, stb. Ilyenkor általában a megjegyzések és a szóközök is "eltűnnek" (olyan nyelveknél, ahol a whitespace-ek nem jelentenek semmit), illetve lenyelődnek. A szabályokat, amik megmondják, hogy hogyan és mit kell nyelvi elemnek értelmezni, egy ehhez hasonló nyelven is meg lehet fogalmazni: [link] Ekkor persze ezt a leírást szintén egy program dolgozza föl, ami készít egy másik programot, ami a lexikai analízist végrehajtja. Ez utóbbi neve általában a Lexer. Ez része a fent említett, nyelvi szöveget feldolgozó programnak.
2. Parsolás (nyelvi elemzés) - Ez a fázis már nyelvi elemek sorozatát látja, nem karakterek sorozatát. Az előző leíráshoz hasonló formális "képlettel" megadható: [link] Úgy is értelmezheted, hogy van egy egyszerű formája annak, hogy leírd, milyen elemnek kell mi után hányszor következnie ahhoz, hogy a nyelved érvényes mondatai előálljanak. Ebből a leírásból készül a parser. Ez a felismert nyelvi struktúrákból általában egy fa struktúrát készít: [link] Ezt úgy képzelheted el, mint egy absztrakt, szövegfüggetlen reprezentációja a bevitt forráskódnak, ahol már egyértelmű, hogy mit jelent a program.
3. A további teendők már attól függenek, hogy mi a cél:
3.a. Az absztrakt szintaxis fát (AST) közvetlenül is lehet futtatni (ha úgy írod meg a fát alkotó csúcsokat, hogy legyen futtatási funkciójuk).
3.b. Az egész fát egy algoritmus lefordítja egy adott processzor és platform gépi kódjává (ezek a compilerek).
3.c. Az egész fát egy algoritmus lefordítja valami virtuális gép gépi kódjává (pl. Java, .NET nyelvek).
3.d. Az egész fából egy program egy másik nyelven írt forrást készít (cross-compiler).
3.e. Az AST felhasználható egy editorban szintaktikai színezésre (amikor a szerkesztő beszínezgeti az elemeket).
3.f. Végezhetsz kódanalízist (pl. megszámolhatod, hogy miből mennyi van a kódban, vagy hány változó, stb.)
stb.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!