Det finns många programmeringsspråk som har sina egna unika egenskaper. Men för att ett program skrivet i någon av dem ska fungera måste du sända det. Ibland utvecklas programmeringsspråk för sina egna behov (till exempel stöd för automatisering i stora applikationer) och då blir det nödvändigt att skriva en översättare.
Nödvändig
- - naturlig grammatik eller BNF för källspråket,
- - utvecklings verktyg.
Instruktioner
Steg 1
Förbered data för lexikalisk analys av texten på källspråket. Lista alla symboler på språket. Dela upp dem i kategorier (nyckelord, numeriska bokstäver och strängbokstäver, identifierare, blanksteg, skiljetecken etc.).
Steg 2
Implementera en modul eller lexer. Vid ingången ska den få en "rå" dataström, och vid utgången bilda en lista med element som innehåller tokens och deras typidentifierare i den ordning som de förekommer i källtexten. Parsningsprogrammet kan vara ganska enkelt " enkelnivå "skanner. Implementering av felåterställning är inte meningsfullt. Ogiltiga tecken ska behandlas som fel.
Steg 3
Förbered data för analysering. Basera på källspråkets naturliga grammatik eller BNF, komponera dess LL1-grammatik. Basera på denna typ av grammatik, utforma ett analyseringsschema i termer av kategorierna giltiga tokens och semantiska konstruktioner av språket.
Steg 4
Implementera en modul eller parser. Vid ingången ska den få en lista över tokens som är förberedda i lexikalisk analys. Utveckla rekursiva algoritmer för syntaxkontroll med det schema du skapade i steg tre. Vid behov implementera felåterställningsmekanismer. Lägg till funktionalitet i analyseringsalgoritmerna för att bygga ett träd för beräkning av funktioner, klassmetoder. Med korrekt struktur för parsingsalgoritmer kan denna funktion implementeras utan problem. Detta undviker behovet av att implementera det som en separat modul. De skapade datastrukturerna bör innehålla listor med instruktioner i form av "platta" sekvenser (aritmetiska uttryck expanderade till postfix-form lämpliga för beräkning på en stackmaskin, loopar omvandlade till kombinationer av sekvenser av beräkningsinstruktioner och villkorliga eller ovillkorliga hopp, etc.).
Steg 5
Skapa en optimeringsmodul om det behövs. Den ska bearbeta och transformera datastrukturerna som förbereddes i föregående steg. Optimeringsalgoritmer och metoder är mycket olika.
Steg 6
Utveckla en kodgenerator. Vid bearbetning av strukturerna som framställts i fjärde eller femte steget, bör det helt enkelt omvandla sekvenser av abstrakta instruktioner till instruktioner för exekvering på en specifik plattform.
Steg 7
Skapa ett bindemedelsprogram (linker) om det behövs. Den ska bilda den resulterande körbara modulen genom att välja kodsegmentens plats, beräkna adresserna på etiketterna etc.