Specifikace jazyka


Změny

5. 11. 2002
Typ operátoru konkatenace opraven na SxS->S
16. 12. 2002
Příkaz READ čte z každého řádku jednu vstupní hodnotu.
18. 12. 2002
Vysvětlení k častému dotazu - v případě, že projekt implementuje jednotlivec nebo dvojice, nemusí být implementován příkaz IF a WHILE, ovšem ternární operátor IF-THEN-ELSE implementován být musí (a tedy i relační a logické operátory).
20. 12. 2002
- Číselné konstanty zahrnují celá desítková čísla a reálná čísla ve formátu jazyka C (tj. včetně případného exponentu).
- Pro porovnání logických hodnot platí FALSE < TRUE.
- Operátor IF se používá např. takto:
let mensi = if cislo1 < cislo2 then cislo1 else cislo2;
Za THEN a ELSE ale může být libovolně složitý výraz, nejen proměnná.

 

Formát programu

Program je tvořen posloupností příkazů oddělených středníkem. Příkazy jsou zapsány ve volném formátu, poznámky, mezery, tabulátory a konce řádků slouží pouze jako oddělovače a na význam programu nemají vliv. Poznámky jsou omezeny znakem apostrof a koncem řádku. V argumentech výrazů se jako operandy mohou vyskytovat celočíselné desítkové literály, reálné literály ve formátu podle jazyka C a řetězcové literály v uvozovkách (bez escape sekvencí). Klíčová slova jsou rezervovaná. V identifikátorech a klíčových slovech se nerozlišují velká a malá písmena, překladač musí brát v úvahu alespoň prvních 64 znaků identifikátoru.

Proměnné

Názvy proměnných jsou tvořeny identifikátorem. Každá proměnná musí být před použitím deklarovaná. Po deklaraci má proměnná podle svého typu hodnotu 0, 0.0, "", resp. FALSE.

Příkazy

Jsou definovány následující příkazy:

Výrazy

Výrazy mohou jako operandy obsahovat celočíselné, reálné a řetězcové literály a proměnné. Proměnné ve výrazu musí mít definovánu hodnotu. Operandy musí být typově kompatibilní, podle potřeby se provádí automatická konverze celočíselných operandů na reálné. Jsou definovány následující operátory (písmena I, R, B, S vyjadřují datové typy INTEGER, REAL, BOOLEAN a STRING):

 

Popis Operátor Signatura
unární operátor pro změnu znaménka '-' I->I, R->R
binární aritmetické operátory '+','-','*' IxI->I, RxR->R
'/' RxR->R
DIV, MOD IxI->I
operátor konkatenace '+' SxS->S
relační operátory '<','<=','>','>=','=','<>' TxT->B (T = I,R,S,B)
logické operátory AND, OR BxB->B
NOT B->B
ternární operátor IF podmínka THEN výraz ELSE výraz BxTxT->T (T = I,R,S,B)

Typy T v relačních operátorech a ternárním operátoru IF-THEN-ELSE musí být v rámci jednoho operátoru identické.

 

Operátory jsou zleva asociativní, priorita operátorů je následující:

  1. OR
  2. AND
  3. NOT
  4. relační operátory
  5. + -
  6. * / DIV MOD

 

Ve výrazech se dále mohou vyskytovat konstanty TRUE a FALSE typu BOOLEAN (pro relační operátory platí FALSE < TRUE) a následující standardní funkce:

 

Varianty zadání

Tým 3 studentů
Řešení musí odpovídat úplné specifikaci jazyka.

Tým 2 studentů
Řešení nemusí obsahovat příkazy IF a WHILE (ternární operátor IF-THEN-ELSE implementován být musí).

Jednotlivci
Řešení nemusí obsahovat příkazy IF a WHILE (ternární operátor IF-THEN-ELSE implementován být musí) a standardní funkce.