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
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.
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.
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/
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.
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 :-)
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...
Aihe on jo aika vanha, joten et voi enää vastata siihen.