pegisland
Version:
General PEG-based parser supporting island grammars with lake symbols
71 lines • 1.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PostorderExpressionTraverser = void 0;
class PostorderExpressionTraverser {
constructor(visitor) {
this.visitor = visitor;
}
traverse(pe) {
pe.accept(this);
}
visitNonterminal(pe) {
this.visitSymbol(pe);
}
visitTerminal(pe) {
this.visitSymbol(pe);
}
visitZeroOrMore(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitOneOrMore(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitOptional(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitAnd(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitNot(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitSequence(pe) {
this.visitOperatorWithMultipleOperands(pe);
}
visitOrderedChoice(pe) {
this.visitOperatorWithMultipleOperands(pe);
}
visitGrouping(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitRewriting(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitColon(pe) {
this.visitOperatorWithTwoOperands(pe);
}
visitColonNot(pe) {
this.visitOperatorWithTwoOperands(pe);
}
visitLake(pe) {
this.visitOperatorWithOneOperand(pe);
}
visitSymbol(pe) {
pe.accept(this.visitor);
}
visitOperatorWithOneOperand(pe) {
pe.operand.accept(this);
pe.accept(this.visitor);
}
visitOperatorWithTwoOperands(pe) {
pe.lhs.accept(this);
pe.rhs.accept(this);
pe.accept(this.visitor);
}
visitOperatorWithMultipleOperands(pe) {
pe.operands.forEach((operand) => operand.accept(this));
pe.accept(this.visitor);
}
}
exports.PostorderExpressionTraverser = PostorderExpressionTraverser;
//# sourceMappingURL=PostorderExpressionTraverser.js.map