Updated 2012-01-20 13:38:16 by dkf

This is a translation of the eleven rules of Tcl (see Endekalogue) into Finnish. As you can see, Finnish is really quite different from most other languages.

Seuraavat säännöt määrittelevät syntaksin ja semantiikan Tcl-kielestä:

1) Komennot. Tcl-skripti on merkkijono, joka sisältää yhden tai useamman komennon. Puolipisteet ja rivinvaihdot toimivat komentoerottimina elleivät ole lainattu alla kuvatuilla tavoilla. Kiinninäiset hakasulut toimivat komentolopettajina komentokorvauksen aikana (kts. alhaalla), elleivät ole lainauksen sisällä.

2) Arviointi. Komentoarviointi tapahtuu kahdessa vaiheessa. Ensimmäiseksi Tcl-tulkki hajottaa komennon sanoiksi ja toteuttaa korvauksia (substituutioita) alla kuvatulla tavalla. Nämä korvaukset tapahtuvat samalla tavalla kaikkien komentojen kanssa. Ensimmäinen sana käytetään paikallistaakseen komentoproseduurin, joka toteuttaa komennon, sitten kaikki komennon sanat ohjataan komentoproseduurille. Komentoproseduuri on vapaa tulkitsemaan kaikkia näitä sanoja millä tahansa haluamallansa tavalla, kuten kokonaislukuina, muuttujaniminä, listoina tai Tcl-skripteinä. Erilaiset komennot tulkitsevat sanojaan eri tavoilla.

3) Sanat. Komennon sanat erotellaan tyhjillä välimerkeillä (white space) (lukuunottamatta rivinvaihtoja, jotka toimivat komentoerottimina).

4) Lainausmerkit. Jos sanan ensimmäinen merkki on lainausmerkki ("), sana lopetetaan seuraavaan lainausmerkkiin. Jos puolipisteitä, kiinninnäisiä hakasulkuja tai tyhjiä välimerkkejä (mukaanlukien rivinvaihtoja) esiintyvät lainausmerkkejen sisällä, niitä kohdellaan tavallisina merkkeinä ja sisällytetään sanaan. Komentokorvauksia, muuttujakorvauksia ja kenoviivakorvauksia suoritetaan lainausmerkkien sisällä oleviin merkkeihin kuten alhaalla kuvataan. Lainausmerkkejä ei säilytetä osana sanaa.

5) Aaltosulut. Jos sanan ensimmäinen merkki on avoin aaltosulku ({), sana lopetetaan vastaavaan sulkevaan aaltosulkuun (}). Aaltosulut voivat toimia sisäkkäin sanassa: jokaiselle avoimelle aaltosululle pitää löytyä vastaava sulkeva aaltosulku (jos kuitenkin avointa- tai sulkeva aaltosulkua edeltää kenoviiva sitä ei lasketa mukaan etsiessään vastaavaa aaltosulkua). Mitään korvauksia ei suoriteta merkeillä aaltosulkujen sisällä paitsi kenoviiva-rivinvaihto -korvauksia, joita kuvaillaan alhaalla. Puolipisteet, rivinvaihdot, sulkevat hakasulut ja tyhjät välimerkit eivät saa mitään erityisät tulkintaa. Sana koostuu tarkalleen uloimpien aaltosulkujen välisistä merkeistä, ilman aaltosulkuja.

6) Komentojen korvaus. Jos sana sisältää avoimen hakasulun ([), suorittaa Tcl komennon arvoinnin. Tehdäkseen tämän, Tcl käynnistää rekursiivisesti toisen tulkin, joka käsittelee kaikki hakasulkua seuraavat merkit omana Tcl-skriptinä. Skripti voi sisältää määrittelemättömän määrän komentoja ja sen pitää päättyä sulkevaan hakasulkuun (]). Tulkatun skriptin tulos (eli viimeiseksi suoritetun komennon tulos) sijoitetaan hakasulkujen ja niiden välissä olevien merkkien paikalle. Yksittäisessä sanassa voi olla määrittelemätön määrä komentojen korvauksia. Komentojen korvausta ei tehdä hakasulkeissa oleville sanoille.

7) Muuttujien korvaus. Jos sana sisältää dollarimerkin ($), suorittaa Tcl muuttujan korvauksen. Dollarimerkki ja kaikki sitä seuraavat sanan merkit korvataan muuttujan sisällöllä. Muuttujan korvaus voi esiintyä seuraavissa muodoissa:
$nimi
Nimi on skalaarimuuttujan nimi; nimi on yhdestä tai useammasta merkistä koostuva sarja, jossa merkit ovat kirjaimia, numeroita, alaviivoja tai nimiavaruuserottimia (kaksi tai useampi kaksoispistettä).
$nimi(indeksi)
Nimi on listamuuttujan [tarkista termi] nimi ja indeksi on listassa olevan alkion nimi. Nimi saa sisältää vain kirjaimia, numeroita, alaviivoja ja nimiavaruuserottimia ja se voi olla myös tyhjä merkkijono. Komentojen, muuttujien ja kenoviivojen korvaus tehdään ''indeksissä' esiintyville merkeille.
${nimi}
Nimi on skalaarimuuttujan nimi. Se voi sisältää mitä tahansa merkkejä lukuunottamatta sulkevaa aaltosulkua.

Yksittäisessä sanassa voi olla määrittelemätön määrä muuttujien korvauksia. Muuttujien korvauksia ei tehdä hakasuluissa oleville sanoille.

8) Kenoviivan korvaus. Jos kenoviiva (\) esiintyy sanassa, suoritetaan kenoviivan korvaus. Kaikissa tapauksissa, poislukien alla luetellut erikoistapaukset, kenoviiva poistetaan sanasta ja seuraavaa merkkiä käistellään normaalina merkkinä ja se sisällytetään sanaan. Tämä mahdollistaa lainausmerkkien, sulkevien hakasulkujen ja dollarimerkkien sisällyttämisen sanoihin ilman, että ne laukaisivat erikoiskäsittelyä. Alla oleva taulukko listaa ne kenoviivasarjat [keksi parempi suomennos] ja niiden tuottamat korvaavat sarjat, jotka käsitellään edellä kuvatusta poikkeavalla tavalla.
\a
Äänimerkki (kello) (0x7).
\b
Askelpalautin (0x8).
\f
Arkinsyöttö (0xc).
\n
Rivinvaihto (0xa).
\r
Rivinvaihto-vaunun palautus (0xd).
\t
Tabulaattori (0x9).
\v
Pystytabulaattori (0xb).
\<rivinvaihto>välilyönti
Yksittäinen välilyöntimerkki korvaa kenoviivan, rivinvaihdon ja kaikki välilyönnit ja tabulaattorimerkit rivinvaihdon jälkeen. Tämä kenoviivasarja on siitä ainutlaatuinen, että se käsitellään esikäsittelyvaiheessa ennen varsinaista komennon tulkintaa. Tämä tarkoittaa sitä, että vaikka merkkisarja esiintyisi aaltosulkeissa, korvataan se ja tuloksena syntyvä välilyönti tulkitaan sanaerottimeksi, jos se ei esiinny aaltosulkeissa tai lainausmerkeissä.
\\
Kenoviiva (\).
\ooo
Numeromerkit ooo (yksi, kaksi tai kolme kappaletta niitä) palauttaa kahdeksanbittisen oktaaliarvon lisättävälle Unicode-merkille. Unicode-merkin ylemmät bitit ovat 0.
\xhh
Heksadesimaalimerkit hh palauttavat kahdeksanbittisen heksadesimaaliluvun lisättävälle Unicode-merkille. Merkintä voi sisältää määrittelemättömän määrän heksadesimeaalimerkkejä; kuitenkin, kaikki paitsi kaksi viimeistä merkkiä jätetään huomiotta (lopputulos on aina yksitavuinen). Unicode-merkin ylemmät bitit ovat 0.
\uhhhh
Heksadesimaalimerkit hhhh (yksi, kaksi, kolme tai neljä niitä) palauttaa kuusitoistabittisen heksadesimaaliarvon lisättävälle Unicode-merkille.

Kenoviivan korvausta ei tehdä aaltosulkeissa oleville sanoille, poikkeuksena kenoviiva-rivinvaihto yllä kuvatulla tavalla.

9) Kommentit. Jos risuaitamerkki (#) esiintyy paikassa, jossa Tcl-tulkki odottaa löytävänsä ensimmäisen komennon ensimmäisen sanan ensimmäisen merkin, tulkitaan risuaita ja kaikki sitä seuraavat merkit rivinvaihtomerkkiin asti kommentiksi ja ne jätetään huomiotta. Kommenttimerkillä on merkitystä vain, jos se esiintyy komennon alussa.

10) Korvausjärjestys. Tcl-tulkki käsittelee jokaisen merkin tasan kerran muodostaessaan komentosanoja. Esimerkiksi jos osutaan muuttujan korvauksen kohdalle, ei muita korvauksia muuttujan arvolle tehdä, vaan arvo sijoitetaan korvauskohtaan kirjaimellisesti. Jos osutaan komennon korvaukseen, käsitellään kaikki sisältyvät komennot rekursiivisilla Tcl-tulkin kutsuilla eikä korvauksia tehdä ennen kuin rekursiiviset kutsut ja muut korvaukset on suoritettu sisäkkäisessä skriptissä ja paluuarvo on saatu.

Korvaukset sijoitetaan vasemmalta oikealle ja jokainen korvaus arvioidaan kokonaan ennen seuraavan korvauksen arviointia. Näin rivi
set y [set x 0][incr x][incr x]

sijoittaa aina muuttujaan y arvon 012.

11) Korvaus ja sanojen rajat. Korvaukset eivät vaikuta komentosanojen rajoihin. Esimerkiksi muuttujan korvauksen aikana koko muuttujan arvo käsitellään osana yksittäistä sanaa, vaikka muuttujan arvo sisältäisikin välilyöntejä.

Talk edit

  • Having a lot of problems with the word "substitution". There is a word "substituutio" in Finnish but using that is a bit lame. If any Finns read this, what is their view? --Setok
  • I think it's OK to use the term "korvata" to express "substitution". Another expression would be "sijoittaa jonkin paikalle/tilalle" but it depends on context. On the other hand, the term "kiinninnäinen" is quite clumsy and I would recommend the term "sulkeva". But that's my opinion (actually, you are using that term in the fifth clause). There seems to be some minor misspellings in the text and I'm willing to fix them if you don't mind. I also added the title text to each clause and the clauses six and nine. --mjk
  • Sure, feel free to fix stuff. That's the whole point in Wikiing. Btw. who are you? Would be nice to know some other Finnish tclers.. --Setok
  • OK. I'll make some fixes. I'm currently translating more clauses. About me: maybe I should make some sort of info page about me... Anyway, I'm Matti Kärki, a Finnish software developer and a CS student. Some info can be found here: http://www.iki.fi/mjk/ --mjk
  • OK. The first draft of the rest of the clauses is there. I have hard time with the term "evaluate" which will be translated as "arvioida". I think that this Finnish word isn't quite accurate in this context. But I can't come up with anything better. --mjk
  • Converted UTF-8 text to ISO-8859-1 --mjk
  • AMG: Corrected encoding. See http://wiki.tcl.tk/11467 for the old version.