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