Nyelvi elemek
Az Oz programozási nyelvnek egy kicsi, jól meghatározott magja van, amire rengeteg szintaktikai cukrot helyeztek a könnyű kezelhetőség miatt.
Jelkészlet
A nyelvben a programok az ISO 8859-1 (Latin-1) szabványnak megfelelő karakterek sorozatai, tehát a kódokban használhatóak ékezetes és egyéb speciális karakterek. A nyelv különbséget tesz a kisbetűs és a nagybetűs karakterek között.
A programok elhatároló jelei a következők: tab (code 9), newline (code 10), vertical tab (code 11), form feed (code 12), carriage return (code 13), blank (code 32).
Azonosítók
A kulcsszavak, változók, függvények, eljárások nevének megadása az alábbi leírásnak megfelelően történhet:
A leírásban <bármely karakter> jelöli az ISO 8859-1 szabványnak megfelelő karakterek halmazát, NUL pedig a 0 kódú ISO karaktert.
<kulcsszó> ::= andthen | at | attr | case | catch | choice | class | cond | declare | define | dis | div | else | elsecase | elseif | end | export | fail | false | feat | finally | from | fun | functor | if | import | in | local | lock | meth | mod | not | of | or | orelse | prepare | proc | prop | raise | require | self | skip | then | thread | true | try | unit | ( | ) | [ | ] | { | } | | | # | : | ... | = | . | = | ^ | []| $ | ! | _ | ~ | + | - | * | / | @ | <- | , | !! | <= | == | \= | < | =< | > | >= | =: | \=: | <: | =<: | >: | >=: | :: | :::
<nagybetű> ::= A | ... | Z | À | ... | Ö | Ø | ... | Þ
<kisbetű> ::=a | ... | z | á | ... | ö | ø | ... | ÿ
<számjegy> ::= 0 | … | 9
<nemnulla> ::= 1 | … | 9
<oktális> ::= 0 | … | 7
<hexadecimális> ::= 0 | … | 9 | A | … | F | a | … | f
<bináris> ::= 0 | 1
<alfanumerikus> ::= <nagybetű> | <kisbetű> | <számjegy> | _
<atom karakter> ::= <bármely karakter> - (′ | \ | NUL)
<változókarakter> ::= <bármely karakter> - (‛ | \ | NUL)
<string karakter> ::= <bármely karakter> - („ | \ | NUL)
<escape karakter> ::= a | b | f | n | r | t | v | \ | ‛ |” | ′ | &
<pszeudokarakter> ::= \<oktális> <oktális> <oktális> | \(x | X) <hexadecimális> <hexadecimális > | \< escape karakter >
<atom> ::= <kisbetű> { <alfanumerikus> } - <kulcsszó> | ′{ <atom karakter> | <szeudokarakter >}′
<változónév> ::= <nagybetű> { <alfanumerikus> } | ‛{<változókarakter> | <pszeudokarakter>}‛
<függvénynév> ::= {<atom>}
<eljárásnév> ::= {<atom>}
<string> ::= „{ <string karakter> | <pszeudokarakter> }”
<karakter> ::= & (<bármely karakter> - ( \ | NUL) | <pszeudokarakter>)
<egész> ::= [~] ( 0 | <nemnulla> {<számjegy>}) | [~] 0 {<oktális>}+ | [~] 0 (x | X) {<hexadecimális>}+ | [~] 0 (b | B) {<bináris >}+
<lebegőpontos> ::= [~] {<számjegy>}+ . {digit} [ (e | E) [~] {<számjegy>}+ ]
Megjegyzések:
Az „ ‛ ′ közti különbség:
′\n′ egy atomot jelent, tehát függvény, eljárás teljes neve lehet, illetve annak egy része.
‛\n‛ egy változó neve, illetve annak egy része
„\n” egy sztring, ami megfelel a sorvége jelnek
Egész számok megadásának különböző módjai:
A -31 megadására négy lehetőség adott:
Decimális alakban: ~31
Oktális alakban: ~037
Hexadecimális alakban: ~0x1F vagy ~1X1F
Bináris alakban: ~0b11111 vagy ~0B11111
Néhány gyakran használt azonosító:
Browse - megmutatja egy kifejezés értékét
Literálok
Minden sztring literált „” párok között kell megadni, így bármely vezérlőkarakter használata megengedett azokban.
Speciálisan minden kifejezésnek van virtuális string értéke, amit a # karakterek között lehet lekérni. Például:
"Contains "#also#" numbers: "#(1#' '#2.045)
Megfelel a következő stringnek:
"Contains also numbers: 1 2.045"
Megjegyzések
% komment az aktuális sor vagy a fájl végéig
/* */ párok közt írt, akár többsoros komment
A fordítás a fent említett elhatároló karaktereket és kommenteket
csak a kód szavainak elválasztásának erejéig veszi figyelembe.
Erre a célra alkalmas még az elhatároló karakterek és kommentek sorába nem besorolható ? karakter.