UNPKG

toylang

Version:

A toy programming language built with TypeScript for learning purposes

54 lines (53 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseStringLiteral = exports.parseNumericLiteral = exports.parseBooleanLiteral = exports.parseNullLiteral = exports.parseLiteral = exports.isLiteral = void 0; var Tokenizer_1 = require("../Tokenizer"); function isLiteral(tokenType) { if (!tokenType) throw Error("No token type provided"); return [ Tokenizer_1.TokenTypes.NUMBER, Tokenizer_1.TokenTypes.STRING, Tokenizer_1.TokenTypes.true, Tokenizer_1.TokenTypes.false, Tokenizer_1.TokenTypes.null, ].includes(tokenType); } exports.isLiteral = isLiteral; function parseLiteral(parser) { var _a; switch ((_a = parser._lookahead) === null || _a === void 0 ? void 0 : _a.type) { case Tokenizer_1.TokenTypes.NUMBER: return parseNumericLiteral(parser); case Tokenizer_1.TokenTypes.STRING: return parseStringLiteral(parser); case Tokenizer_1.TokenTypes.true: return parseBooleanLiteral(parser, true); case Tokenizer_1.TokenTypes.false: return parseBooleanLiteral(parser, false); case Tokenizer_1.TokenTypes.null: return parseNullLiteral(parser); } throw new SyntaxError("Literal: Unexpected literal"); } exports.parseLiteral = parseLiteral; function parseNullLiteral(parser) { parser._eat(Tokenizer_1.TokenTypes.null); return parser.factory.NullLiteral(); } exports.parseNullLiteral = parseNullLiteral; function parseBooleanLiteral(parser, value) { parser._eat(value ? Tokenizer_1.TokenTypes.true : Tokenizer_1.TokenTypes.false); return parser.factory.BooleanLiteral(value); } exports.parseBooleanLiteral = parseBooleanLiteral; function parseNumericLiteral(parser) { var token = parser._eat(Tokenizer_1.TokenTypes.NUMBER); return parser.factory.NumericLiteral(Number(token.value)); } exports.parseNumericLiteral = parseNumericLiteral; function parseStringLiteral(parser) { var token = parser._eat(Tokenizer_1.TokenTypes.STRING); return parser.factory.StringLiteral(token.value.slice(1, -1)); } exports.parseStringLiteral = parseStringLiteral;