Menu

Struktura

BredySoft

Struktura TEMPE Scriptu

TEMPE Script staví na jednoduchém vyhodnocovači výrazů rekurzivním sestupem. Vznikl nejprve pod názvem Express, který umožňoval základní matematické operace sčítání, odčítání, násobení, dělení, základní funkce a práce s řetězci. Později byl rošířen pod názvem AExpress, kde byla přidané uživatelské [funkce], [scope] a později [objekty]. TEMPE Script přidává šablony a operace s nimi.

Základním stavebním kamenem TEMPE Scriptu je výraz:

<expression>

TEMPE Script je vlastně jeden obrovský výraz a vždycky vrací výsledek. Aby bylo možno výraz vyhodnocovat sekvenčně jako program, je zaveden operátor středník ';' který rozdělí výraz na dva přičemž nejprve se vyhodnotí levá strana a pak pravá strana. Výsledkem operátoru je pravá strana

<expression>;<expression>;<expression>;<expression>....

Operátor středníku však může být použit kdekoliv obecně, není to jen pouhý oddělovač příkazů. Kdokoliv se předpokládá výraz, lze použít středník a vytvořit sekvenci příkazů, kde výsledek poslední operace je výsledek celého výrazu

23 * ( A:=10 ; B:=20 ; A+B ) + 15

Výše uvedený příklad při vyhodnocování závorky nejprve naplní proměnnou A, pak B a teprve A+B je výsledkem závorky.

Proměnné a přiřazení

V TEMPE Scriptu lze používat proměnné, tak jak je zvykem v jiných jazycích. V TEMPE Scriptu však neexistuje omezení na použité znaky v proměnné. Pouze některé znaky zesložiťují zápis.

prom1
toto je taky nazev promenne
mohu tam mít i české znaky
#())( dokonce symb()ly nebo "uvozovky"

Pokud název proměnné začíná písmenem, nebo podtržítkem, a následují jen písmena, číslice a podtržítko, lze do kódu napsat tak jak je. Proměnná se také nesmí jmenovat jako klíčové slovo

prom1 - ok
while - ne, klíčové slovo

Pro zápis proměnné s nezvyklými znaky lze použít zpětné apostrofy

`toto je taky nazev promenne`
`mohu tam mít i české znaky`
`#())( dokonce symb()ly nebo "uvozovky"`

Pomocí klíčového slova var lze syntetizovat název proměnné z řetězce.

var "jmeno proměnné"

Programově:

nazev:="nějaký názevr proměnné";
var nazev := 10

Přiřazení do proměnné provádíme operátorem :=, kdy na levé straně je proměnná a na pravé straně ke výraz. Tento operátor pak jako výsledek vrací pravou stranu. Proto lze operátor řetězit

A := B := C := D = 0

Operátor := lze použít i pro přiřazení do členské proměnné libovolného objektu. Viz [objekty]

objekt.mprom := "hello"

Pro běžné proměnné platí, že přiřazení do proměnné, která neexistuje způsobí její vytvoření v aktuálním [scope]. Pokud přiřazujeme do proměné, která existuje v jiném [scope], který je v daném místě dostupný, je vytvořena nová proměnná v aktuálním [scope], která zastíní původní proměnnou. Původní proměnné se v půbodním scope nezmění.

Řízení běhu skriptu

Rozhodování

TEMPE Script opsahuje příkaz if.

if <expr> then <expr> end
if <expr> then <expr> else <expr> end
if <expr> then <expr> elseif <expr> then <expr> .... else <expr> end

Příkaz if je též považován za výraz, takže on sám vrací výsledek. Zpravidla vrací výsledek té větve, která se na základě podmínky vykonala. Pokud se nevykonala žádná větev, vrací hodnotu NULL.

Klíčové slovo end je povinné a ukončuje celý příkaz. Jednotlivé větve jsou výrazy, které lze opět rodělit pomocí středníku. Pozor na to, že za posledním příkazem větve **se středník nepíše!"

if (a > 1) then b:=10 + a ; c:= b + d end

Smyčky

Pro smyčky existují příkazy loop, while ale také with a frag

while <podm> do <expr> done

loop <expr>

Příkaz while vyhodnotí podmínku a pokud je nenulová, provede výraz. Poté znova vyhodnotí podmínku a tak dokola.

Příkaz loop provede výraz a v případě, že jeho výsledek je nenulový, výraz opakuje, dokud není výsledkem nula.

Příklaz with pracuje se [scope] a lze jej použít k procházení pole objektů

with <prom> <expr> end

Pokud je <prom> objekt, pak provede <expr> tak, že z objektu vytvoří [scope]. Pokud je však <prom> pole, pak pro všechny prvky v poli, které jsou objektem, provede <expr> včetně nastavení scope

Příkaz with lze doplnit o klíčové slova join a map

with <prom> join <expr> end
with <prom> map <expr> end

Normálně příkaz with vrací výsledek posledního <expr>. V případě join vrací řetězec který vznikne tak, že se slouží výsledky všech <expr>. V případě map je pak výsledkem pole výsledků

Příkaz frag je zkrácená varianta příkazu with join s tím, že frag očekává pouze hodnotu, nikoliv celý výraz, proto není třeba ukončovat jej příkazem end

frag <prom> <un.expr>

<un.expr> je výraz složený pouze z unárních operátorů. Lze však použít závorky a toto omezení obejít

frag <prom> (<expr>;<expr>)

Většinou se frag použije se šablonou

frag <prom> {$ šablona $}