eliza-core
Version:
A rendition of ELIZA program engine by Weizenbaum sharable for all javascript environments
67 lines (66 loc) • 2.35 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
var estring = __importStar(require("./estring"));
var exceptions_1 = require("./exceptions");
var Reassemble = (function () {
function Reassemble($template, $decompose, $annotate) {
this.template = $template;
this.decompose = $decompose;
this.annotate = $annotate;
}
Reassemble.prototype.isAnnotated = function () {
return !!this.annotate;
};
Reassemble.prototype.getAnnotate = function () {
if (!this.annotate) {
throw new Error('This Reassemble is not annotated');
}
return this.annotate;
};
Reassemble.prototype.getTemplate = function () {
return this.template;
};
Reassemble.prototype.assemble = function (decomposedTokens) {
var ruleTemplate = this.template;
do {
var lines = estring.match(ruleTemplate, 'goto *');
if (lines && lines[0]) {
return {
gotoKey: lines[0],
};
}
} while (0);
var work = '';
do {
if (estring.match(ruleTemplate, '(#)*')) {
ruleTemplate = ' ' + ruleTemplate;
continue;
}
var lines = estring.match(ruleTemplate, '* (#)*');
if (!lines) {
break;
}
ruleTemplate = lines[2];
var n = parseInt(lines[1], 10) - 1;
if (isNaN(n)) {
throw new exceptions_1.UnexpectedNumberException(lines[1], 'reassembly');
}
if (n < 0 || n > decomposedTokens.length) {
throw new Error("Fatal Error: Substitution number is bad " + lines[1] + " in " + this.getTemplate);
}
var term = decomposedTokens[n];
work += lines[0] + " " + term;
} while (true);
work += ruleTemplate;
return { result: work, annotation: this.annotate };
};
return Reassemble;
}());
exports.Reassemble = Reassemble;