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.