UNPKG

toylang

Version:

A toy programming language built with TypeScript for learning purposes

48 lines (47 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseVariableInitializer = exports.parseVariableDeclaration = exports.parseVariableDeclarationList = exports.parseVariableStatement = exports.parseVariableStatementInit = void 0; var Tokenizer_1 = require("../Tokenizer"); var expression_1 = require("./expression"); var identifiers_1 = require("./identifiers"); // let VariableDeclarationList function parseVariableStatementInit(parser) { parser._eat(Tokenizer_1.TokenTypes.let); var declarations = parseVariableDeclarationList(parser); return parser.factory.VariableStatement(declarations); } exports.parseVariableStatementInit = parseVariableStatementInit; // let VariableDeclarationList ';' function parseVariableStatement(parser) { var varStatement = parseVariableStatementInit(parser); parser._eat(Tokenizer_1.TokenTypes.SEMI); return varStatement; } exports.parseVariableStatement = parseVariableStatement; function parseVariableDeclarationList(parser) { var _a; var declarations = []; do { declarations.push(parseVariableDeclaration(parser)); } while (((_a = parser._lookahead) === null || _a === void 0 ? void 0 : _a.type) === Tokenizer_1.TokenTypes.COMMA && parser._eat(Tokenizer_1.TokenTypes.COMMA)); return declarations; } exports.parseVariableDeclarationList = parseVariableDeclarationList; // Identifier OptVariableInitializer function parseVariableDeclaration(parser) { var _a, _b; var id = identifiers_1.parseIdentifier(parser); var init = ((_a = parser._lookahead) === null || _a === void 0 ? void 0 : _a.type) !== Tokenizer_1.TokenTypes.SEMI && ((_b = parser._lookahead) === null || _b === void 0 ? void 0 : _b.type) !== Tokenizer_1.TokenTypes.COMMA ? parseVariableInitializer(parser) : null; return parser.factory.VariableDeclaration(id, init); } exports.parseVariableDeclaration = parseVariableDeclaration; // SIMPLE_ASSIGNMENT AssignmentExpression function parseVariableInitializer(parser) { parser._eat(Tokenizer_1.TokenTypes.SIMPLE_ASSIGNMENT); return expression_1.parseAssignmentExpression(parser); } exports.parseVariableInitializer = parseVariableInitializer;