Dokumentace

Předmět: Úvod do překladačů
Autor: Martin Kot
Studijní číslo: KOT119


Program je psán objektově v C++ (překládán g++ v linuxu). Lexikální analyzátor je generován programem flex.

Seznam tříd

Gramatika jazyka:

A -> S eof
S -> P S1
       | e
S1 -> ; P S1
       | e
P -> let ID = E
       | read ID O
       | print E Q
       | e
O -> , ID O
       | e
Q -> , E Q
       | e
E -> T E1
E1 -> + T E1
       | - T E1
       | e
T -> F T1
T1 -> * F T1
       | / F T1
       | mod F T1
       | div F T1
T1 -> e
F -> - F1
       | + F1
       | F1
F1 -> num
       | (E)
       | ID
NUM-> int
       | real
       | string
ID -> idint
       | idreal
       | idstr

Upřesnění zadání

Program je implementací zadání pro 1 studenta. Tedy umožňuje příkazy let, print, read a prázdný příkaz. Název proměnné může být jakkoliv dlouhý. Výrazy mohou obsahovat celočíselné, reálné a řetězcové literály a proměnné a operátory unární +,- , binární +, -, * , /, mod, div se signaturou podle zadání.

Chování při příkaz READ odpovídá chování následujících příkazů v C++:

READ i;          int i;
                       cin >> i;
READ r#;        float r;
                       cin >> r;
READ s$;        char *s = new char[MAX_RET];
                       cin >> s;
MAX_RET je nastaveno na 1024.

Obdobně chování příkazu PRINT odpovídá následujícím příkazům v C++:
PRINT i;          cout << i;
PRINT r#;        cout << r;
PRINT s$;        cout << s;
Po vypsání všech argumentů příkazu print se provede odřádkování.

Spuštění programu

Program se sestaví pomocí souboru makefile (příkazem make). Vytvoří se tak spustitelný soubor pr. Tento soubor se pouští pro překlad souborů v jazyce podle zadání. Překládané soubory se překladači předávají jako parametry příkazové řádky. Je-li souborů uvedeno více, jsou zpracovány postupně ve stejném pořadí.

Seznam souborů

  • defs.h - definice enum pro hodnoty lexikálních symbolů
  • lexer.l - zdrojový text pro generátor flex
  • makefile - makefile pro kompilaci překladače
  • MyLexer.h - deklarace třídy MyLexer
  • prekladac.cc - obsahuje funkci main() pro spouštění překladu
  • Symbols.cc - definice metod třídy Symbols
  • Symbols.h - deklarace třídy Symbols
  • Syntakt.cc - definice metod třídy Syntakt
  • Syntakt.h - deklarace třídy Syntakt
  • ValHolder.cc - definice metod třídy ValHolder
  • ValHolder.h - deklarace tříd Hodnota a ValHolder, enum pro určení datového typu, pole řetězců pro pojmenování datových typů (pro chybové hlášky)
  • VarTable.cc - deklarace třídy VarTable
  • VarTable.h - definice metod třídy VarTable
  • lex.yy.cc - soubor vygenerovaný programem flex obsahující definice metod třídy MyLexer
  • pr - výsledný spustitelný soubor vzniklý překladem za pomocí makefile souboru
  • *.udp - ukázkové příklady v jazyce překládaném tímto programem. Příklady obsahují chyby pro kontrolu jejich detekce a zotavení po nich.