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

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

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.

Rezultat naslednjega primera

var n = 10;
var factorial = 1;

for (var i = 1, n - 1) {
     factorial = factorial * i;
}

print(factorial);

naj bo enak:

362880.0

Nalogo oddajte na GitHub, link.