UNPKG

tfl-js

Version:

A TypeScript library for parsing and evaluating propositional logic formulas

43 lines 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseSequent = parseSequent; const parser_1 = require("./parser"); const errors_1 = require("../errors"); /** * Parse a sequent string into premises and conclusion * @param input Sequent string in the format "P1, P2, ..., Pn ⊨ C" or "⊨ C" for empty premises * @returns Parsed premises and conclusion * @throws ParseError if the input is invalid */ function parseSequent(input) { // Split on turnstile (⊨, ⊢, or |-) const parts = input.split(/⊨|⊢|\|-/); if (parts.length !== 2) { throw new errors_1.ParseError('Invalid sequent: missing or multiple turnstiles', 0, 1, 0, input); } const [premisesPart, conclusionPart] = parts; // Create parser instance const parser = new parser_1.TFLParser(); try { // Parse premises (split on commas and trim) const premises = premisesPart .split(',') .map(p => p.trim()) .filter(p => p.length > 0) .map(p => parser.parse(p)); // Parse conclusion (trim) const trimmedConclusion = conclusionPart.trim(); if (trimmedConclusion.length === 0) { throw new errors_1.ParseError('Invalid sequent: empty conclusion', 0, 1, 0, input); } const conclusion = parser.parse(trimmedConclusion); return { premises, conclusion }; } catch (error) { if (error instanceof errors_1.ParseError) { throw error; } throw new errors_1.ParseError('Failed to parse sequent', 0, 1, 0, input); } } //# sourceMappingURL=sequent.js.map