4. Lausekielinen ohjelmointi 4.1
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. 4.2
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 konekielessä (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. 4.3
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ä: Lausekieli konekieleksi kääntäjällä ja/tai tulkilla. 10101010111 00010... Kasvatetaan laskurimuuttujaa i yhdellä.... i = i + 1;... Ajatus ohjelmaksi. 4.4
Lausekieli Sanasto pääosin tunnuksia (identifier) ja varattuja sanoja (reserved word). Tunnukset ovat nimiä: esimerkiksi muuttujien ja operaatioiden nimet ovat tunnuksia. Varattuja sanoja käytetään muun muassa kielen ohjausrakenteiden esittämiseen. Varatut sanat on tavallisesti valittu englannin kielestä (esimerkiksi if ja while), eikä niitä voi käyttää omina tunnuksina. 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. Termi high level language käännetään usein lausekieleksi tai korkean tason kieleksi. Lausekieliä on kuitenkin eritasoisia: C vs. Java. 4.5
Lähdekoodi ja tekstitiedosto Lausekielinen ohjelma eli lähdekoodi (source code) tallennetaan tekstitiedostoksi (text file). Koostuu kirjaimista, numeroista, välimerkeistä ja näkymättömistä ohjausmerkeistä (muun muassa rivinvaihto- ja tabulaattori). Lähdekoodiin ei voi sijoittaa tekstin muotoiluja (esim. lihavointi) tai kuvia. Käyttöjärjestelmien merkistöt ovat erilaisia, jolloin järjestelmästä toiseen siirretyn lähdekooditiedoston merkkejä saattaa näkyä eri merkkeinä ja muunnos konekieleksi ei aina onnistu. Joskus lähdekoodin siirrettävyyttä parannetaan käyttämällä tunnuksissa vain alkuperäistä ASCII-merkistöä, joka on osa useampia muita merkistöjä. Näin toimien å-, ö-, ä-, Å-, Ä- ja Ö- merkkejä voi käyttää vain kommenteissa. 4.6
Tekstieditorit Tekstitiedostoja tehdään yksinkertaisilla tekstinkäsittelyohjelmilla eli tekstieditoreilla. Kurssilla riittää editori, joka osaa näyttää rivinumeron. Esimerkiksi Notepad (Windows) tai nano (UNIX). Kurssin kotisivuilla linkkejä parempiin editoreihin ja ohjeita Notepad++:n (Windows) ja TextWranglerin (Mac) käyttöön. Laajempien ohjelmien tekoon löytyy ohjelmointiympäristöjä (esimerkiksi Eclipse). Microsoft Word -ohjelma ei ole tarkoitettu ohjelmointiin vaan monipuoliseen tekstinkäsittelyyn. Aloittelevan ohjelmoijan ei kannata edes yrittää kirjoittaa ohjelmia Wordillä! 4.7
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, konekielelle. Konekieli on ihmiselle käsittämätöntä, mutta tämä ei ole ongelma, koska yleensä konekieltä ei tarvitse muuttaa takaisin lausekieleksi. Kieliraja voidaan ylittää luonnollisen kielen tapaan lähdekoodia konekieleksi kääntämällä (compile) ja tulkitsemalla (interpret). 4.8
Kääntäminen ja tulkinta Kääntäjäohjelma muuttaa lähdekoodin suoraan konekieliseksi tiedostoksi eli suoritettavaksi ohjelmaksi. lähdekooditiedosto Tulkittavan kielen lähdekoodi suoritetaan erillisellä ohjelmalla eli tulkilla, joka muuttaa ajonaikaisesti lähdekoodin konekieleksi. lähdekoodi lähdekooditiedosto konekieli konekielinen tiedosto kääntäjä lähdekoodi konekieli tulkki konekieli suoritin suoritin 4.9
Kääntäminen ja tulkinta Ohjelman oltava kieliopillisesti täysin 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. 4.10
Kääntäminen, tulkinta ja Java Javassa lähdekoodi käännetään ensin tavukoodiksi (bytecode). Tavukoodi suoritetaan sitten tulkin avulla virtuaalikoneessa (virtual machine). Tavukoodin ansiosta Javasovellukset ovat siirrettäviä. Sama tavukoodi voidaan suorittaa kaikkialla missä on tarjolla virtuaalikone (esim. Windows, Linux ja Mac). lähdekooditiedosto lähdekoodi kääntäjä tavukoodi tavukooditiedosto tavukoodi konekieli tulkki suoritin 4.11