First commit.

Signed-off-by: Chen Xiao <abigwc@gmail.com>
This commit is contained in:
Chen Xiao
2026-05-08 14:43:16 +08:00
commit 0b64e2de94
10989 changed files with 2253791 additions and 0 deletions
@@ -0,0 +1,126 @@
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 "Lookbehind":
this.visitLookbehind(node);
break;
case "NegativeLookbehind":
this.visitNegativeLookbehind(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 {}
public visitLookbehind(node: Assertion): void {}
public visitNegativeLookbehind(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 {}
}