Hvordan Skrive En Tolk

Innholdsfortegnelse:

Hvordan Skrive En Tolk
Hvordan Skrive En Tolk

Video: Hvordan Skrive En Tolk

Video: Hvordan Skrive En Tolk
Video: Vide 452 Hvordan skrive en enkel CV 2024, November
Anonim

For å opprette en tolk må du skrive en kildekodeparser, en bytecode-utførelsessløyfe og en enorm mengde standard bibliotekekode. Det er ikke alltid morsomt og enkelt hvis du ikke bruker verktøyene som kompilatoren og parseren vil generere for deg. Med dem vil det være like enkelt som å beskjære pærer å skrive en språktolk for en kunnskapsrik person. La oss se på et eksempel på å skrive en tolk med JIT i PyPy.

Hvordan skrive en tolk
Hvordan skrive en tolk

Bruksanvisning

Trinn 1

Velg språk for skriving. I dette tilfellet er det hjernefok. Det er veldig enkelt og består av et bånd av heltall, som initialiseres til null, og en peker til gjeldende celle i båndet. Det er bare åtte kommandoer på språket: ">" - flytt pekeren til neste celle,"

Steg 2

Skriv en tolk i vanlig Python. Instruksjonstelleren vil lagre pekere til gjeldende instruksjon. Det første uttrykket vil hente uttalelsen, hvoretter flere uttalelser bestemmer hvordan du skal utføre den. Utelat implementeringen av "[" og "]" operatorene, siden de må endre kommandotelleren til samme parentes.

Trinn 3

Implementere en tape-klasse som lagrer en peker til gjeldende nummer og et bånd med heltall. Båndet vil vokse etter behov. Analyser kildekoden på forhånd, slik at flere kommentarer ikke blir lest en byte om gangen. Lag også en parentesordbok, slik at du kan finne samsvarende parenteser i den om nødvendig.

Trinn 4

Utfør def parse (program). Denne funksjonen returnerer kun strenger fra kommandoer og parenteses ordbok.

Trinn 5

Sett alt sammen, og du har en fungerende tolk med hjernefok. Start Python-tolk og sørg for at den fungerer. Dette er bare en enkelt forekomst av å skrive en tolk med det enkleste språket. Hvis du ønsker det, kan du skrive på nesten hvilket som helst språk, etter å ha gjort deg kjent med egenskapene og formålet.

Anbefalt: