Sintaksa i tijek izvršavanja
Sintaksa skriptnog jezika TapHome: naredbe i točka sa zarezom, komentari, literali, IF u obliku funkcije i bloka, SWITCH, petlje WHILE i DO, BREAK, CONTINUE i RETURN.
Naredbe i točka sa zarezom
Skripta je niz naredbi, a svaka naredba završava točkom sa zarezom ;. Blok naredbe (IF … END, WHILE … LOOP, DO … LOOP WHILE …) i komentari ne završavaju točkom sa zarezom. Ključne riječi i nazivi ne razlikuju velika i mala slova: IF, if i If su isto.
VAR x := 5;
IF x > 3
x := x - 1;
END
x;
# Result: 4Točka sa zarezom smije se izostaviti samo iza posljednje naredbe skripte; unutar bloka treba je svaka naredba, uključujući posljednju prije END ili LOOP. Ako unutar bloka nedostaje točka sa zarezom prije END ili LOOP, skripta se zaustavlja pogreškom Unexpected character 'E' at the end of statement. Expected ';' ('L' prije LOOP).
Komentari
Komentar počinje znakom # i traje do kraja retka. Može stajati u vlastitom retku ili iza cjelovite naredbe: iza njezine točke sa zarezom ili iza END, ELSE ili LOOP.
# starting value
VAR x := 5; # a comment after the semicolon
IF x > 3
x := 1;
END # end of the checkZnak # unutar naredbe (prije njezine točke sa zarezom ili iza uvjeta IF ili WHILE) završava pogreškom Comment must start on a new line and inline comments are not supported.
Literali
Literal je vrijednost napisana izravno u skripti.
| Literal | Primjer | Napomene |
|---|---|---|
| Broj | 5, 21.5, -3 | Decimalna točka .. Brojčani literal je double, pa je 5 / 2 jednako 2.5. Bez eksponenta (1e3), bez točke na početku (.5). |
| Heksadecimalni | 0xA0A0, 0xff | Tip int, znamenke ne razlikuju velika i mala slova: 0xA0A0 je 41120. |
| Binarni | 0b10101010 | Tip int: 170. |
| Logička vrijednost | TRUE, FALSE | |
| Nepoznati broj | NaN | Nikad nije jednak ničemu; provjerava se funkcijom ISNAN. |
| Bez vrijednosti | Null | Provjerava se funkcijom ISNULL. |
| Niz znakova | "°C", "a\nb", "C:\\data" | Escape sekvence \n, \r, \t, \", \\, \xHH, \uXXXX. Neispravna sekvenca završava pogreškom Couldn't unescape …. |
| Znak | 'A', '\n' | Točno jedan znak. |
| Zbirka | {1, 2, 3}, {"a", "b"} | Barem jedan element, vidi Zbirke. |
| Vrijednost enuma | H, BigEndianFloat, DateTimeKind.Utc | Sama ili s nazivom tipa, vidi Enum tipovi. |
IF
IF vraća jednu od dviju vrijednosti ovisno o uvjetu (oblik funkcije) ili izvršava jedan od nekoliko blokova naredbi (oblik bloka).
| |
Parametri
| Naziv | Tip | Opis |
|---|---|---|
condition | bool | Broj različit od nule je TRUE, Null je FALSE. |
valueIfTrue | any | Vraća se kada je uvjet TRUE. |
valueIfFalse | any | Neobavezno, vraća se u suprotnom. |
Vraća odabranu vrijednost ili Null kada uvjet nije TRUE i nema trećeg argumenta. Izračunava se samo odabrana grana, pa druga ne može završiti pogreškom.
Primjer — sigurno dijeljenje i zamjena za NaN. Dijeljenje nulom zaustavlja skriptu pogreškom Line in script: 1 Message: Division by zero; uvjet to sprječava:
IF(va2 > 0, va1/va2, 0);
# Result: va1/va2, or 0 when va2 is 0
IF(ISNAN(Te), 0, Te);
# Result: 0 when the device is in error or returns NaNOblik bloka
| |
Uvjet smije biti u zagradama i mora stati u jedan redak; prijelom retka ga završava. ELSEIF se može ponavljati, ELSE je neobavezan, END je obavezan. Sam blok vraća Null; za vrijednost iz bloka koristite RETURN.
IF Te < 5
RETURN(1);
ELSEIF Te > 10
RETURN(3);
ELSE
RETURN(0);
ENDPogreške — Function IF requires at least 2 parameters.; Unexpected keyword 'X' at the end of IF statement. kada iza unutarnjeg END slijedi ;.
Vidi također — SWITCH, Operatori.
SWITCH
SWITCH uspoređuje vrijednost s popisom slučajeva i vraća rezultat prvog odgovarajućeg slučaja ili zadani rezultat kada nijedan slučaj ne odgovara.
| |
Napomene — SWITCH prima najmanje 4 i najviše 100 argumenata, uvijek paran broj: vrijednost, parove slučaja i njegova rezultata te zadani rezultat. Slučajevi se uspoređuju kao kod =: brojevi po vrijednosti, tekst točno; usporedba teksta s brojem završava pogreškom Operator '==' not defined …. Izračunava se samo rezultat odgovarajućeg slučaja.
Primjer — priručnik uređaja navodi aktivni način rada kao vrijednosti bitova; skripta ih pretvara u položaje prekidača s više vrijednosti:

SWITCH(MODBUSR(H, 168, UInt16),
0, 0,
0x0002, 1,
0x0004, 2,
0x0008, 3,
0x0010, 4,
0x0040, 5,
0x0800, 6,
NaN);Pogreške — Function SWITCH requires at least 4 parameters.; Invalid arguments for SWITCH function. kod neparnog broja argumenata.
Petlje WHILE i DO
WHILE ponavlja svoje naredbe dok je uvjet TRUE; DO … LOOP WHILE ih izvršava barem jednom. CONTINUE; preskače ostatak prolaza, BREAK; izlazi iz petlje; obje se pišu bez zagrada.
| |
Kao kod IF, uvjet završava prijelomom retka. Kada počinje znakom (, završava odgovarajućom ): WHILE (a > 0) AND (b > 0) uzima kao uvjet samo (a > 0), pa napišite WHILE (a > 0 AND b > 0).
int i := 10;
WHILE i > 0
i := i - 1;
IF i > 5
CONTINUE;
END
BREAK;
LOOP
i;
# Result: 5int n := 1;
DO
n := n * 2;
LOOP WHILE n < 100
n;
# Result: 128Pogreške — petlja se zaustavlja porukom More than 1 000 000 loops, stopping loop. BREAK ili CONTINUE izvan petlje završava pogreškom Cannot use BREAK() outside of WHILE or DO-WHILE. Znak ; iza unutarnjeg LOOP ili END završava pogreškom Unexpected character ';' in WHILE statement.
Nazivi se razrješavaju prije ključnih riječi petlje. Varijabla ili kratica uređaja s nazivom
DoiliWhileskriva ključnu riječ, a petlja završava pogreškomMissing operator between 'DO' and ….
RETURN
RETURN odmah završava skriptu i zadanu vrijednost čini njezinim rezultatom.
| |
Napomene — bez RETURN rezultat je vrijednost posljednje naredbe. RETURN koristite za vraćanje vrijednosti iz bloka ili za prijevremeni završetak listener skripte kod poruka koje ne obrađuje.
IF ISNAN(Te)
RETURN(0);
END
Te * 1.8 + 32;
# Result: the temperature in °F, or 0 when it is unknownVidi također — Rezultat skripte.