GithubHelp home page GithubHelp logo

fergusq / retki Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 0.0 326 KB

Suomenkielinen Infom 7 -tyyppinen kieli tekstiseikkailujen luomiseen / Proof-of-concept Finnish programming language inspired by Inform 7

Home Page: https://iikka.kapsi.fi/retki/

License: GNU General Public License v3.0

Python 100.00%
interactive-fiction finnish compiler programming-language natural-language-programming programming-by-natural-language

retki's Introduction

Retki

Retki is a proof-of-concept programming language inspired by Inform 7 and based on the Finnish language. It aims to be a readable and natural-feeling language, to some level understandable to people not knowing it, and easy to learn. To which level these goals were accomplished is debatable, but the result is not bad. Many of the proven features of Inform 7 were succesfully implemented in Finnish.

Below is an example of the language taken from the lyhyt-peli.txt adventure game. It contains two things. First, a property called kirjoitus (text) is added to the esine (item) class along with a boolean flag kirjoitusta sisältävä (containing text). Then an action called lukeminen (reading) is defined. If the player enters a command like lue kirje, the action will be executed and, if both ennen checks are passed, the text in the given item will be showed to the player.

> Lukeminen

Esine on joko kirjoitusta sisältämätön tai kirjoitusta sisältävä.
Esine on yleensä kirjoitusta sisältämätön.

Esineellä on kirjoitukseksi kutsuttu merkkijono.
Esineen kirjoitus on yleensä "".

[Esineen] lukeminen on toiminto.
Tulkitse "lue [esine]" lukemisena.
Tulkitse "lue [esinettä]" lukemisena.

Ennen piilossa olevan esineen lukemista:
        Sano "Et näe sellaista asiaa.".
        Keskeytä toiminto.

Ennen kirjoitusta sisältämättömän esineen lukemista:
        Sano "[Se] ei sisällä mitään kirjoitusta.".
        Keskeytä toiminto.

Kirjoitusta sisältävän esineen lukemisen aikana:
        Sano "Luet [siihen] kirjoitetun tekstin:[rivinvaihto][rivinvaihto]".
        Sano "[sen kirjoitus][rivinvaihto]".

Please read the Finnish documentation for more information.

retki's People

Contributors

fergusq avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

retki's Issues

Sääntöjen ottaminen pois käytöstä

Nimettyjä sääntöjä pitää voida ottaa pois käytöstä:

[Asian] tekeminen on toiminto.

Asian tekemisen aikana:
    Sano "jotain".
    (perussääntö)

...

Asian tekemisen perussääntöä ei sovelleta.
> tai vain
Tekemisen perussääntöä ei sovelleta.

ei sovelleta -komento ottaa säännön kokonaan pois. Näin kirjastoissa olevia valmiita sääntöjä voi tarvittaessa poistaa, jos niitä ei tarvita.

Tulkintarutiini

Tulkintarutiini on seuraavanlainen:

Tulkitse "kerro [asiasta] [ihmiselle]" seuraavasti:
	Kerro nyt hänelle siitä.

Tulkitse "kerro [asia] [ihmiselle]" seuraavasti:
	Kerro nyt hänelle se.

Esimerkissä siis määriteltiin pelaajakomento, jossa toiminnon "ihmiselle asiasta kertominen" parametrien järjestys oli vaihdettu.

Ratkaisematon ongelma: miten määritetään, mikä on tulkintarutiinien tärkeysjärjestys verrattuna toisiinsa ja suoraan toiminnoissa määriteltyihin pelaajakomentoihin.

Toinen idea: tulkintarutiinien parametrina voisi olla myös "komento", joka on merkijonon alakäsite.

Tulkitse "[komento (A)] ja [komento (B)]" seuraavasti:
	Suorita A.
	Suorita B.

Nimiavaruudet

Tällä hetkellä kääntäjä on hyvin hidas, ja tämä johtuu suurilta osin hitaasta jäsentimestä. Jos kielioppisääntöjen määrää kielioppitaulussa voisi vähentää, jäsentäminen nopeutuisi.

Tätä varten kieli tarvitsee nimiavaruudet. Nimiavaruudet toteutetaan periytyvien kielioppitaulujen avulla. Kun nimiavaruus avataan, kielioppitaulupinoon lisätään uusi kielioppitaulu, joka perii aiemman nimiavaruuden kielioppitaulun. Kun nimiavaruus suljetaan, sen taulu poistetaan pinosta, jolloin siinä määriteltyjä sääntöjä ei enää jäsennetä.

Vaiheet

  • Nimettömät nimiavaruudet
  • Nimetyt nimiavaruudet

Nimettömät nimiavaruudet

Ensimmäisessä vaiheessa toteutetaan nimettömät nimiavaruudet:

Olohuone on huone.

Avaa nimiavaruus.

Kynttilä on esine olohuoneessa.

Sulje nimiavaruus.

Esimerkissä kynttilään ei voi enää viitata nimiavaruuden sulkemisen jälkeen, mutta pelaaja voi toki pelissä viitata kynttilään.

Nimetyt nimiavaruudet

Toisessa vaiheessa toteutetaan nimetyt nimiavaruudet, jotka voi tarvittaessa palauttaa muista-komennolla.

Olohuone on huone.

Avaa nimiavaruus (olohuoneen esineet).

Kynttilä on esine olohuoneessa.

Sulje nimiavaruus.

> ...

Avaa nimiavaruus.
Muista olohuoneen esineet.

Kynttilän kuvaus on "Valkoinen loppuunpalanut kynttilä.".

Sulje nimiavaruus.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.