toylang
Version:
A toy programming language built with TypeScript for learning purposes
48 lines (47 loc) • 2.27 kB
JavaScript
;
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;