A C-- programozási nyelv

Típusok, típuskonstrukciók

Típusszerkezet

A C-- típusrendszerének mindössze két célja van. A C-- -ban két típus van:

Típuskonverziók

A nyelv nem támogatja sem az implicit sem az explicit típuskonverziót.

Változók, konstansok

Mint a gépi utasítások, a C-- programok is a regisztereket és a memóriát kezelik. A változók olyanok mint a regiszterek, nincs címük és egy változónak való értékadás nem változtathatja meg egy másik értékét. A változók lehetnek lokálisok egy eljárásban, de a C-- támogatja a globális regiszter változókat, melyeken az összes eljárás osztozik.

A konstansok az alábbi EBNF-el adhatók meg:

decl => const [type] name = expr

A konstanst definiáló kifejezés csak numerikus vagy karakter literálokra, más konstansokra és néhány primitív műveletre hivatkozhat. A kifejezés típusa lesz a konstans típusa. Egy eljárásban definiált konstans hatásköre az eljárás törzsére terjed ki. A konstansok értékek így közös névtéren vannak más értékekkel, mint például eljárásokkal és címkékkel.

Példák:

Kifejezések, operátorok

Egy C-- kifejezés lehet egy literál, egy név, egy referencia egy memóriabeli értékre vagy egy primitív operátor más kifejezésekre alkalmazva. Egy C-- kifejezés kiértékelése vagy egy k-bites értéket vagy egy logikai feltételt eredményez. Az értékek tárolhatók változókban, átadhatók paraméterekként, visszaadhatók eredményekként és lekérdezhetők vagy tárolhatók a memóriában. Egy kifejezés ami egy k-bites értéket eredményez bitsk típusú, amely pedig logikai feltételt az bool típusú. Mint egy assemblerben, a különbségek előjeles és előjel nélküli egészek, mutatók és lebegő-pontos értékek között az operátorokban vannak, nem az operandusok típusaiban.

A nyelvben 75 primitív operátor van. Minden primitív operátor egy értéket eredményez, melynek típusát és méretét az operátor neve és az operandusok típusa és mérete határozza meg. A primitív operátorok mellékhatásoktól mentesek, tehát nem változtatják meg a memória vagy a regiszterek tartalmát.

A primitív operátorok szintaxisa a következő:

expr => % name [( [actuals] )] | expr op expr | ~ expr | - expr op => ' name ' | + | - | * |/ | % |& | ^ | << | >> | == | != | > | < | >= | <=