eliza-core
Version:
A rendition of ELIZA program engine by Weizenbaum sharable for all javascript environments
58 lines (57 loc) • 1.98 kB
JavaScript
import * as estring from './estring';
import { UnexpectedNumberException } from './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 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;
}());
export { Reassemble };