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.
 
 
 
 
 

116 lines
2.7 KiB

import type {
Alternative,
Assertion,
Character,
Disjunction,
Group,
GroupBackReference,
IRegExpAST,
Quantifier,
RegExpAstPart,
RegExpFlags,
RegExpPattern,
Set,
} from "../types";
export class BaseRegExpVisitor {
public visitChildren(node: IRegExpAST) {
for (const key in node) {
const child = (node as any)[key];
/* istanbul ignore else */
if (node.hasOwnProperty(key)) {
if (child.type !== undefined) {
this.visit(child);
} else if (Array.isArray(child)) {
child.forEach((subChild) => {
this.visit(subChild);
}, this);
}
}
}
}
public visit(node: RegExpAstPart): void {
switch (node.type) {
case "Pattern":
this.visitPattern(node);
break;
case "Flags":
this.visitFlags(node);
break;
case "Disjunction":
this.visitDisjunction(node);
break;
case "Alternative":
this.visitAlternative(node);
break;
case "StartAnchor":
this.visitStartAnchor(node);
break;
case "EndAnchor":
this.visitEndAnchor(node);
break;
case "WordBoundary":
this.visitWordBoundary(node);
break;
case "NonWordBoundary":
this.visitNonWordBoundary(node);
break;
case "Lookahead":
this.visitLookahead(node);
break;
case "NegativeLookahead":
this.visitNegativeLookahead(node);
break;
case "Character":
this.visitCharacter(node);
break;
case "Set":
this.visitSet(node);
break;
case "Group":
this.visitGroup(node);
break;
case "GroupBackReference":
this.visitGroupBackReference(node);
break;
case "Quantifier":
this.visitQuantifier(node);
break;
}
this.visitChildren(node);
}
public visitPattern(node: RegExpPattern): void {}
public visitFlags(node: RegExpFlags): void {}
public visitDisjunction(node: Disjunction): void {}
public visitAlternative(node: Alternative): void {}
// Assertion
public visitStartAnchor(node: Assertion): void {}
public visitEndAnchor(node: Assertion): void {}
public visitWordBoundary(node: Assertion): void {}
public visitNonWordBoundary(node: Assertion): void {}
public visitLookahead(node: Assertion): void {}
public visitNegativeLookahead(node: Assertion): void {}
// atoms
public visitCharacter(node: Character): void {}
public visitSet(node: Set): void {}
public visitGroup(node: Group): void {}
public visitGroupBackReference(node: GroupBackReference): void {}
public visitQuantifier(node: Quantifier): void {}
}