Ŝ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):
 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)Grava publikaĵo pri Paskalo, eldonita en 1974, ankoraŭ uzas substrekadon por apartigi la ŝlosilvortojn (K. Jensen, N. Wirth: PASCAL. User Manual and Report. Lecture Notes in Computer Science, v. 18).. 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.Ekz-e vd Аникеева И.Н., Буда А.О., Васючкова Т.С.: Транслятор Альфа-6 в системе Дубна. М.: Наука, 1979. С. 285. 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 E. Boliet k.a. Un nouveau langage scientifique algol. Manuel pratique. Paris, 1964, pp. 10, 88.; en la versio rusa eblis uzi ĉiujn formojn fleksiajn (}), aŭ la mallongigon _ЦЕЛ. La referencajn ŝlosilvortojn eblis rekonstrui per simpla skripto, kiel ĉi tiu:

 $ echo "_ЦЕЛЫЕ I, J; _ЦЕЛЫЙ_МАССИВ A[0:9];" |\
 sed -e "s/_ЦЕЛ[[:alpha:]]*/'INTEGER'/g; s/_МАС[[:alpha:]]*/'ARRAY'/g"
 'INTEGER' I, J; 'INTEGER''ARRAY' A[0:9];
 $

Anglalingve simila problemo tamen aperas por iuj ŝlosilvortoj substantivaj. Ekz‑e en Paskalo,
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:
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