tfl-js
Version:
A TypeScript library for parsing and evaluating propositional logic formulas
43 lines • 1.65 kB
JavaScript
;
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