Programovací jazyky a překladače

  • Úvodní stránka
  •  
    Přednášky Zkouška Cvičení První projekt Druhý projekt

    Specifikace jazyka

    Formát programu

    Program je tvořen posloupností příkazů. Příkazy jsou zapsány ve volném formátu, poznámky, mezery, tabulátory a konce řádků slouží pouze jako oddělovače a na význam programu nemají vliv. Poznámky jsou omezeny dvěma lomítky a koncem řádku. Klíčová slova jsou rezervovaná. V identifikátorech a klíčových slovech se rozlišují velká a malá písmena.

    Proměnné

    Názvy proměnných jsou tvořeny identifikátorem. Každá proměnná musí být před použitím deklarována, opakovaná deklarace proměnné téhož názvu je chybou. Po deklaraci má proměnná podle svého typu hodnotu 0, 0.0, "", resp. False.

    Příkazy

    Jsou definovány následující příkazy:

    Výrazy

    V argumentech výrazů se jako operandy mohou vyskytovat celá desítková čísla, reálná čísla (včetně případného exponentu) a řetězce v uvozovkách (bez escape sekvencí). Operandy musí být typově kompatibilní, podle potřeby se provádí automatická konverze celočíselných operandů na reálné (ne naopak).

    Jsou definovány následující operátory (písmena I, R, B, S vyjadřují datové typy int, float, boolean a String, typy T v relačních operátorech a ternárním operátoru ?: musí být v rámci jednoho operátoru kompatibilní). ):

    Popis Operátor Signatura
    unární operátor pro změnu znaménka - I->I, R->R
    binární aritmetické operátory + - * / IxI->I, RxR->R
    % IxI->I
    operátor konkatenace . SxS->S
    relační operátory < <= > >= == != TxT->B (T = I,R,S,B)
    logické operátory &&, || BxB->B
    ! B->B
    ternární operátor podmínka ? výraz : výraz BxTxT->T (T = I,R,S,B)

    Výrazy mohou obsahovat závorky. Operátory jsou zleva asociativní, priorita operátorů je následující (v pořadí od nejnižší k nejvyšší):

    1. ||
    2. &&
    3. relační operátory
    4. + - .
    5. * / %
    6. !, unární -

    Ve výrazech se dále mohou vyskytovat konstanty True a False typu boolean (pro relační operátory platí False < True).

    Varianty zadání

    Kombinovaní studenti
    Řešení nemusí obsahovat příkazy if a while.


    Konstrukce jazyka demonstruje následující ukázkové vstupy: t1.txt, t1e1.txt, t2.txt, t3.txt.
    Syntaktický analyzátor jazyka: Project.jj
    Vnitřní reprezentace a pomocné třídy: Zdrojové kódy
    Kompletní zdrojové kódy spojující IR a syntaktický analyzátor: Zdrojové kódy
    15.4. Opraveno - '.' lze použít jako operátor (byla brána jako začátek desetinného čísla), při implementaci Visitoru nebyla procházená pravá větev BinaryExpression.
    Dohodnuté instrukce:
    InstrukceDoplňující informace
    add sčítání
    sub odečítání
    mul násobení
    div dělení
    mod modulo
    uminus unární mínus
    concat spojení řetězců
    and
    or
    gt >
    lt <
    eq =
    not negace
    push x Uloží na zásobník hodnotu x, z praktického hlediska je jednodušší, pokud je hodnota rozšířena o typ. Typ může reprezentovat například velké písmeno na začátku. Konkretní příklady tak mohou být: push I0 (int 0), push Btrue, push I123, push sabc (řetězec abc),push S(prázdný řetezec)
    load id Načte hodnotu proměnné id na zásobník.
    save id Uloží hodnotu ze zásobníku do proměnné.
    label n
    jmp n Skok na návěští.
    fjmp n Podmíněný skok na návěští. Skok se provede jen v případě, že na zásobníku je hodnota false;
    print n Tisk n hodnot na obrazovku.
    read X Přečte hodnotu typu X ze vstupu. Typ X může být zadán například: I - int, S - String, B - boolean, F - double/float

    (c) Marek Běhálek, FEI VŠB-TU OstravaDesing: Miroslav Beneš, FEI VŠB-TU Ostrava 8. 2. 2012 17:40:33