Yksitoista sääntöä

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 Tcl-kielen syntaksin ja semantiikan:

1) Komennot. Tcl-skripti on merkkijono, joka sisältää yhden tai useampia komentoja. Puolipisteet ja rivinvaihdot toimivat komentoerottimina ellei niitä ole merkitty alla kuvatuilla tavoilla. Lopettavat hakasulut toimivat komentolopettajina komentokorvauksen aikana (kts. alhaalla), elleivät ole lainauksen sisällä.

2) Evaluointi. Komentoevaluointi 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 paikallistamaan komentoproseduuri, joka toteuttaa komennon, sitten kaikki komennon sanat ohjataan komentoproseduurille. Komentoproseduuri on voi tulkita kaikkia näitä sanoja millä tahansa haluamallaan tavalla, kuten kokonaislukuina, muuttujaniminä, listoina tai Tcl-skripteinä. Erilaiset komennot tulkitsevat sanoja 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ä, lopettavia hakasulkuja tai tyhjiä välimerkkejä (mukaanlukien rivinvaihtoja) esiintyy 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ä osaksi 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 avaavaa tai sulkevaa aaltosulkua edeltää kenoviiva, sitä ei lasketa mukaan etsittäessä vastaavaa aaltosulkua). Mitään korvauksia ei suoriteta merkeille aaltosulkujen sisällä lukuunottamatta kenoviiva-rivinvaihto -korvauksia, joita kuvaillaan alhaalla. Puolipisteet, rivinvaihdot, sulkevat hakasulut ja tyhjät välimerkit eivät saa mitään erityistä tulkintaa. Sana koostuu pelkästään uloimpien aaltosulkujen välisistä merkeistä, ilman aaltosulkuja.

6) Komentojen korvaus. Jos sana sisältää avaavan 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ään. 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 useampia 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, seuraavaa merkkiä käsitellää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 sekä 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 merkkiä) palauttavar 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 heksadesimaalimerkkejä; 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ä merkkiä) palauttavat 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 täsmälleen 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 evaluoidaan kokonaan ennen seuraavan korvauksen evaluointia. 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

  • 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 https://wiki.tcl-lang.org/11467 for the old version.
  • I made several, mostly minor, changes to advance linguistic correctness in Finnish.--JuhaTK