Mnogo je programskih jezika koji imaju svoje jedinstvene karakteristike. Ali da bi program napisan u bilo kojem od njih funkcionirao, morate ga emitirati. Ponekad se programski jezici razvijaju za vlastite potrebe (na primjer, podrška za automatizaciju u velikim aplikacijama) i tada je potrebno napisati prevoditelja.
Potrebno
- - prirodna gramatika ili BNF izvornog jezika;
- - razvojni alati.
Upute
Korak 1
Pripremite podatke za leksičku analizu teksta na izvornom jeziku. Navedite sve tokene na jeziku. Podijelite ih na kategorije (ključne riječi, numerički i niz znakova, identifikatori, razmaci, interpunkcija itd.).
Korak 2
Primijenite modul ili lexer. Na ulazu bi trebao primiti "sirovi" tok podataka, a na izlazu formirati popis elemenata koji sadrže tokene i identifikatore njihovih vrsta u slijedu u kojem se pojavljuju u izvornom tekstu. Program za raščlanjivanje može biti prilično jednostavan " jednorazinski "skener. Provođenje oporavka od pogrešaka nema smisla. Nevažeće znakove treba tretirati kao pogreške.
3. korak
Pripremite podatke za raščlanjivanje. Na temelju prirodne gramatike ili BNF-a izvornog jezika, sastavite njegovu LL1 gramatiku. Na temelju ove vrste gramatike, izradite shemu raščlanjivanja u smislu kategorija valjanih leksema i semantičkih konstrukcija jezika.
4. korak
Primijenite modul ili parser. Na ulaz bi trebao primiti popis tokena pripremljen u fazi leksičkog raščlanjivanja. Razviti algoritme rekurzivne provjere sintakse koristeći shemu koju ste stvorili u trećem koraku. Ako je potrebno, implementirajte mehanizme oporavka pogrešaka. Dodajte funkcionalnost algoritmima raščlanjivanja kako biste izgradili stablo za izračunavanje funkcija i metode klase. Uz ispravnu strukturu algoritama raščlanjivanja, ova se funkcionalnost može implementirati bez problema. Time se izbjegava potreba za njegovom implementacijom kao zasebnog modula. Stvorene strukture podataka trebale bi sadržavati popise uputa u obliku "ravnih" sekvenci (aritmetički izrazi prošireni u postfiksni oblik pogodan za izračunavanje na stroju za slaganje, petlje pretvorene u kombinacije nizova računskih uputa i uvjetni ili bezuvjetni skokovi itd.).
Korak 5
Po potrebi izradite optimizacijski modul. Trebao bi obraditi i transformirati strukture podataka pripremljene u prethodnom koraku. Algoritmi i metode optimizacije vrlo su raznoliki.
Korak 6
Razviti generator koda. Pri obradi struktura pripremljenih u četvrtom ili petom koraku, trebao bi jednostavno transformirati sekvence apstraktnih uputa u upute za izvršavanje na određenoj platformi.
7. korak
Po potrebi izradite program za povezivanje (povezivač). Dobiveni izvršni modul trebao bi oblikovati odabirom mjesta segmenata koda, izračunavanjem adresa naljepnica itd.