Programkód

Ez a rész a programkód szintaxisát és felépítését írja le.

Szintaxis

Megjegyzések

Három típus érhető el:

  • Általános megjegyzés: hagyományos // és /* … */ jelölést használ, Code::Comment csomópont jön létre.

  • Dokumentációs megjegyzés: //! és /*! … */ jelöléssel, a következő csomóponthoz kötődik.

  • Negáló vagy diszkvalitív megjegyzés: //- és /*- … */ jelöléssel, a beolvasó figyelmen kívül hagyja, nem tárolódik el.

Kulcsszavak

Mivel a szintaxis sem végleges, átmenetileg egy csillaggal (*) kezdődnek a kulcsszavak.

Számformátumok

A jelöletlen egész szám alapértelmezésben int32 típust kap, a lebegőpointos float32 típust. A következő utótagok típusai:

  • «u»: uint32

  • «s»: int16

  • «us»: uint16

  • «l»: int64

  • «ul»: uint64

  • «f»: float32

  • «lf»: float64

Sztringek

A sztringek csak kódolt speciális jeleket tartalmazhatnak, nyers sor vége jelet nem. Az egymás után következő sztringek összefűzésre kerülnek.

  • általános sztring: „” jelek között, Data::String típusú

  • lefordítható szöveg: _”” jelek között, Data::LangString típusú

  • karakter a «» jelek között, Data::Char típusú

Logikai értékek

Három logikai érték támogatott: true, false, undefined.

Tároló literálok

A sima kapcsos zárójel vektor típust jelöl. Specializált tárolókhoz csak homogén tartalom rendelhető.

  • vektor: *vector{…}, Store::Vector

  • lista: *list{…}, Store::List

  • halmaz: *set{…}, Store::Set

  • térkép: *map{}, Store::Map

  • bináris tömb: *bin{…}, Store::BinaryArray

Speciális változók

A numerikus változó dollár jellel ($) kezdődik és egy egész szám követi, a nevesített változó karakterláncot tartalmaz a dollár után. Behelyettesítéskor használatosak.

Nyers szöveg

Nyers szövegrésztet a %{ és }% jelek között adható meg, a közbenső rész nem lesz külön értelmezve.

Speciális elemek

  • *null: Data::Null

  • *invalid: Data::Invalid

Műveletek

Aritmetikai műveletek nyers adatok vagy adat csomópontok között történhet. Az operátor metódus még nem támogatott.

Alapműveletek

Támogatott unáris alapműveletek és jelölésük:

  • negálás (-)

  • inverz logikai érték (!)

  • növelés eggyel (++)

  • csökkentés eggyel (--)

Támogatott bináris alapműveletek és jelölésük:

  • összeadás (+)

  • kivonás (-)

  • szorás (*)

  • osztás (/)

  • maradék képzés (%)

  • hatványozás (^)

  • «és» bináris művelet (&)

  • «vagy» bináris művelet (|)

  • «és» logikai művelet (&&)

  • «vagy» logikai művelet (||)

Konstans lista

Rögzített tartalmú halmaz, sztring összehasonlításra használható. A Store::Set tároló csomópontokat tartalmaz, a konstans lista nyers adatokkal dolgozik, ezért sokkal hatékonyabb. Negálni a ! @ formával lehetséges.

    *if (value @ <("a", "b", "c")>) {
        System::stdout ("Match!\n");
    }

Változók

Változót létrehozni típus megadással lehet.

    [attrib] Type identifier;
    [attrib] Type identifier (values...);

Speciális típus a Node amely bármely típusra alkalmazható. Használatát a validátorban tiltani lehet. Hatóköre a kódblokk végéig tart.

Kifejezések

Minden kifejezés egy Code::Expression típusú csomópontban található.

Balértékek

Nincs implicit típus konverzió.

Operátorok

Három típusa van:

  • unáris: egy operátor és egy operandus

  • bináris: egy bináris opertor és két operandus

  • multi: egy bináris operátor és kettő vagy több operandus.

Hivatkozások

Paraméter, blokk változó, osztály változó elérése.

Hívások

Értékadás vagy állapot változás céljából, paraméter átadással.

Ciklusok

Léptető «for» ciklus:

    *for (int32 i = 0; i < 10; i++) {
        System::stdout ("%1\n"[i]);
    }

«Foreach» ciklus:

    Store::Vector<Data::String> list = {"a", "b", "c"};
    *foreach (Data::String i: list) {
        System::stdout ("%1\n"[i]);
    }

Elöl tesztelő «while» ciklus:

    uint32 i = 0;
    *while (i < 10) {
        System::stdout ("%1\n"[i++]);
    }

Hátul tesztelő «until» ciklus:

    uint32 i = 0;
    *do {
        System::stdout ("%1\n"[i++]);
    }
    *until (i < 10);

Kondíciók

Feltétel:

Lehetőség van a hagyományos if/else párok használatára is, vagy a feldolgozást és az összetartozást hatékonyabban elősegítő feltétel láncok kialakítására.

    *if (value == "a") {
        System::stdout ("1\n");
    }
    *elsif (value == "b") {
        System::stdout ("2\n");
    }
    *else {
        System::stdout ("3\n");
    }

«Switch»:

Egész típus (int32) és sztring is megadható kulcsnak, de nem keverhető.

    string a = "a";
    *switch (a) {
        *case "a": {
            System::stdout ("1\n");
        }
        *case "b":
        *case "c": {
            System::stdout ("2\n");
        }
        *default: {
            System::stdout ("3\n");
        }
    }

Belépési pont és funkció

Mindkettő statikus jellegű, végrehajtásban nem különböznek.

Funkció

A funkciók egyszerű sorrendi végrehajtást lehetővé tevő szerkezetek.

    *function bool hello (Data::String message) {
        *if (message.empty())
            *return false;
        System::stdout (message);
        *return true;
    };

Belépési pont

A belépési pontnak inkább szemantikai jelentősége van. Kezdetben adatok adhatók át, visszatérése után minden művelet befejezettnek tekinthető és minden erőforrásnak lezárásra kell kerülnie.

Paramétere lehet üres, vagy sztring tömb. A konkrét típus a hívás módjától és a felhasználástól függ. Konzolból is futtatható, de egy cél nyelvre (pl. C++ vagy Python) transzformált állapotban van konkrét jelentősége.

    *entrypoint int main (Store::Vector<Data::String> args) {
        System::stdout ("Hello from %1\n"[args[0]]);
        *return 0;
    };