swahili-lang
Version:
A new programming language with semantics borrowed from the Swahili language to help teach programming concepts to Swahili speaking students.
64 lines (57 loc) • 1.54 kB
JavaScript
class ParseResult {
constructor() {
this.error = null;
this.node = null;
this.lastRegisteredAdvanceCount = 0;
this.advanceCount = 0;
this.toReverseCount = 0;
}
/**
* log that the parser advanced to the next token
*/
registerAdvancement() {
this.advanceCount++;
}
/**
* extracts a node from a successful ParseResult or returns its associated error
* @param {ParseResult} res parsed {node, error} to process
* @returns {Node}
*/
register(res) {
this.lastRegisteredAdvanceCount = res.advanceCount;
this.advanceCount += res.advanceCount;
if (res.error) this.error = res.error;
return res.node;
}
/**
* attempts to extract a node from a successful ParseResult or returns its associated error
* @param {ParseResult} res parsed {node, error} to process
* @returns {Node}
*/
tryRegister(res) {
if (res.error) {
this.toReverseCount = res.advanceCount;
return null;
}
return this.register(res);
}
/**
* adds a successful parsed node to the ParseResult
* @param {Node} node successfully evaluated parsed node
* @returns {ParseResult}
*/
success(node) {
this.node = node;
return this;
}
/**
* adds a failed parsed node to the ParseResult
* @param {Error} error unsuccessfully evaluated parsed node error message
* @returns {ParseResult}
*/
failure = (error) => {
if (!this.error || this.advanceCount === 0) this.error = error;
return this;
};
}
module.exports = ParseResult;