Iskazi (statements)
XL Reference
- Osnovna struktura programa
- Izrazi (expressions)
- Osnovni tipovi (basic types)
- Iskazi (statements)
- Iskaz dodeljivanje
- Iskaz if
- Iskaz for
- Iskaz while
- Iskaz loop
- Iskaz repeat
- Iskaz case
- Iskaz match
- Iskaz exit
- Iskaz return
- Iskaz every
- Iskaz try
- Iskaz raise
- Iskaz lock
- Iskaz wait
- Iskaz signal
- Iskaz finish
- Iskaz text
- ''Builtin'' moduli
Iskaz dodeljivanje
Sintaksa iskaza dodeljivanja je sledeca:
<var1> [, <var2> ..., <varN>] := <expr>;
U <var1> varijablu se smesta rezultat <expr> izraza i <var1> po potrebi menja svoj tip u odgovarajuci. Prethodna vrednost smestena u <var1> se gubi.
U slucaju da je rezultat <expr> lista moguce je elemente redom smestiti u <var1>, <var2>, ..., <varN> varijable. U slucaju da elemenata liste ima vise nego varijabli, visak se ignorise. U slucaju da elemenata ima vise nego varijabli, visak varijabli se ignorise, tj. zadrzava staru vrednost i tip.
Iskaz if
Sintaksa iskaza if je
if <expr1> then S1; elsif <expr2> then S2; ... elsif <expr3> then Sn; else S0; end;
Redom se evaluiraju <exprX> izrazi i njihov rezultat se konvertuje u tip boolean. Za prvi koji je jednak true izvrsava se odgovarajući Sx niz iskaza. Ostali izrazi se ne evaluiraju. U slucaju da ni jedan od izraza nije ispunio uslov izvrsava se, ako postoji, S0 niz iskaza.
Ovde se implicitno podrazumeva da se rezultat svakog od <exprX> izraza može konvertovati u boolean tip. U suprotnom rezultat je runtime greška.
U slučaju da se pri evaluiranju nekog od exprX izraza dođe do greške, runtime će prijaviti grešku na liniji na kojoj je započeo if iskaz. FIXME.
Iskaz for
for iskaz ima tri različite sintakse za tri situacije za koje je namijenjen. Prva je:
for <var>:=<from_expr> to <to_expr> do S; end;
Prvo se evaluiraju izrazi <from_expr> i <to_expr>, zatim <var> poprima vrednosti i tip evaluacije <from_expr>. Ova vrednost se sukcesivno inkrementira i izvršava se S niz iskaza dok god je <var> manje ili jednako od rezultata <to_expr>.
Ukoliko za tip rezultata <from_expr> nije podržana operacija inkrementiranja (OpSucc, podržana za tipove number, boolean, date i time), ili rezultat <to_expr> nije moguće konvertovati u tip rezultata <from_expr>, desiće se runtime greška.
Druga forma for iskaza je array iterator. Sintaksa je:
for <key>, <value> in <arr> do S; end;
Treća forma je...
Iskaz while
Sintaksa while iskaza je
while <expr> do S; end;
Gde je <expr> izraz, a S je niz iskaza koji se izvrsava dok je vrijednost izraza <expr>, konvertovana u tip boolean jednaka true.
Podrazumeva se da je <expr> moguce konvertovatu u boolean tip. U suprotnom rezultat je runtime greska.
Iskaz loop
Sintaksa loop iskaza je
loop S; end;
Ponavlja se izvrsenje iskaza S dok se ne izadje iz ove petlje sa exit ili return iskazom, ili zbog propagiranja nekog od izuzetaka.
Iskaz repeat
Sintaksa repeat iskaza je
repeat S; until <expr>;
Ponavlja se izvršenje iskaza S, dok vrijednost izraza <expr>, konvertovana u tip boolean ne poprimi vrednost true. Podrazumeva se da je <expr> moguće konvertovati u boolean tip. U suprotnom rezultat je runtime greška.
Iskaz case
Sintaksa case iskaza je
case <expr> of | <expr0> => S1; | <expr1> => S2; ... | <exprN> => Sn; else S0; end;
Prvo se vrši evaluacija <expr> izraza, zatim se redom evaluiraju izrazi <exprX> i porede sa <expr>. Prvo uspešno poređenje izvršava odgovarajući Sx niz iskaza i napušta se case iskaz bez dalje evaluacije preostalih <exprX>.
U slucaju da ni jedno poredjenje nije uspelo izvrsava se S0 niz iskaza u else ogranku, ako je isti definisan.
Iskaz match
Sintaksa match iskaza je
match <expr> of | <expr1> [, <var1>]: S1; | <expr1> [, <var2>]: S2; ... | <exprN> [, <varN>]: Sn; else S0; end;
Prvo se vrši evaluacija <expr> izraza koji predstavlja uzorak, a potom se redom evaluiraju <exprX> čiji rezultat pretstavlja regularni izraz. Za prvi uspešni match izvršava se odgovarajući Sx niz iskaza; Ako je navedena opcionalna varijabla <varX> u nju se smešta lista čiji su elementi nizovi. Svaki niz ima polja start, end i value, gde su start i end početna odnosno krajnja pozicija match-ovanog izraza, a value njegova vrednost.
U slučaju da nije postojao uspešan 'match' izvršava se, ako je definisan, S0 niz iskaza.
Iskaz exit
Iskaz exit prekida izvršavanje zadnjeg započetog (innermost) loop iskaza.
Iskaz return
Izraz return [<expr>] prekida izvršavanje trenutne procedure i vraća kontrolu na mesto gde je procedura bila pozvana. Ako je naveden opcionalni izraz <expr>, vrši se njegova evaluacija i rezultat evaluacije biva upotrijebljen kao povratna vrijednost procedure.
Iskaz every
* Ovo je sad u okviru for, opisati gore.
Sintaksa every iskaza je
every <var> in <expr> do S end;
Rezultat evaluacije <expr> se konvertuje u listu, a zatim <var> poprima redom elemente liste i za svaki element se izvrsava S niz iskaza.
every <var1>, <var2> in <expr> do S end;
Rezultat evaluacije <expr> se konvertuje u niz, a zatim <var1> i <var2> poprimaju vrednosti kljuca i asocirane vrednosti respektivno. Za svaki element niza se izvrsava niz iskaza S. asocijativnog niza <expr>.
Iskaz try
Sintaksa try iskaza je
try S; handle E1[(<var1>)] => S1; handle E2[(<var2>)] => S2; ... handle En[(<varN>)] => Sn; finally S0; end;
Niz iskaza S se izvršava. Ukoliko se u toku izvršavanja iskaza desio neki izuzetak pokušava se naći odgovarajući hendler medju E1, E2, ... En hendlerima. Ako je nađen izvršava se odgovarajući Sx niz iskaza. U suprotnom se izuzetak propagira na gore do sledećeg try iskaza. U slučaju da se došlo do kraja steka ugnježđenih poziva procedura i nije pronađen odgovarajući hendler rezultat je runtime greška.
Ukoliko je uz izuzetak koji se desio prosleđen i argument, varijabla <varX> (ako je navedena) uz odgovarajući hendler Ex, ona poprima vrednost prosleđenog argumenta prije izvršavanja pripadajućeg Sx. Ako je definisan, niz iskaza S0 se bezuslovno izvršava pri izlasku iz try iskaza.
Iskaz raise
Sintaksa raise iskaza je
raise E [<expr>]
Gde je E izuzetak uz koji se opcionalno moze proslediti argument <expr>.
Iskaz lock
Sintaksa lock iskaza je
lock M do S; end;
gdje je M izraz koji se evaluira u mutex objekat, S bilo koji iskaz.
Iskaz wait
Sintaksa wait iskaza je
wait C release M
gde je C izraz koji se evaulira u signal objekat, a M izraz koji se evaulira u mutex objekat. Iskaz wait je ispravan u okviru liste iskaza unutar lock iskaza koji zaključava mutex M.
lock M do ... wait C release M ... end;
Iskaz signal
Sintaksa signal iskaza je
signal C;
Iskaz finish
Sintaksa finish iskaza je
finish T;
gdje je T thread.
Iskaz text
Sintaksa text iskaza je
text Proizvoljan 1- ili višelinijski text end;
