First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
import { GbnfTerminal } from "../GbnfTerminal.js";
export class GbnfRef extends GbnfTerminal {
getValueTerminal;
defName;
def;
constructor({ getValueTerminal, defName, def }) {
super();
this.getValueTerminal = getValueTerminal;
this.defName = defName;
this.def = def;
}
getGrammar(grammarGenerator) {
return this.generateRuleName(grammarGenerator);
}
generateRuleName(grammarGenerator) {
if (!grammarGenerator.defRuleNames.has([this.defName, this.def])) {
const alreadyGeneratingGrammarForThisRef = grammarGenerator.defRuleNames.get([this.defName, this.def]) === null;
if (alreadyGeneratingGrammarForThisRef)
return grammarGenerator.generateRuleNameForDef(this.defName, this.def);
grammarGenerator.defRuleNames.set([this.defName, this.def], null);
const grammar = this.getValueTerminal().resolve(grammarGenerator);
if (grammarGenerator.rules.has(grammar) && grammarGenerator.defRuleNames.get([this.defName, this.def]) === null) {
grammarGenerator.defRuleNames.set([this.defName, this.def], grammar);
return grammar;
}
const ruleName = grammarGenerator.generateRuleNameForDef(this.defName, this.def);
grammarGenerator.rules.set(ruleName, grammar);
grammarGenerator.ruleContentToRuleName.set(grammar, ruleName);
return ruleName;
}
return grammarGenerator.generateRuleNameForDef(this.defName, this.def);
}
}
//# sourceMappingURL=GbnfRef.js.map