On palju programmeerimiskeeli, millel on oma ainulaadsed omadused. Kuid selleks, et mõnes neist kirjutatud programm töötaks, peate selle edastama. Mõnikord töötatakse programmeerimiskeeled välja nende enda vajaduste jaoks (näiteks automatiseerimise tugi suurtes rakendustes) ja siis on vaja kirjutada tõlk.
Vajalik
- - lähtekeele loomulik grammatika või BNF;
- - arendusvahendid.
Juhised
Samm 1
Valmistage andmed ette lähtekeelse teksti leksikaalseks analüüsiks. Loetlege kõik märgid keeles. Jagage need kategooriatesse (märksõnad, numbri- ja stringiliitrid, identifikaatorid, tühik, kirjavahemärgid jne).
2. samm
Rakenda moodul või lekser. Sisendis peaks see saama "toore" andmevoo ja väljundis moodustama loendi elementidest, mis sisaldavad märke ja nende tüübi identifikaatoreid järjestuses, milles need algtekstis esinevad. Parsimisprogramm võib olla üsna lihtne " ühetasandiline "skanner. Vigade taastamise rakendamine pole mõttekas. Kehtetuid tähemärke tuleks käsitleda vigadena.
3. samm
Valmistage andmed sõelumiseks ette. Lähtekeele loomuliku grammatika või BNF põhjal koostage selle LL1 grammatika. Selle grammatika tüübi põhjal koostage sõelumisskeem kehtivate märkide kategooriate ja keele semantiliste konstruktsioonide osas.
4. samm
Rakendage moodul või parser. Sisendina peaks see saama leksikaalse sõelumise etapis koostatud märgendite loendi. Arendage rekursiivsed süntaksikontrolli algoritmid, kasutades kolmandas etapis loodud skeemi. Vajadusel rakendage vigade taastamise mehhanismid. Funktsioonide, klassi meetodite arvutamiseks puu ehitamiseks lisage parsimisalgoritmidele funktsionaalsus. Parsimisalgoritmide õige struktuuri korral saab seda funktsionaalsust ilma probleemideta rakendada. See väldib vajadust seda eraldi moodulina rakendada. Loodud andmestruktuurid peaksid sisaldama käskude loendeid "lamedate" jadade kujul (postfixi vormis laiendatud aritmeetilised avaldised, mis sobivad virnamasinas arvutamiseks, arvutuslike juhiste järjestuste kombinatsioonideks ja tingimuslikeks või tingimusteta hüpeteks jne)..
5. samm
Vajadusel looge optimeerimismoodul. See peaks töötlema ja muutma eelmises etapis ettevalmistatud andmestruktuure. Optimeerimisalgoritmid ja -meetodid on väga erinevad.
6. samm
Arendage koodigeneraator. Neljandas või viiendas etapis ettevalmistatud struktuuride töötlemisel peaks see lihtsalt teisendama abstraktsete käskude jadad konkreetsel platvormil täitmise juhisteks.
7. samm
Vajadusel looge sideaine programm (linker). See peaks moodustama tulemuseks oleva käivitatava mooduli, valides koodisegmentide asukoha, arvutades siltide aadressid jne.