UNPKG

toylang

Version:

A toy programming language built with TypeScript for learning purposes

56 lines (55 loc) 2.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse_LogicalExpression = exports.parse_BinaryExpression = exports.parseLogicalORExpression = exports.parseLogicalANDExpression = exports.parseMultiplicativeExpression = exports.parseAdditiveExpression = exports.parseRelationalExpression = exports.parseEqualityExpression = void 0; var Tokenizer_1 = require("../Tokenizer"); var expression_1 = require("./expression"); function parseEqualityExpression(parser) { return parse_BinaryExpression(parser, parseRelationalExpression, Tokenizer_1.TokenTypes.EQUALITY_OPERATOR); } exports.parseEqualityExpression = parseEqualityExpression; // RelationalExpression // AdditiveExpression RELATIONAL_OPERATOR function parseRelationalExpression(parser) { return parse_BinaryExpression(parser, parseAdditiveExpression, Tokenizer_1.TokenTypes.RELATIONAL_OPERATOR); } exports.parseRelationalExpression = parseRelationalExpression; // MultiplicativeExpression ADDITITIVE_OPERATOR MultiplicativeExpression function parseAdditiveExpression(parser) { return parse_BinaryExpression(parser, parseMultiplicativeExpression, Tokenizer_1.TokenTypes.ADDITITIVE_OPERATOR); } exports.parseAdditiveExpression = parseAdditiveExpression; // UnaryExpression MULTIPLICATIVE_OPERATOR UnaryExpression function parseMultiplicativeExpression(parser) { return parse_BinaryExpression(parser, expression_1.parseUnaryExpression, Tokenizer_1.TokenTypes.MULTIPLICATIVE_OPERATOR); } exports.parseMultiplicativeExpression = parseMultiplicativeExpression; function parseLogicalANDExpression(parser) { return parse_LogicalExpression(parser, parseEqualityExpression, Tokenizer_1.TokenTypes.LOGICAL_AND); } exports.parseLogicalANDExpression = parseLogicalANDExpression; function parseLogicalORExpression(parser) { return parse_LogicalExpression(parser, parseLogicalANDExpression, Tokenizer_1.TokenTypes.LOGICAL_OR); } exports.parseLogicalORExpression = parseLogicalORExpression; function parse_BinaryExpression(parser, builder, tokenType) { var _a; var left = builder(parser); while (((_a = parser._lookahead) === null || _a === void 0 ? void 0 : _a.type) === tokenType) { var operator = parser._eat(tokenType).value; var right = builder(parser); left = parser.factory.BinaryExpression(operator, left, right); } return left; } exports.parse_BinaryExpression = parse_BinaryExpression; function parse_LogicalExpression(parser, builder, tokenType) { var _a; var left = builder(parser); while (((_a = parser._lookahead) === null || _a === void 0 ? void 0 : _a.type) === tokenType) { var operator = parser._eat(tokenType).value; var right = builder(parser); left = parser.factory.LogicalExpression(operator, left, right); } return left; } exports.parse_LogicalExpression = parse_LogicalExpression;