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.
- \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.
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.