Det er mange programmeringsspråk som har sine egne unike egenskaper. Men for at et program skrevet i noen av dem skal fungere, må du kringkaste det. Noen ganger utvikles programmeringsspråk for deres egne behov (for eksempel støtte for automatisering i store applikasjoner), og da blir det nødvendig å skrive en oversetter.
Nødvendig
- - naturlig grammatikk eller BNF på kildespråket;
- - utviklingsverktøy.
Bruksanvisning
Trinn 1
Forbered dataene for leksikalanalyse av teksten på kildespråket. Liste opp alle tokens på språket. Del dem inn i kategorier (nøkkelord, numeriske og strenge bokstaver, identifikatorer, mellomrom, tegnsetting osv.).
Steg 2
Implementere en modul eller lexer. Ved inngangen skal den motta en "rå" datastrøm, og ved utgangen danne en liste over elementer som inneholder tokens og deres typeidentifikatorer i sekvensen som de forekommer i kildeteksten. Parseringsprogrammet kan være ganske enkelt " enkeltnivå "skanner. Implementering av feilgjenoppretting gir ikke mening. Ugyldige tegn skal behandles som feil.
Trinn 3
Forbered dataene for parsing. Basert på den naturlige grammatikken eller BNF for kildespråket, komponer LL1-grammatikken. Basert på denne typen grammatikk, utarbeide et analyseringsskjema når det gjelder kategoriene gyldige tokens og semantiske konstruksjoner av språket.
Trinn 4
Implementere en modul eller parser. Ved inngangen skal den motta en liste over tokens som er utarbeidet på tidspunktet for leksikal analyse. Utvikle rekursive algoritmer for syntakskontroll ved hjelp av skjemaet du opprettet i trinn tre. Om nødvendig implementerer du mekanismer for gjenoppretting av feil. Legg til funksjonalitet i parsealgoritmene for å bygge et tre for beregning av funksjoner, klassemetoder. Med riktig struktur for analysealgoritmer kan denne funksjonaliteten implementeres uten problemer. Dette unngår behovet for å implementere den som en egen modul. De opprettede datastrukturene bør inneholde lister over instruksjoner i form av "flate" sekvenser (aritmetiske uttrykk utvidet til postfix-form som er egnet for beregning på en stabelmaskin, sløyfer konvertert til kombinasjoner av sekvenser av beregningsinstruksjoner og betingede eller ubetingede hopp, etc.).
Trinn 5
Lag en optimaliseringsmodul om nødvendig. Den skal behandle og transformere datastrukturene som ble utarbeidet i forrige trinn. Optimaliseringsalgoritmer og -metoder er veldig forskjellige.
Trinn 6
Utvikle en kodegenerator. Når du behandler strukturer som er utarbeidet i fjerde eller femte trinn, bør det ganske enkelt transformere sekvensene av abstrakte instruksjoner til instruksjoner for utførelse på en bestemt plattform.
Trinn 7
Lag et bindeprogram (linker) om nødvendig. Den skal danne den resulterende kjørbare modulen ved å velge plasseringen av kodesegmentene, beregne adressene til etikettene, etc.