Files
airllm-fork-nodejs/node_modules/node-llama-cpp/dist/utils/gbnfJson/terminals/GbnfRef.js
2026-02-05 15:27:49 +08:00

34 lines
1.6 KiB
JavaScript

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