Hogyan csinálják a programozási nyelveket? Gépi kóddal?
Bármilyen nyelven lehet fordítóprogramot írni.
A freepascal fordítót pl. pascalban írták meg és le tudja fordítani saját magát...
Nem olyan nehéz, mint sokan hiszik.
A fordítóprogramok 2 fő részre bonthatók analízisre és szintézisre.
A analízis során a forrásállományt vizsgálják, itt 3 fok van:
- lexikális elemzés, ennek a feladata, hogy a forráskódot megfelelően részekre bontsa, felismerje a kulcsszavakat és a változókat. (Ezt egyszerűen, reguláris kifejezésekkel, azaz Chomsky 3-as nyelvosztállyal meg lehet csinálni.)
- szintaktikus elemzés, ennek a feladata, hogy felismerje a program szerkezetét és egy megfelelő szintaxisfát építsen. Ugye itt ismeri fel, ha egy "if" nincs lezárva mondjuk és hasonlók. (Ez Chomksy 2, környezet független nyelvtannal lehetséges.)
- szemantikus elemzés, ennek a feladata, hogy a változók "típusait" ellenőrizze. Azaz itt, hogy a program "értelmes"-e, hibát jelez ha mondjuk egy int típusú változónak double értéket adunk. (Ezt környezetfüggő nyelvtannal teszi, azaz Chomsky 1-el.)
Mind a 3 szinten léphetnek fel hibák.
Ezek után jön a szintézis, aminek 2 fokozata van:
- kód generálás, gondolom ez értelemszerű, ez történhet azonnal gépi kódra, vagy akár assembly-re is.
-optimalizálás, ez nem törvényszerű, de hasznos, méret vagy sebesség szerint lehet gyorsítani a kódon. (Optimalizálás akár az elemzett forrásállományon is történhet.
Vannak kifejezetten fordítóprogram írásra eszközök.
Például a flex nevű lexikális elemző, aminek a megfelelő reguláris kifejezéseket megadva legenerál hozzá egy C kódot, ami lexikálisan elemzi az általunk beadott forráskódot. (Egy sima véges determinisztikus automatát generál. Ezt ugye reg. nyelvtanból nem nehéz.)
Valamint a szintaktikus és szemantikus elemzést megkönnyítő bisonc++, ami szintén egyszerűbb utasításokból elő tud állítani egy elemző kódot.
Sőt, ebbe ugye az ember az adott elképzeld prog. nyelv szabályait beadja, ezzel el is készül a szintaktikus elemző, majd ugyan ide adja be a szemantikus értékek ellenőrzésére a kódot, sőt a végén az assembly kód generálás is ide kerülhet!
Bővebb információ: [link]
Mint már írtam, nem olyan nehéz, mint sokan gondolják.
Pl.: Az ELTE IK-n mindenkinek kötelező legalább részben készíteni egyet, a fenti linken található tárgyhoz.
"Nem olyan nehéz, mint sokan hiszik. "
hehe :D
Márpedig az elsőt gépi kódban írták, és az bizony nemigen volt könnyű...
Manapság már magasabb szintű nyelveket használnak hozzá, de méd így is eléggé sok munka.
#3
Egyébként te melyik nyelvet írtad meg?
Hogy melyiket?
Ez általános leírás volt. :)
(Ráadásul az a szép, hogy ebből záróvizsgáztam. :) )
A régi időkben minden programok gépi kódban írtak, aztán került elő a ford. programok és jöttek a magasabb szintű nyelvek.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!