protected Collection<?> getSymbols() { return getUnminimizedFA().getInputs(); }
protected void makeInitialBlocks() { // sink block (for if the automaton isn't complete makeBlock(Collections.singleton(SINK_NODE)); // accepting block Set<Arc> endNodes = getUnminimizedFA().getEndNodes(); makeBlock(endNodes); // main block Collection<Arc> nonFinalNodes = Generics.newHashSet(getUnminimizedFA().getNodes()); nonFinalNodes.removeAll(endNodes); makeBlock(nonFinalNodes); }
protected Collection<Object> getInverseImages(ExactBlock<Arc> block, Object symbol) { List<Object> inverseImages = new ArrayList<>(); for (Arc member : block.getMembers()) { Collection<Arc> arcs = null; if (member != SINK_NODE) { arcs = getUnminimizedFA().getArcsByTargetAndInput(member, symbol); } else { arcs = getUnminimizedFA().getArcsByInput(symbol); if (!sparseMode) { arcs = difference(getUnminimizedFA().getArcs(), arcs); } } if (arcs == null) { continue; } for (Arc arc : arcs) { Object source = arc.getSourceNode(); inverseImages.add(source); } } return inverseImages; }
protected TransducerGraph buildMinimizedFA() { TransducerGraph minimizedFA = new TransducerGraph(); TransducerGraph unminimizedFA = getUnminimizedFA(); for (TransducerGraph.Arc arc : unminimizedFA.getArcs()) { Set<Arc> source = projectNode(arc.getSourceNode()); Set<Arc> target = projectNode(arc.getTargetNode()); try { if (minimizedFA.canAddArc(source, target, arc.getInput(), arc.getOutput())) { minimizedFA.addArc(source, target, arc.getInput(), arc.getOutput()); } } catch (Exception e) { //throw new IllegalArgumentException(); } } minimizedFA.setStartNode(projectNode(unminimizedFA.getStartNode())); for (Object o : unminimizedFA.getEndNodes()) { minimizedFA.setEndNode(projectNode(o)); } return minimizedFA; }