UNPKG

toylang

Version:

A toy programming language built with TypeScript for learning purposes

39 lines (38 loc) 1.54 kB
"use strict"; 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 };