You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
2.0 KiB

import {
Alternation,
Alternative,
NonTerminal,
Option,
Repetition,
RepetitionMandatory,
RepetitionMandatoryWithSeparator,
RepetitionWithSeparator,
Rule,
Terminal,
} from "./model.js";
import type { IProduction } from "@chevrotain/types";
export abstract class GAstVisitor {
public visit(node: IProduction): any {
const nodeAny: any = node;
switch (nodeAny.constructor) {
case NonTerminal:
return this.visitNonTerminal(nodeAny);
case Alternative:
return this.visitAlternative(nodeAny);
case Option:
return this.visitOption(nodeAny);
case RepetitionMandatory:
return this.visitRepetitionMandatory(nodeAny);
case RepetitionMandatoryWithSeparator:
return this.visitRepetitionMandatoryWithSeparator(nodeAny);
case RepetitionWithSeparator:
return this.visitRepetitionWithSeparator(nodeAny);
case Repetition:
return this.visitRepetition(nodeAny);
case Alternation:
return this.visitAlternation(nodeAny);
case Terminal:
return this.visitTerminal(nodeAny);
case Rule:
return this.visitRule(nodeAny);
/* c8 ignore next 2 */
default:
throw Error("non exhaustive match");
}
}
/* c8 ignore next */
public visitNonTerminal(node: NonTerminal): any {}
/* c8 ignore next */
public visitAlternative(node: Alternative): any {}
/* c8 ignore next */
public visitOption(node: Option): any {}
/* c8 ignore next */
public visitRepetition(node: Repetition): any {}
/* c8 ignore next */
public visitRepetitionMandatory(node: RepetitionMandatory): any {}
/* c8 ignore next 3 */
public visitRepetitionMandatoryWithSeparator(
node: RepetitionMandatoryWithSeparator,
): any {}
/* c8 ignore next */
public visitRepetitionWithSeparator(node: RepetitionWithSeparator): any {}
/* c8 ignore next */
public visitAlternation(node: Alternation): any {}
/* c8 ignore next */
public visitTerminal(node: Terminal): any {}
/* c8 ignore next */
public visitRule(node: Rule): any {}
}