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