Directory:Derek Elder/Programs/NonDeterministicFiniteAutomata
MyWikiBiz, Author Your Legacy — Saturday November 23, 2024
Jump to navigationJump to search//Program 1e //Professor Pattis, ICS-23 Lab 1 //Programmers: Cameron Ruatta, Derek Elder import edu.uci.ics.pattis.introlib.Prompt; import edu.uci.ics.pattis.introlib.TypedBufferReader; import edu.uci.ics.pattis.ics23.collections.*; import java.util.Iterator; import java.util.StringTokenizer; import java.io.EOFException; public class NDFA { public static void main(String[] args) { Map<String,Map<String,Set<String>>> nonDeterministicMap = new ArrayMap<String,Map<String,Set<String>>>(); TypedBufferReader tbr = new TypedBufferReader("Enter Non-Deterministic Finite Automaton Description File"); for(;;) { try { String line = tbr.readLine(); StringTokenizer st = new StringTokenizer(line, ";"); String initialState = st.nextToken(); if(!st.hasMoreTokens()) { Map<String,Set<String>> stateMap = nonDeterministicMap.get(initialState); stateMap = new ArrayMap<String,Set<String>>(); nonDeterministicMap.put(initialState,stateMap); } while(st.hasMoreTokens()) { String token = st.nextToken(); String token2 = st.nextToken(); Set<String> transitions = new ArraySet<String>(); //Update map Map<String,Set<String>> stateMap = nonDeterministicMap.get(initialState); if(stateMap == null) { stateMap = new ArrayMap<String,Set<String>>(); nonDeterministicMap.put(initialState,stateMap); } //If the token has a state associated with it already, add it in if(stateMap.get(token) != null) { Iterator<String> it = stateMap.get(token).iterator(); while(it.hasNext()) transitions.add(it.next()); } transitions.add(token2); stateMap.put(token,transitions); } } catch(EOFException e) {break;} } System.out.println("Non-Deterministic Finite Automaton"); List<String> stateList = new ArrayList<String>(nonDeterministicMap.keys()); Collections.sort(stateList); for(String states : stateList) { Map<String,Set<String>> keys = nonDeterministicMap.get(states); System.out.println(states + " transitions = " + keys); } tbr = new TypedBufferReader("Enter start state/inputs file"); for(;;) { try { String line = tbr.readLine(); StringTokenizer st = new StringTokenizer(line, ";"); String initialToken = st.nextToken(); initialStates.add(initialToken); Set<String> currentStates = new ArraySet<String>(); currentStates.add(st.nextToken()); System.out.println("Initial state(s) = " + currentStates); while(st.hasMoreTokens()) { String token = st.nextToken(); Set<String> intermediateStates = new ArraySet<String>(); for(String state : currentStates) { Set<String> toStates = nonDeterministicMap.get(state).get(token); if (toStates != null) intermediateStates.addAll(toStates); } currentStates = nextStates; System.out.println("input = " + token + "; new possible states = " + currentStates); } } catch(EOFException e) {break;} } System.out.println("Final possible state(s) = " + currentStates); } }