@parser-generator/grammar-interpreter
Version:
A Parser Generator that supports LL,SLR,LR1,LALR
67 lines • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class ASTList {
constructor(eles) {
this.eles = eles;
}
}
class Expr extends ASTList {
get left() {
return this.eles[0];
}
get term() {
return this.eles.length == 2 ? this.eles[1] : undefined;
}
eval() {
let result = this.left.eval();
let term = this.term;
while (term != undefined) {
let op = term.op;
let right = term.right;
switch (op) {
case "+":
result += right;
break;
case "-":
result -= right;
break;
}
term = term.subTerm;
}
return result;
}
toString() {
return "E";
}
}
exports.Expr = Expr;
class Term extends ASTList {
get op() {
return this.eles.length > 0 ? this.eles[0].value() : undefined;
}
get right() {
return this.eles.length > 1 ? this.eles[1].eval() : undefined;
}
get subTerm() {
return this.eles.length > 2 ? this.eles[2] : undefined;
}
toString() {
return "T";
}
}
exports.Term = Term;
class Factor extends ASTList {
eval() {
if (this.eles.length == 1) {
return this.eles[0].value();
}
else {
return this.eles[1].eval();
}
}
toString() {
return "F";
}
}
exports.Factor = Factor;
//# sourceMappingURL=ast.js.map