Kokeellisen ohjelmointikielen ja sen tulkin suunnittelu ja kehittäminen
Luoma, Vilho (2023)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-202305057797
https://urn.fi/URN:NBN:fi:amk-202305057797
Tiivistelmä
Tämän opinnäytetyön tarkoituksena on esitellä kokeellisen ohjelmointikielen ja sen
tulkkiohjelmiston toteutusta. Työssä toteutettava ohjelmointikieli on yksinkertainen, dynaamisesti kirjoitettu C-perheen komentokieli. Kielen tulkin rakenteeksi valittiin abstrakti syntaksipuu -tulkki, koska se on laajalti tunnustettu yksinkertaisimmaksi ja luontevimmaksi lähestymistavaksi uutta ohjelmointikieltä toteuttaessa.
Työssä keskitytään erityisesti kontekstittoman kieliopin määrittelyyn ja jäsennykseen, sekä abstraktin syntaksipuun analysointiin ja suoritukseen. Skanneria ja jäsennintä ei toteuteta, vaan sen sijaan kuvaillaan yleisemmällä tasolla.
Työn alussa käsitellään ohjelmointikielten historiaa ja kääntäjien merkitystä niiden
kehityksessä. Tämän jälkeen käsitellään teoriaa liittyen kääntäjien etupäähän, sisältäen yleiskatsauksen sen eri vaiheista, kuten leksikaalisesta analyysistä, jäsennyksestä ja semanttisesta analyysistä. Teoriaosuuksien jälkeen kuvataan käytännön osuutta yleisellä tasolla, jossa esiteltyjä käsitteitä sovelletaan käytännössä.
Opinnäytetyön lopputulos on yksinkertainen, imperatiivinen komentokieli, joka sisältää useita ohjelmointikielten ydinominaisuuksia. Toteutuskielelle kirjoitettu
tulkki pystyy myös analysoimaan ja toteuttamaan sille kirjoitettuja ohjelmia. The objective of this thesis was to present the implementation of an experimental programming language and its interpreter software. The programming language implemented in the thesis is a simple, dynamically typed scripting language of the C family. An abstract syntax tree interpreter was chosen as the structure of the language interpreter, as it is widely recognized as the simplest and most natural approach when implementing a new programming language. The thesis focuses especially on the definition and parsing of context-free grammar, as well as the analysis and execution of an abstract syntax tree. The scanner and parser were not implemented, but instead are described at a more general level.
At the beginning of this thesis, the history of programming languages and the significance of compilers in their development are discussed. The theory is then discussed in relation to the front end of compilers, including an overview of its various stages, such as lexical analysis, parsing and semantic analysis. Following the theory sections, the practical section is described in general terms, where the presented concepts are applied in practice.
The result of the thesis is a simple, imperative scripting language that contains several core features of programming languages. The interpreter written for the implementation language is also able to analyze and execute programs written for it.
tulkkiohjelmiston toteutusta. Työssä toteutettava ohjelmointikieli on yksinkertainen, dynaamisesti kirjoitettu C-perheen komentokieli. Kielen tulkin rakenteeksi valittiin abstrakti syntaksipuu -tulkki, koska se on laajalti tunnustettu yksinkertaisimmaksi ja luontevimmaksi lähestymistavaksi uutta ohjelmointikieltä toteuttaessa.
Työssä keskitytään erityisesti kontekstittoman kieliopin määrittelyyn ja jäsennykseen, sekä abstraktin syntaksipuun analysointiin ja suoritukseen. Skanneria ja jäsennintä ei toteuteta, vaan sen sijaan kuvaillaan yleisemmällä tasolla.
Työn alussa käsitellään ohjelmointikielten historiaa ja kääntäjien merkitystä niiden
kehityksessä. Tämän jälkeen käsitellään teoriaa liittyen kääntäjien etupäähän, sisältäen yleiskatsauksen sen eri vaiheista, kuten leksikaalisesta analyysistä, jäsennyksestä ja semanttisesta analyysistä. Teoriaosuuksien jälkeen kuvataan käytännön osuutta yleisellä tasolla, jossa esiteltyjä käsitteitä sovelletaan käytännössä.
Opinnäytetyön lopputulos on yksinkertainen, imperatiivinen komentokieli, joka sisältää useita ohjelmointikielten ydinominaisuuksia. Toteutuskielelle kirjoitettu
tulkki pystyy myös analysoimaan ja toteuttamaan sille kirjoitettuja ohjelmia.
At the beginning of this thesis, the history of programming languages and the significance of compilers in their development are discussed. The theory is then discussed in relation to the front end of compilers, including an overview of its various stages, such as lexical analysis, parsing and semantic analysis. Following the theory sections, the practical section is described in general terms, where the presented concepts are applied in practice.
The result of the thesis is a simple, imperative scripting language that contains several core features of programming languages. The interpreter written for the implementation language is also able to analyze and execute programs written for it.