Hogyan írjunk egy egyszerű fordító, programozó könyvtára

A legjobb módja annak, hogy megértsük a működését fordítóprogramok - írhatunk. Ez segít a rövid, de átfogó útmutató.

Normál fordító végrehajtja a következő lépéseket:

A legtöbb modern fordítóprogramok (például gcc és csengés) az utolsó két pontot ismételjük. A kezdeti generáció használják nem egészen alacsony szintű kód, de a cross-platform nyelvet. Ezután a köztes kódot lefordították az architektúra függ (x86, ARM, és így tovább).

Ezt követően, a tárgykód kész összekötő. A legtöbb natív fordítóprogram automatikusan meghívja a linker teremt végrehajtható kódot, de ez nem fordul. A nyelvek, mint a Java, C # összekapcsolása lehet teljesen dinamikus és fut egy virtuális gép a rendszer indításakor.

A fordítóprogram kell:

Ez a klasszikus sorrend alkalmazható a teljes szoftverfejlesztés terén. Koncentrálj az első bekezdést. Készítsen egy egyszerű dolog, és hogy ez a munka.

Olvassa el a könyvet „Fordítóprogramok: elvek, módszerek és eszközök”. Ez az időtlen, hogy ez a nap nem vesztette jelentősége. „Design a modern fordítóprogramok” -, mint az igazi.

Ha ebben a szakaszban úgy tűnik, túl bonyolult, olvasni, hogy kezdődik valami bevezetés elemzés.

Győződjön meg arról, hogy Ön kényelmesen dolgozik grafikonok, különösen a fák. Ez az alapja az épület programok a logikai szinten.

Nos meghatározza a nyelvet

Segítségével bármilyen jelölést, de biztos, hogy van egy teljes és következetes leírása a nyelvet. Ez magában foglalja mind szintaktikai és szemantikai.

A kedvenc nyelv

Ez teljesen normális - írja compiler Pyhton, Ruby vagy bármilyen más nyelven, hogy tetszik. Az egyszerű algoritmusokat, amelynek az elvét jól tudja. Először a fordító nem kell gyorsan, vagy hatékony, vagy van egy csomó funkciók. Minden, ami szükséges a vele - ahhoz, hogy megfelelően működjön, és könnyen feldolgozásra.

Az is normális, hogy írjon a különböző szakaszaiban a fejlődés a fordító különböző nyelveken, ha szükséges.

Készüljön fel az írás teszt készletek

Minden nyelvet kell teljesen beborítja tesztek, akkor a leghatékonyabb, ha meg kell határozni azokat. Legyen Ön a kiválasztott vizsgálati keretet. Írja be a tesztek első napján. Rational, hogy részesítsék előnyben a „pozitív” tesztek, amelyek azt sugallják helyes működését a kódot.

Rendszeresen elűzi minden tesztben. Stoppol hibás teszteket. Ez nagyon kiábrándító marad semmi rossz egy bizonyos nyelvet, amely nem képes elfogadni érvényes kódot.

Legyen egy jó értelmező

Elemző van egy hatalmas összeg, választani. Írhat a saját, de ez csak akkor működik, ha a szintaxis az Ön nyelv primitív szenilitás.

Elemző észlelnie kell szintaktikai hibákat és jelentse be őket. Írja meg a sok teszt, mind pozitív, mind negatív. Pereispolzuyte írt kód egy adott nyelvet.

A kinyomtatott értelmező létre kell hoznia egy absztrakt szintaxis fa. Ha az adott nyelvet használó modulok, az eredmény az elemző munkák lehet a legegyszerűbb ábrázolása generált „tárgykód”.

Írja szemantikai érvényesítő

Felelősségi területén kiterjed a függőségek más modulokkal Ön nyelvén, rakodás ezeket a modulokat és azok használatát a hitelesítési eljárást. Például ebben a szakaszban ellenőrzött összevetjük a paraméterek száma érkező bemeneti függvény a dugót.

Ismét írni és futtatni sok teszt. Triviális esetekben is szükség van, hogy fontolja meg, valamint kihívást jelent.

generál kódot

Használd az egyszerű technikákat, hogy tudod. megengedett leggyakrabban közvetlenül lefordítani nyelvi konstrukció (pl feltételes második operátor) gyengén paraméteres kód sablont.

Felejtsd el a hatékonyság és a hangsúly csak a helyességét.

Állítsa az alacsony szintű platform-független virtuális gép

Legvalószínűbb, akkor nem nagyon érdekli az alacsony szintű szempontokat, hacsak nem egy szenvedélyes rajongója mindennek kapcsolódó építészet.

Lehetőségek az Ön számára:

  • LLVM. hatékonyan gépi kódját, leggyakrabban x86 és ARM.
  • CLR. Összpontosított .NET.
  • JVM. Célja, hogy a Java világ, multi-platform.

Felejtsd el optimalizálása

Optimalizálás - nehéz. És szinte mindig korai lenne. Létrehoz hatékony, de működőképes kódot. Hajtsák végre az összes nyelvet, mielőtt elkezdené optimalizálás.

Persze, néhány egyszerű optimalizálás teljesen megfelelő a kezdeti szakaszban. De próbáld meg elkerülni a felesleges trükköket, amíg a fordító nem lesz elég stabil.


Kapcsolódó cikkek