A CORBA IDL nyelv

Nyelvi elemek

Jelkészlet

Az OMG IDL forrásfájlok ASCII karaktereket tartalmazhatnak. A string és karakter literálok ISO Latin-1 (8859.1) karakterek lehetnek (betűk, számjegyek, grafikus karakterek, a szóköz-karakter és a formázó karakterek).

Tokenek

Előfeldolgozás után áll elő a tulajdonképpeni fordítási egység. Egy fordítási egység a következő lexikális elemeket (tokeneket) tartalmazhatja: azonosítók, kulcsszavak, literálok, operátorok, és elválasztó jelek ("white space"). Az elemző szempontjából egy token a leghosszabb olyan karaktersorozat, ami még lehet egy token.

Kommentek

A C++-ból ismert kommentek használhatók. A "/*" és "*/" közé zárt, valamint a "//" után a sor végéig a karakterek kommentet képeznek. A "/*..*/" típusú kommentek nem egymásba ágyazhatók. A "/*..*/"-en belül a "//", valamint a "//" mögött az "/*", "*/", és "//" jelentése megszűnik (egyszerű karakterekként kerülnek feldolgozásra). Egy kommentben alfabetikus, számjegy, grafikus, szóköz, vízszintes és függőleges tabulátor, pozícionáló és újsor karakterek lehetnek.

Azonosítók

Egy azonosító tetszőleges hosszú sorozata lehet az ASCII alfabetikus, a számjegy, és az alulvonás ("_") karaktereknek. Minden karakter számít. Egy azonosító első karaktere ASCII alfabetikus karakter kell legyen.

Névütközés van ha különböző dolgokat ugyanazzal a névvel látunk el. A névütközések fordítási hibát generálnak. Az ütközések ellenőrzésénél a kis és nagy betűk között az OMG IDL nem tesz különbséget, de egy specifikáción belül ugyanazt (a kis és nagy betűket tekintve) csak azonosan módon szabad írni.

Minden hatókörben egyetlen névtér létezik (pl. egy konstans és egy interfész neve nem lehet ugyanaz). Kulcsszavak nem használhatók azonosítóként, kivéve ha egy alulvonást "_" teszünk eléjük. Ezeket ún. "escaped identifier"-eknek ismeri az OMD IDL specifikáció. Ezek arra (és csak arra) szolgálnak, hogy az IDL későbbi verzióiban esetlegesen megjelenő kulcsszavak és a már meglevő programok névütközéseit könnyen fel lehessen oldani. Ettől eltérő használata nem ajánlott.

Kulcsszavak

Az alábbi azonosítók kulcsszavaknak fenntartott szavak amelyek semmilyen más célra nem használhatóak. (Kivéve ha "escaped identifier"-ként használják őket.)

abstractexceptioninoutprovidestruncatable
anyemitsinterfacepublictypedef
attributeenumlocalpublishestypeid
booleaneventtypelongraisestypeprefix
casefactorymodulereadonlyunsigned
charFALSEmultiplesetraisesunion
componentfindernativesequenceuses
constfixedObjectshortValueBase
consumesfloatoctetstringvaluetype
contextgetraisesonewaystructvoid
customhomeoutsupportswchar
defaultimportprimarykeyswitchwstring
doubleinprivateTRUE

Literálok

Az OMG IDL a következő literál típusokat ismeri: egész szám literálok, karakter literálok, lebegőpontos szám literálok, string literálok, fixpontos szám literálok.

Egész szám literálok

Minden számjegyekből álló sorozat decimális (tízes alapú) egész számnak felel meg, kivéve, ha nullával kezdődik. Ekkor oktális (nyolcas alapú) számot jelöl. Egy oktális számban 8-as és 9-es számjegy nem szerepelhet. Ha a számjegyeket "0x" vagy "0X" előzi meg akkor hexadecimális (tizenhatos alapú) számként kerül értelmezésre. Ekkor az "a-f" és az "A-F" karakterek is használhatók. Ezek jelölik a számjegyeket tíztől tizenötig.

Karakter literálok

Egyszerű idézőjelek közé zárt egy vagy több jel (pl. 'x'). A karakter literálok char típusú konstansok. Minden karakterhez egy 0 és 255 közötti érték tartozik az ISO Latin-1 (8859.1) szabványnak megfelelően.

A nem-grafikus karakterek váltószekvenciákkal adhatók meg az alábbi táblázat szerint.

Leírásváltószekvencia
újsor\n
vízszintes tabulátor\t
függőleges tabulátor\v
visszatörlés\b
kocsi vissza\r
pozícionáló\f
figyelmeztetés\a
fordított per\\
kérdőjel\?
egyszerű idézőjel\'
dupla idézőjel\"
oktális szám\ooo
hexadecimális szám\xhh
unikód karakter\uhhhh

A hagyományos karakter literálok mellett az OMG IDL ismeri a széles karakter literálokat is (wchar). Egy széles karakter literált egy bevezető L betű jelez (pl. L'X'). A váltószekvenciás unikód karakterek csak széles karakter literálokban szerepelhetnek.

Széles karakter literált nem-széles karakter típusú konstansnak vagy nem-széles karakter literált széles karakter típusú konstansnak értékül adva fordítási hiba generálódik.

Lebegőpontos szám literálok

A lebegőpontos számok egy egész részből, egy decimális pontból, egy törtrészből, egy "e" vagy "E" betűből, és egy opcionális előjeles egész exponensből állnak. Az egész és a törtrész egy-egy decimális szám. Az egész és a törtrész hiányozhat, de nem egyszerre. A decimális pont és a záró "e" vagy "E" betű és az exponens hiányozhat, de nem egyszerre.

String literálok

A string lietrálok dupla idézőjelek közötti karakterek sorozata. Típusuk string. Egymás melletti stringek összefűződnek. A duplaidézőjelet stringen belül meg kell előzzön egy "\" jel. Egy string literál nem tartalmazhatja a '\0' karaktert. Széles string literálokat (wstring) egy L betű vezet be (pl. L"Hello"). Széles string literált nem-széles string típusú konstansnak vagy nem-széles string literált széles string típusú konstansnak értékül adva fordítási hiba generálódik.

Fixpontos szám literálok

A fixpontos számok egy egész részből, egy decimális pontból, egy törtrészből, és egy "d" vagy "D" betűből állnak. Az egész és a törtrész egy-egy decimális szám. Az egész és a törtrész hiányozhat, de nem egyszerre. A decimális pont hiányozhat, de a záró "d" vagy "D" betű nem hiányozhat.