<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Directory%3ADerek_Elder%2FPrograms%2FNonDeterministicFiniteAutomata</id>
	<title>Directory:Derek Elder/Programs/NonDeterministicFiniteAutomata - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Directory%3ADerek_Elder%2FPrograms%2FNonDeterministicFiniteAutomata"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/NonDeterministicFiniteAutomata&amp;action=history"/>
	<updated>2026-06-12T18:29:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/NonDeterministicFiniteAutomata&amp;diff=96704&amp;oldid=prev</id>
		<title>Derek Elder: +Program</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Directory:Derek_Elder/Programs/NonDeterministicFiniteAutomata&amp;diff=96704&amp;oldid=prev"/>
		<updated>2009-11-02T23:04:10Z</updated>

		<summary type="html">&lt;p&gt;+Program&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
//Program 1e&lt;br /&gt;
//Professor Pattis, ICS-23 Lab 1&lt;br /&gt;
//Programmers: Cameron Ruatta, Derek Elder&lt;br /&gt;
&lt;br /&gt;
import edu.uci.ics.pattis.introlib.Prompt;&lt;br /&gt;
import edu.uci.ics.pattis.introlib.TypedBufferReader;&lt;br /&gt;
import edu.uci.ics.pattis.ics23.collections.*;&lt;br /&gt;
&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.StringTokenizer;&lt;br /&gt;
import java.io.EOFException;&lt;br /&gt;
&lt;br /&gt;
public class NDFA&lt;br /&gt;
{&lt;br /&gt;
	public static void main(String[] args)&lt;br /&gt;
	{&lt;br /&gt;
		Map&amp;lt;String,Map&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt;&amp;gt; nonDeterministicMap = new ArrayMap&amp;lt;String,Map&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt;&amp;gt;();&lt;br /&gt;
		TypedBufferReader tbr = new TypedBufferReader(&amp;quot;Enter Non-Deterministic Finite Automaton Description File&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(;;)&lt;br /&gt;
		{&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				String line = tbr.readLine();&lt;br /&gt;
				StringTokenizer st = new StringTokenizer(line, &amp;quot;;&amp;quot;);&lt;br /&gt;
				String initialState = st.nextToken();&lt;br /&gt;
				&lt;br /&gt;
				if(!st.hasMoreTokens())&lt;br /&gt;
				{&lt;br /&gt;
					Map&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt; stateMap = nonDeterministicMap.get(initialState);&lt;br /&gt;
					stateMap = new ArrayMap&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt;();&lt;br /&gt;
					nonDeterministicMap.put(initialState,stateMap);&lt;br /&gt;
				}&lt;br /&gt;
				while(st.hasMoreTokens())&lt;br /&gt;
				{&lt;br /&gt;
					String token = st.nextToken();&lt;br /&gt;
					String token2 = st.nextToken();&lt;br /&gt;
					Set&amp;lt;String&amp;gt; transitions = new ArraySet&amp;lt;String&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
					//Update map&lt;br /&gt;
					Map&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt; stateMap = nonDeterministicMap.get(initialState);&lt;br /&gt;
					if(stateMap == null)&lt;br /&gt;
					{&lt;br /&gt;
						stateMap = new ArrayMap&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt;();&lt;br /&gt;
						nonDeterministicMap.put(initialState,stateMap);&lt;br /&gt;
					}			&lt;br /&gt;
					 //If the token has a state associated with it already, add it in&lt;br /&gt;
					if(stateMap.get(token) != null)&lt;br /&gt;
					{&lt;br /&gt;
						Iterator&amp;lt;String&amp;gt; it = stateMap.get(token).iterator();&lt;br /&gt;
						while(it.hasNext())&lt;br /&gt;
							transitions.add(it.next());&lt;br /&gt;
					}&lt;br /&gt;
					transitions.add(token2);&lt;br /&gt;
					stateMap.put(token,transitions);&lt;br /&gt;
				}&lt;br /&gt;
			} catch(EOFException e) {break;}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;Non-Deterministic Finite Automaton&amp;quot;);&lt;br /&gt;
		List&amp;lt;String&amp;gt; stateList = new ArrayList&amp;lt;String&amp;gt;(nonDeterministicMap.keys());&lt;br /&gt;
		Collections.sort(stateList);&lt;br /&gt;
		for(String states : stateList)&lt;br /&gt;
		{&lt;br /&gt;
			Map&amp;lt;String,Set&amp;lt;String&amp;gt;&amp;gt; keys = nonDeterministicMap.get(states);&lt;br /&gt;
			System.out.println(states + &amp;quot; transitions = &amp;quot; + keys);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		tbr = new TypedBufferReader(&amp;quot;Enter start state/inputs file&amp;quot;);&lt;br /&gt;
		for(;;)&lt;br /&gt;
		{&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				String line = tbr.readLine();&lt;br /&gt;
				StringTokenizer st = new StringTokenizer(line, &amp;quot;;&amp;quot;);&lt;br /&gt;
				String initialToken = st.nextToken();&lt;br /&gt;
				initialStates.add(initialToken);&lt;br /&gt;
				Set&amp;lt;String&amp;gt; currentStates = new ArraySet&amp;lt;String&amp;gt;();&lt;br /&gt;
				currentStates.add(st.nextToken());&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;Initial state(s) = &amp;quot; + currentStates);&lt;br /&gt;
				while(st.hasMoreTokens())&lt;br /&gt;
				{&lt;br /&gt;
					String token = st.nextToken();&lt;br /&gt;
					Set&amp;lt;String&amp;gt; intermediateStates = new ArraySet&amp;lt;String&amp;gt;();&lt;br /&gt;
					&lt;br /&gt;
					for(String state : currentStates)&lt;br /&gt;
					{&lt;br /&gt;
						Set&amp;lt;String&amp;gt; toStates = nonDeterministicMap.get(state).get(token);&lt;br /&gt;
						if (toStates != null)&lt;br /&gt;
							intermediateStates.addAll(toStates);&lt;br /&gt;
					}&lt;br /&gt;
					currentStates = nextStates;&lt;br /&gt;
					System.out.println(&amp;quot;input = &amp;quot; + token + &amp;quot;; new possible states = &amp;quot; + currentStates);&lt;br /&gt;
				}&lt;br /&gt;
			} catch(EOFException e) {break;}&lt;br /&gt;
		}&lt;br /&gt;
		System.out.println(&amp;quot;Final possible state(s) = &amp;quot; + currentStates);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Derek Elder</name></author>
	</entry>
</feed>