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