fixed folder structure + lab4 less hardcode, cleanup
This commit is contained in:
58
src/Lab1/Grammar.java
Normal file
58
src/Lab1/Grammar.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package Lab1;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Grammar {
|
||||
private final String SS;
|
||||
private final FiniteAutomaton FA;
|
||||
|
||||
public Grammar(String SS, Set<String> VT, Map<String, List<String>> P) {
|
||||
this.SS = SS;
|
||||
this.FA = new FiniteAutomaton(SS, VT, generateTransitions(P));
|
||||
}
|
||||
|
||||
public Map<String, Map<String, String>> generateTransitions(Map<String, List<String>> P) {
|
||||
Map<String, Map<String, String>> transitions = new HashMap<>();
|
||||
for (Map.Entry<String, List<String>> entryP : P.entrySet()) {
|
||||
String state = entryP.getKey();
|
||||
List<String> productionList = entryP.getValue();
|
||||
Map<String, String> 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<String> 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<String, String> transitions = FA.getTransitions().get(currentState);
|
||||
List<String> 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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user