4. Lausekielinen ohjelmointi
Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen, tulkinta ja Java.
Konekieli ja symbolinen konekieli Aluksi ohjelmoitiin tietokoneiden sellaisenaan ymmärtämällä konekielellä (machine language), jossa suorittimen komennot ja niiden parametrit esitetään binäärilukuina. Symbolisessa kone-kielessä (assembly language) komennoille on annettu lyhyet nimet. Erästä suoritinta voitaisiin käskeä sijoittamaan akkuun (suorittimen rekisteri) luku yksi seuraavasti: 10101001 00000001 tai LDA #$01. Tällaisten kielten käyttö on vaikeaa ja eikä ohjelmia voi ajaa toisen tyyppisellä suorittimella.
Lausekieli Abstraktimpi kieli, hieman luonnollisen kielen kaltainen. Luonnollisen kielen käyttö ohjelmoinnissa vaikeaa kieliopin monimutkaisuuden sekä lauseiden ja sanojen moniselitteisyyden vuoksi. Lausekielinen ohjelmointi mahdollista rajatun kieliopin ja sanaston sekä kääntäjä- ja tulkkiohjelmien ansiosta. Kielimuurin yli lausekielellä: 1010101011100010... ... i = i + 1; Lausekieli konekieleksi kääntäjällä ja/tai tulkilla. Ajatus ohjelmaksi. Kasvatetaan laskurimuuttujaa i yhdellä.
Lausekieli Sanasto koostuu pääasiassa tunnuksista ja varatuista sanoista. Tunnukset (indentifier) ovat nimiä: esimerkiksi muuttujien ja operaatioiden nimet ovat tunnuksia. Varatut sanat (reserved word) on tavallisesti valittu englannin kielestä, eikä niitä voi käyttää omina tunnuksina. Varattuja sanoja käytetään muun muassa kielen ohjausrakenteiden esittämiseen (esim. if ja while).
Lausekieli Ohjelmointi helpompaa ja nopeampaa kuin alkeellisemmilla kielillä. Ohjelmat tyypillisesti suoritinriippumattomia ja hyvin tehtyinä siirrettävissä käyttöjärjestelmien välillä. Ensimmäiset lausekielet esiteltiin jo 1950-luvulla. Muun muassa Basic, Pascal, C, C++ ja Java. Englannin termi “high level language” käännetään usein lausekieleksi ja/tai korkean tason kieleksi. Lausekieliä on kuitenkin eritasoisia: C vs. Java.
Lausekielestä konekieleksi Lausekielestä tuotetaan konekieltä siten, että lausekielinen ohjelma kirjoitetaan tekstitiedostoon ja ohjelma muutetaan konekieliseksi tiedostoksi antamalla tekstitiedosto kääntäjälle. Konekielistä tiedostoa kutsutaan: suoritus- tai ajokelpoiseksi ohjelmaksi tai lyhemmin suoritettavaksi tai ajettavaksi ohjelmaksi tai vielä lyhemmin vain ohjelmaksi tai sovellukseksi. Huomaa, että myös lähdekoodia sanotaan lyhyesti ohjelmaksi. ... i = i + 1; ... 0010101010110000 käännös
Lähdekoodi ja tekstitiedosto Lausekielinen ohjelma eli lähdekoodi (source code) tallennetaan teksti-tiedostoksi (text file), joka koostuu kirjaimista, numeroista, välimerkeistä ja näkymättömistä ohjausmerkeistä (muun muassa rivinvaihto- ja tabulaattori). Toisinaan rajoitutaan ASCII-merkistöön, joka ei sisällä å-, ö-, ä-, Å-, Ä- ja Ö-merkkejä. Tekstitiedostot ovat käytännössä aina ihmisen luettavassa muodossa. Lähdekoodiin ei voi sijoittaa tekstin muotoiluja (lihavointi, kursivointi yms.) tai kuvia.
Tekstieditorit Tekstitiedostoja tehdään yksinkertaisilla tekstin-käsittelyohjelmilla eli tekstieditoreilla. Kurssilla riittää editori, joka osaa näyttää rivinumeron. Esimerkiksi Notepad (Windows) tai nano (UNIX). Kurssin kotisivuilla linkkejä parempiin editoreihin. Notepad++:lle (Windows) myös joitakin käyttöohjeita. Laajempien ohjelmien tekoon löytyy ohjelmointi-ympäristöjä (esimerkiksi Eclipse). Microsoft Word -ohjelma ei ole tarkoitettu ohjelmointiin vaan monipuoliseen tekstinkäsittelyyn. Aloittelevan ohjelmoijan ei kannata edes yrittää kirjoittaa ohjelmia Wordillä!
Kääntäminen ja tulkinta Ihminen ymmärtää lausekielistä lähdekoodia, mutta tietokoneelle koodi on liian monimutkaista. Koodi onkin muutettava tietokoneen ymmärtämään muotoon, konekieliseksi tiedostoksi. Kieliraja voidaan ylittää luonnollisen kielen tapaan lähdekoodia konekieleksi kääntämällä (compile) ja tulkitsemalla (interpret). Konekieli on ihmiselle käsittämätöntä, mutta tämä ei ole ongelma, koska yleensä konekieltä ei tarvitse muuttaa takaisin lausekieleksi.
Kääntäminen ja tulkinta Kääntäjäohjelma muuttaa lähdekoodin suoraan suoritettavaksi ohjelmaksi. Tulkittavan kielen lähdekoodi suoritetaan erillisellä ohjelmalla eli tulkilla, joka muuttaa ajonaikaisesti lähdekoodin konekieleksi. lähdekoodi lähdekooditiedosto käännös tulkinta suoritus konekieli konekielinen tiedosto
Kääntäminen ja tulkinta Ohjelman oltava kieliopillisesti oikein, jotta tulkkaus tai kääntäminen onnistuisi: Kielioppivirheistä ilmoitetaan yleensä virheen tyyppi ja rivi, jolta virhe löytyi. Käännetty koodi on yleensä tulkattavaa koodia nopeampaa, mutta tulkattavalla kielellä on helpompi tehdä pieniä testejä. Käännettäviä lausekieliä ovat esimerkiksi Pascal, C ja C++ ja tulkattavia kieliä muun muassa Basic.
Kääntäminen, tulkinta ja Java Javassa voimme nauttia sekä kääntämisestä että tulkkauksesta. Lähdekoodi käännetään ensin tavukoodiksi (bytecode). Tavukoodi suoritetaan tulkin avulla virtuaali-koneessa (virtual machine). lähdekoodi lähdekooditiedosto käännös tulkinta suoritus tavukoodi konekieli tavukooditiedosto
Kääntäminen, tulkinta ja Java Tavukoodin ansiosta Java-sovellukset ovat siirrettäviä. Samaa tavukoodia voidaan ajaa kaikkialla missä on tarjolla virtuaalikone: Intel- ja SPARC-suorittimet, Windows, Linux, UNIX, tietokone, video, pesukone, kännykkä jne. Tavukoodi voidaan edelleen kääntää ajettavaksi ohjelmaksi, jolloin ohjelma kuitenkin sidotaan tiettyyn ympäristöön.