Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Oman ohjelmointikielen tekeminen

galgoneer [22.06.2007 22:34:32]

#

Ajattelin ihan vain omien tietojeni kartuttamiseksi tehdä edes jonkin moisen ohjelmointikielen, tai ainakin ottaa selvää, miten se tehdään. Mutta jos voisitte vaikkapa antaa linkkiä sivuille, jossa kerrotaan oman ohjelmointikielen tekemisestä, tai kertoa asioita mitä pitää ottaa huomioon. Olisiko mahdollista tehdä kieli kokonaan C++, vai tarvitaanko assembleria? Tiedonjanoani tällä varmaan lähinnä täyttelen

tgunner [23.06.2007 12:40:23]

#

Jos meinaat ihan kääntäjäksi asti ryhtyä vääntämään, niin assembler-tuntemus on pakollista. Voit kuitenkin koodata C++:lla tulkin, joka ei käännä koodia varsinaisesti ulospurkautuvaksi tiedostoksi vaan ajaa sen suoraan, kun koodi tulee vastaan.
Putkan haulla löydät menneitä keskusteluja kyseisestä aiheesta.

Antti Laaksonen [23.06.2007 12:50:38]

#

Ensin sinun pitää suunnitella kielen rakenne, eli mitä komentoja on käytössä ja miten niitä voi yhdistää toisiinsa. Tästä vaiheesta riippuu, millainen kielestä tulee, ja tärkeää on, että jokainen komento on selkeästi määritelty. Tämän jälkeen ohjelmointikieli on valmis, mutta ongelmana on, että sillä kirjoitettuja ohjelmia ei pysty mitenkään suorittamaan.

Tulkki on ohjelma, joka ymmärtää tiettyä ohjelmointikieltä ja suorittaa ohjelman tietokoneella. Yksinkertaisimmillaan tulkki lukee yksi kerrallaan ohjelmaan kuuluvia rivejä ja toimii niiden mukaisesti (jos rivillä ei ole virhettä). Tulkin täytyy pitää kirjaa, millä ohjelman rivillä ollaan, mitä arvoja on annettu eri muuttujille jne.

Kääntäjä on ohjelma, joka muuttaa tiettyä ohjelmointikieltä tietokoneen omalle konekielelle. Tämän jälkeen ohjelman pystyy suorittamaan ilman jonkin toisen ohjelman apua. Kääntäjän tekeminen on osittain samanlaista kuin tulkin, mutta nyt täytyy muodostaa kokonainen konekielinen ohjelma, jonka toiminta vastaa joka tilanteessa alkuperäistä ohjelmaa.

Kielen rakenteen suunnitteluun riittää kynä ja paperi, tulkin tekeminen onnistuu pelkällä C++:lla ja kääntäjän voi myös tehdä C++:lla, mutta siinä täytyy hyvin tarkasti tuntea tietokoneen konekielen (assemblyn) rakenne. Aluksi kannattanee tyytyä tulkkiin, jonka tekeminen ei ole kovin vaikeaa, jos kieli on riittävän yksinkertainen.

Pekka Karjalainen [23.06.2007 15:18:15]

#

Kääntäjä kääntää yhtä kieltä toiseksi. Kohdekieli voi olla esimerkiksi C. Sellaista kääntäjää, joka kääntää nimenomaan konekieleksi sanotaan monesti natiivikääntäjäksi. Sellaista ei ole pakko tehdä, koska C:ksi käännettävä kieli voi hyödyntää jo valmsita C-kääntäjää.

PLAI-kirja kertoo asioista, mitä tulee kieltä suunnitellessa ottaa huomioon. Lue täältä, onko se sopiva tarpeisiisi.

http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/FAQ/

galgoneer [23.06.2007 15:57:21]

#

Kiitos kaikille. Taidan yrtittää väsätä kääntäjän, joka kääntää koodin c++:ksi, ja kääntää sen sitten mingw:llä. Tai sitten voisi yrittää tehdä yksinkertaisen tulkin.

Pekka Karjalainen [23.06.2007 17:46:22]

#

C++-kielen ensimmäinen kääntäjä oli nimeltään cfront, ja se oli oikeastaan vain preprocessor, eli ohjelmakoodin muokkaaja. Sille annettiin C++-kielinen ohjelma ja se tuotti C-kielisen ohjelman, joka sitten annettiin jo olemassa olevalle C-kääntäjälle. Jos näin lähdet tekemään omaa kieltäsi, perinteet ainakin ovat kunniakkaat.

Voi olla tosin vaikea kehittää kieli, joka lisää jotakin C++:aan ja silti on helppo kääntää C++:ksi. Kannattaa katsoa, ettet vain kopioi C++:n ominaisuuksia tuomatta mitään uutta mukaan.

Suosittelisin kuitenkin aloittamaan tulkista, ja vielä helposta sellaisesta. Jos katsot vanhoja keskusteluja hakutoiminnolla, löydät asiaa laskimen toteutuksesta. Aritmeettisia lausekkeita laskeva ohjelma on itse asiassa hyvin yksinkertainen tulkki. Siihen voi ajan myötä lisätä ohjausrakenteita, muuttujia ja funktioita, jolloin se alkaa jo olla melkein kuin oikea kieli. Vilkaisepa näitä vanhoja keskusteluja, jos hakutoiminto ne paljastaa.

Tuo mainitsemani kirjakin aloittaa tämänkaltaisesta asiasta. Siinä kuitenkin pääpaino on ideoilla, ja varsinainen toiminnallisuus jätetään harjoitustehtäväksi lukijalle :-)

pieslice [24.06.2007 14:35:27]

#

Ehdotin töissä joskus kolmisen vuotta sitten että tehtäisiin symbianista (symbian c++) sellainen makroviritys että sitä voisi ohjelmoida ruotsinkieltä muistuttavalla syntaksilla =)

Kuulemma se oli huonoin idea pitkään aikaan...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta