fauton
Version:
A library to test any finite automaton with arbitrary alphabets
45 lines (44 loc) • 2.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generatePostNormalizationErrors = void 0;
function generatePostNormalizationErrors(automaton) {
const automatonValidationErrors = [];
const automatonStates = new Set(automaton.states);
const automatonAlphabets = new Set(automaton.alphabets);
automaton.final_states.forEach((state) => {
if (!automatonStates.has(state)) {
automatonValidationErrors.push(`Automaton final_states must reference a state (${state}) that is present in states`);
}
});
if (automaton.epsilon_transitions) {
Object.entries(automaton.epsilon_transitions).forEach(([transitionStartState, transitionTargetStates]) => {
if (!automatonStates.has(transitionStartState)) {
automatonValidationErrors.push(`Epsilon transitions state ${transitionStartState} must reference a state that is present in states`);
}
transitionTargetStates.forEach((transitionTargetState) => {
if (!automatonStates.has(transitionTargetState)) {
automatonValidationErrors.push(`Epsilon transitions state ${transitionTargetState} must reference a state that is present in states`);
}
});
});
}
Object.entries(automaton.transitions).forEach(([transitionKey, transitionStatesRecord]) => {
if (!automatonStates.has(transitionKey)) {
automatonValidationErrors.push(`Automaton transitions (${transitionKey}) must reference a state that is present in states`);
}
if (transitionStatesRecord) {
Object.entries(transitionStatesRecord).forEach(([transitionStateSymbol, transitionStateTargetStates]) => {
if (!automatonAlphabets.has(transitionStateSymbol)) {
automatonValidationErrors.push(`Automaton transitions symbol (${transitionStateSymbol}), must reference a valid alphabet`);
}
transitionStateTargetStates.forEach((transitionStateTargetState) => {
if (!automatonStates.has(transitionStateTargetState)) {
automatonValidationErrors.push(`Automaton transitions value (${transitionStateTargetState}) when a tuple, must reference a valid state`);
}
});
});
}
});
return automatonValidationErrors;
}
exports.generatePostNormalizationErrors = generatePostNormalizationErrors;