TapHome

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: 4

Toč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 check

Znak # 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.

LiteralPrimjerNapomene
Broj5, 21.5, -3Decimalna točka .. Brojčani literal je double, pa je 5 / 2 jednako 2.5. Bez eksponenta (1e3), bez točke na početku (.5).
Heksadecimalni0xA0A0, 0xffTip int, znamenke ne razlikuju velika i mala slova: 0xA0A0 je 41120.
Binarni0b10101010Tip int: 170.
Logička vrijednostTRUE, FALSE
Nepoznati brojNaNNikad nije jednak ničemu; provjerava se funkcijom ISNAN.
Bez vrijednostiNullProvjerava 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 enumaH, BigEndianFloat, DateTimeKind.UtcSama 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).

1
2
IF(condition, valueIfTrue)
IF(condition, valueIfTrue, valueIfFalse)

Parametri

NazivTipOpis
conditionboolBroj različit od nule je TRUE, Null je FALSE.
valueIfTrueanyVraća se kada je uvjet TRUE.
valueIfFalseanyNeobavezno, 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 NaN

Oblik bloka

1
2
3
4
5
6
7
IF condition
    statements;
ELSEIF condition
    statements;
ELSE
    statements;
END

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);
END

Pogreš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.

1
SWITCH(value, case1, result1, case2, result2, ..., defaultResult)

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 Example
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.

1
2
3
4
5
6
7
WHILE condition
    statements;
LOOP

DO
    statements;
LOOP WHILE condition

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: 5
int n := 1;
DO
    n := n * 2;
LOOP WHILE n < 100
n;
# Result: 128

Pogreš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 Do ili While skriva ključnu riječ, a petlja završava pogreškom Missing operator between 'DO' and ….

RETURN

RETURN odmah završava skriptu i zadanu vrijednost čini njezinim rezultatom.

1
RETURN(value)

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 unknown

Vidi također — Rezultat skripte.