toylang
Version:
A toy programming language built with TypeScript for learning purposes
39 lines (38 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Parser = void 0;
var Tokenizer_1 = require("./Tokenizer");
var ASTFactories_1 = require("./ASTFactories");
var statement_1 = require("./core/statement");
var Parser = /** @class */ (function () {
function Parser(astFactory) {
if (astFactory === void 0) { astFactory = ASTFactories_1.DefaultASTFactory; }
this._string = "";
this._tokenizer = new Tokenizer_1.Tokenizer();
this.factory = astFactory;
}
Parser.prototype.parse = function (string) {
this._string = string;
this._tokenizer.init(string);
// prime the tokenizer by obtaining the first token (predictive parsing)
this._lookahead = this._tokenizer.getNextToken();
return this.Program();
};
Parser.prototype.Program = function () {
return this.factory.Program(statement_1.parseStatementList(this));
};
Parser.prototype._eat = function (tokenType) {
var token = this._lookahead;
if (token === null) {
throw new SyntaxError("Unexpected end of input, expected: \"" + tokenType + "\"");
}
if (token.type !== tokenType) {
throw new SyntaxError("Unexpected token: \"" + token.value + "\", expected: \"" + tokenType + "\"");
}
this._lookahead = this._tokenizer.getNextToken();
return token;
};
return Parser;
}());
exports.Parser = Parser;
module.exports = { Parser: Parser };