Harjoitustyön aiheena on tehdä lausekääntäjä, joka kääntää hyvin yksinkertaista korkean tason lausekieltä pinokoodiksi. Kääntäjän vastaanottama lausekoodi on jonkin verran muunneltu siitä, mikä esitetään Aho-Sethi-Ullmanin kirjassa sivuilla 73-78. Pinokoodi on kuvattu sivuilla 62-69. Ajanmukaisen kuvauksen pinokoodista saa kurssin laskuharjoituksissa to 30.9-99 tai pinokoodia suorittavan executor-ohjelman manuaalisivulta.
Työ tehdään Javalla. Tehtävää varten jaetaan noin 230 riviä Java-koodia, joka osaa lukea ja kääntää jo osaa lausekielestä pinokieleksi. Tehtävänäsi on ohjelman laajentaminen niin, että se vastaa kokonaisuudessaan alla esitettyä kieltä:
stmts -> stmt ';' stmts | stmt o stmt -> identifier ':=' expr | 'if' expr 'then' stmt o | 'while' expr 'do' stmt | 'begin' stmts 'end' | 'print' expr o expr -> expr '+' term o | expr '-' term o | term o term -> term '*' factor o | term '/' factor o | term 'mod' factor | factor o factor -> '(' expr ')' o | identifier | number oKuvauksessa kaikki lainausmerkeissä olevat tekstit ovat sellaisenaan päätesymboleja (terminaaleja). Lisäksi 'identifier' ja 'number' ovat päätesymboleja. Yhdellä pallukalla merkityt produktiot on jo toteutettu.
Suositeltava tapa lähteä liikkeelle on:
Tästä saat valmiiksi jaetun koodin tar-tiedostona. Käännä sanomalla esim. javac Translator.java ja aja sanomalla java Translator. Kääntäjä lukee lausekieltä stdinistä, tuottaa pinokoodia stdouttiin ja laittaa mahdolliset virheilmoitukset stderriin.
Työn voi jälleen tehdä periaatteessa missä ympäristössä tahansa. Pinokooditulkki on niksulan Indyissä ~tik76149/bin/executor. LK:n HP:eissa ja Alphoissa executor toimii sanomalla ensin use edu/compiler. Jos käytät omia laitteitasi, saat executorin lähdekoodin tästä.
Koodi on järjestetty hieman eri tavoin kuin Aho-Sethi-Ullmanin kirjassa. Tiedostot ovat:
Harjoitustyön palautuksen tulee sisältää kaikki ylläoleva koodi, muutetut kohdat esimerkiksi tussilla vahvennettuna. Selkosanaista dokumentaatiota ei edellytetä. Tarkista, että palautuksessasi on nimesi ja opintokirjan numerosi. Tehtävä on palautettava torstain 21.10-99 aikana päärakennuken kyyhkyslakkaan 45 tai kyseisenä päivänä pidettäville laskuharjoituksille.
Tehtävä on henkilökohtainen. Arvostelu suoritetaan asteikolla:
Ajoissa palautettu | Enintään viikon myöhässä |
---|---|
5 | 4 |
4 | 3 |
3 | 2 |
2 | 1 |
1 | 1 |
0 | 0 |
Yli viikon myöhässä palautettavista töistä on sovittava erikseen etukäteen vastaanotoilla tai sähköpostitse cessu@iki.fi. Työn kuluessa vastaantulevista teknisistä ongelmista voi kysyä neuvoa sähköpostitse. Vastaanotoista sovitaan erikseen.
Työ on henkilökohtainen ja sen vaikutus kurssin arvosanaan on 10%.