Daar is baie programmeertale wat hul eie unieke eienskappe het. Maar om 'n program wat in een van die programme geskryf is, te laat werk, moet u dit uitsaai. Soms word programmeertale ontwikkel vir hul eie behoeftes (byvoorbeeld ondersteuning vir outomatisering in groot toepassings) en dan word dit nodig om 'n vertaler te skryf.
Nodig
- - natuurlike grammatika of BNF van die brontaal;
- - ontwikkelingsinstrumente.
Instruksies
Stap 1
Berei die data voor vir leksikale ontleding van die teks in die brontaal. Lys al die tekens in die taal. Verdeel dit in kategorieë (sleutelwoorde, numeriese en snaarletters, identifiseerders, spasie, leestekens, ens.).
Stap 2
Implementeer 'n module of 'n lexer. By die invoer moet dit 'n "rou" datastroom ontvang, en by die uitvoer 'n lys vorm van elemente wat tekens bevat en hul tipe-identifiseerders in die volgorde waarin dit in die bronteks voorkom. Die ontleedprogram kan redelik eenvoudig wees " enkelvlak "-skandeerder. Die implementering van foutherstel is nie sinvol nie. Ongeldige karakters moet as foute beskou word.
Stap 3
Berei die data voor vir ontleding. Stel die LL1-grammatika saam op grond van die natuurlike grammatika of BNF van die brontaal. Stel op grond van hierdie soort grammatika 'n ontledingskema op volgens die kategorieë geldige tekens en semantiese konstruksies van die taal.
Stap 4
Implementeer 'n module of ontleder. By die insette moet dit 'n lys ontvang van tekens wat voorberei is op die stadium van leksikale ontleding. Ontwikkel rekursiewe algoritmes vir sintaksebepaling met behulp van die skema wat u in stap drie geskep het. Indien nodig, gebruik meganismes vir die herstel van foute. Voeg funksionaliteit by die parseringsalgoritmes om 'n boom te bou vir die berekening van funksies, klasmetodes. Met die korrekte struktuur van parsingsalgoritmes, kan hierdie funksies sonder probleme geïmplementeer word. Dit vermy die behoefte om dit as 'n aparte module te implementeer. Die geskepte datastrukture moet lyste met instruksies in die vorm van 'plat' rye bevat (rekenkundige uitdrukkings word uitgebrei na postfix-vorm wat geskik is vir berekening op 'n stapelmasjien, lusse omgeskakel in kombinasies van rye berekeningsinstruksies en voorwaardelike of onvoorwaardelike spronge, ens.).
Stap 5
Skep 'n optimaliseringsmodule indien nodig. Dit moet die datastrukture wat in die vorige stap voorberei is, verwerk en transformeer. Optimaliseringsalgoritmes en -metodes is baie uiteenlopend.
Stap 6
Ontwikkel 'n kodegenerator. By die verwerking van die strukture wat in die vierde of vyfde stap voorberei word, moet dit eenvoudig die reekse van abstrakte instruksies omskep in instruksies vir uitvoering op 'n spesifieke platform.
Stap 7
Skep indien nodig 'n bindmiddelprogram (linker). Dit moet die resulterende uitvoerbare module vorm deur die ligging van die kodesegmente te kies, die adresse van die etikette te bereken, ens.