Ŝlosilvortigo

En la maŝinaj prezentoj de programlingvoj **ŝlosilvortigo** estas maniero apartigi la prezentaĵojn de ŝlosilvortoj disde la nomspaco de la programaj nomoj. Ŝlosilvortigo liberigas la programiston el la neceso memori, kiuj nomoj estas rezervitaj, kaj simpligas la sintaksan analizon.

## Programlingvoj kun pozicia apartigo de ŝlosilvortoj 
En asembla lingvo kun fiksita tekstaranĝo la apartigo de komandonomoj realiĝas per ilia speciala pozicio en la linio de programa teksto. Simile estis en la klasika Fortrano (ekz‑e en Fortran IV):

```fortran
1    DO2I = 1, 9
 2       A(I) = I
 3    DO 4 J = 1, 9
 4       A(J) = A(J) + 3
 9    DO2I = 9
```

Ĉi tie en la ordono `1` la signovico `DO2I` konsistas el la ŝlosilvorto `DO`, la marko `2`, kaj nomo de la variablo `I`. La ordono `1` estas do analogia al la ordono `3`, kies strukturo pli klaras pro la spacetoj.
Male, la ordono `9` estas valorizo en kiu `DO2I` estas nomo de valorizota variablo (la ordonojn `1` kaj `9` diferencigas la komo post la unua esprimo, kiu en la ĉapo de nombrila iteracio `1` indikas la supran limon de nombrilaj valoroj).

Iom simile estas en Lispo, kvankam (ekz‑e) la ŝlosilvortojn por la konstantoj `nil` kaj `t` oni ne rajtas redifini.

## Ŝlosilvortigo per eskapiloj 
Algolo havas liberan tekstoaranĝon, kaj dekomence havis tradicion apartigi la ŝlosilvortojn.

### En la lingvo porpublikiga 
Unu el la celoj de Algolo estas publikigado de algoritmoj, kaj tial en la surpapera *porpublikiga prezento* oni apartigas la ŝlosilvortojn per graseta tiparfasono (en bona tipografio) aŭ per substrekado (en tajpaĵoj kaj manskribo). En la jaroj 1960-aj tia tradicio ne ekzistis en la lerniloj kaj publikaĵoj de programoj Fortranaj; nun tamen ĝi estas ĝenerale akceptita.

### Encitiligo 
La tiparfasona apartigo ne estis ebla en *maŝina prezento* per trukartoj, la komuna eniga rimedo en la jaroj 1960-aj. Ankaŭ la signokodoj ne estis internacie normigitaj (la unua versio de Askio aperis en 1962, kaj ne tuj ĝi akiris internacian akcepton). Tial diversaj realigoj de Algolo uzis malsamajn manierojn apartigi ŝlosilvortojn. En la Okcidento oni plej ofte la ŝlosilvortojn encitiligis:
: **integer** *i, j, integer, do*;
estis enigata kiel
 'INTEGER' I, J, INTEGER, DO;

### Versio rusa 
Alia solvo estis uzata en kelkaj tradukiloj verkitaj en Sovetio. Tie la ŝlosilvortojn apartigis antaŭmetita substreka signo vortokomence, kaj ajna disigilo *aŭ spaceto* vortofine (en Algolo spaceto povis aperi en ajna loko sen ŝanĝi la signifon de la programo — sed en ĉi tiu ŝlosilvortigo spacetoj estis malpermesitaj ene de la prezentoj de ŝlosilvortoj). Ĉi tiu solvo havis plurajn avantaĝojn:
# Ĝi ebligis mallongigi la ŝlosilvortojn: ekz‑e `_INT `, `_PROC ` tute sufiĉis por rekoni la longajn ŝlosilvortojn *integer* kaj *procedure*. Nun tiajn kompletigojn povas fari dialoga redaktilo, sed en la jaroj 1960 oni devis ĉion tajpi sur trukartojn.
# Ĝi ebligis uzon de ĝustaj fleksiaj formoj en naciaj versioj de Algolo.

La lasta punkto eble bezonas klarigon. Algolo 60 estis internacia projekto, kaj ĝi antaŭvidis ekziston de naciaj variantoj. Ekz‑e ekzistis naciaj variantoj franca kaj rusa. Nu, en tiuj lingvoj la adjektivoj respondaj al la deklarilo **interger** havas variantojn unu- kaj plurnombrajn (kiel la esperantaj *entjera* kaj *entjeraj*) kaj genrajn (kiel la francaj ). La tradukiloj francaj perfortis la francan lingvon, lasante nur la formon ; en la versio rusa eblis uzi ĉiujn formojn fleksiajn ({{lang|ru|цел{ый,ая,ое,ые}}}), aŭ la mallongigon `_ЦЕЛ`. La referencajn ŝlosilvortojn eblis rekonstrui per simpla skripto, kiel ĉi tiu:

 $ echo "_ЦЕЛЫЕ I, J; _ЦЕЛЫЙ_МАССИВ A[0:9];" |\
 
 
 $

Anglalingve simila problemo tamen aperas por iuj ŝlosilvortoj substantivaj. Ekz‑e en Paskalo,

```pascal
type sekso = (vira, ina); trukarto = packed array [1..80] of char;
```

la *ununombra* ŝlosilvorto  enkondukas *du* tipojn.

## Rezervitaj vortoj 
La aŭtoroj de la modernaj programlingvoj kaj tradukiloj plejparte ne zorgas pri inĝenia apartigo de la ŝlosilvortoj; oni simple malpermesas ke programe difinita objekto havu nomon kies teksto identas kun ŝlosilvorto. Ekz‑e en C provo nomi variablon per  igas la tradukilon raporti eraron:
 % cat t.c
 main( ) {
     int short1 = 1;
     int short = 2;
 }
 % gcc t.c
 t.c: In function ‘main’:
 t.c:3:15: error: expected identifier or ‘(’ before ‘=’ token
      int short = 2;
                ^
 %
Tamen en la publikaĵoj de programoj oni ja uzas la apartigon de la ŝlosilvortoj enkondukitan de la porpublikiga versio de Algolo:

```c
switch(x)
{
  case 0:
  case 1:
    printf("unu"); break;
  case 2:
    printf("du"); break;
  default:
    printf("io alia");
}
```

Kaj oni ja uzas la eskapilon # por la direktivoj (ekz-e `#include` ktp).

## Piednotoj 
Kategorio:Programadaj konstruoj
Kategorio:Sintaksa analizo