Napišite semantični evaluator za razpoznavalnik iz naloge 6.

Razpoznavalnik iz naloge 6 nadgradite v razčlenjevalnik, tako da sproti gradite abstraktno sintaktično drevo iz naloge 8. Abstraktnemu sintaktičnemu drevesu dodajte metodo eval, ki ga bo ovrednotila v številsko vrednost.

Opazite, da lahko oba koraka opišemo z atributno gramatiko.

Program naj iz vhodne datoteke prebere izvorni program, ga razčleni, ovrednoti in rezultat izpiše v izhodno datoteko. Imeni datotek bo program dobil kot konzolna argumenta.

Začetno okolje naj vsebuje:

\[\begin{aligned} x &= 1\\ y &= 3 \end{aligned}\]

Nad izgrajenim abstraktnim sintaktičnim drevesom preizkusite tudi metodi toString in toXML. Opazite, da smo ob enem implementirali tudi minifier ali pretty-printer in serializator v XML.

Nalogo oddajte na GitHub, link.