package Lab1; import java.util.*; public class Grammar { private final String SS; private final FiniteAutomaton FA; public Grammar(String SS, Set VT, Map> P) { this.SS = SS; this.FA = new FiniteAutomaton(SS, VT, generateTransitions(P)); } public Map> generateTransitions(Map> P) { Map> transitions = new HashMap<>(); for (Map.Entry> entryP : P.entrySet()) { String state = entryP.getKey(); List productionList = entryP.getValue(); Map stateTransitions = new HashMap<>(); for (String production : productionList) { String symbol = production.substring(0, 1); String nextState = production.length() > 1 ? production.substring(1) : "OK"; stateTransitions.put(symbol, nextState); } transitions.put(state, stateTransitions); } return transitions; } public boolean isValid(String word) { return this.FA.isValid(word); } public void generateWords(int numWords) { List generatedWords = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < numWords; i++) { StringBuilder wordBuilder = new StringBuilder(); String currentState = SS; while (!currentState.equals("OK")) { Map transitions = FA.getTransitions().get(currentState); List symbols = new ArrayList<>(transitions.keySet()); String symbol = symbols.get(random.nextInt(symbols.size())); wordBuilder.append(symbol); currentState = transitions.get(symbol); } generatedWords.add(wordBuilder.toString()); } System.out.println("==================================="); for (String word: generatedWords) { System.out.println(word + " " + (isValid(word) ? "- Valid" : "- Not valid")); } } }