TOC Lab Manual
TOC Lab Manual
of
THEORY OF COMPUTATION
(CS501)
Note that this definition includes both deterministic finite automata (DFAs), which we
will be discussing shortly, and nondeterministic finite automata (NFAs), which we
will touch on later.
Building the different types of automata in JFLAP is fairly similar, so let's start by
m n
building a DFA for the language L = {a b :m ≥ 0, n > 0, n is odd}. That is, we will
build a DFA that recognizes that language of any number of a's followed by any odd
number of b's. (Examples taken from JFLAP: An Interactive Formal Languages
andAutomata Package by Susan Rodger and Thomas Finley.)
Starting a new FA
This should bring up a new window that allows you to create and edit an FA. The
editor is divided into two basic areas: the canvas, which you can construct your
automaton on, and the toolbar, which holds the tools you need to construct your
automaton.
The FA toolbar
As you can see, the toolbar holds four tools:
□
Attribute Editor tool : sets initial and final states
□
State Creator tool : creates states
□
Transition Creator tool : creates transitions
□
Deletor tool : deletes states and transitions
To select a tool, click on the corresponding icon with your mouse. When a tool is
selected, it is shaded, as the Attribute Editor tool is above. Selecting the tool puts
you in the corresponding mode. For instance, with the toolbar above, we are now in
the Attribute Editor mode.
The different modes dictate the way mouse clicks affect the machine. For example, if
we are in the State Creator mode, clicking on the canvas will create new states. These
modes will be described in more detail shortly.
Creating States
First, let's create several states. To do so we need to activate that State Creator tool by
clicking the button on the toolbar. Next, click on the canvas in different locations to
create states. We are not very sure how many states we will need, so we created four
states. Your editor window should look something like this:
States created
Now that we have created our states, let's define initial and final state.
From the pop-up menu, select the checkbox Initial. A white arrowhead appreas to the
left of q0 to indicate that it is the inital state.
Next, let's create a final state. Arbitrarily, we select q1 as our final state. To define it
as the final state, right-click on the state and click the checkbox Final. It will have a
double outline, indicating that it is the final state.
Now that we have defined initial and final states, let's move on to creating transtitions.
Creating Transitions
We know strings in our language can start with a's, so, the initial state must have an
outgoing transition on a. We also know that it can start with any number of a's, which
means that the FA should be in the same state after processing input of any number of
a's. Thus, the outgoing transition on a from q0 loops back to itself.
To create such a transition, first select the Transition Creator tool from the toolbar.
Next, click on q0 on the canvas. A text box should appear over the state:
Creating a transition
Note that λ, reprsenting the empty string, is initially filled in for you. If you prefer ε
representing the empty string, select Preferences : Preferences in the main menu to
change the symbol representing the empty string.
Type "a" in the text box and press Enter. If the text box isn't selected, press Tab to
select it, then enter "a". When you are done, it should look like this:
Transition created
Next, we know that strings in our language must end with a odd number of b's. Thus,
we know that the outgoing transtion on b from q0 must be to a final state, as a string
ending with one b should be accepted. To create a transition from our initial state q0 to
our final state q1, first ensure that the Transition Creator tool is selected on the
toolbar. Next, click and hold on q0, and drag the mouse to q1 and release the mouse
button. Enter "b" in the textbox the same way you entered "a" for the previous
transition. The transition between two states should look like this:
The working FA
You might notice that the q3 is not used and can be deleted. Next, we will describe
how to delete states and transitions.
Similarly, to delete a transition, simply click on the input symbol of the transition
when in Deletor mode.
A new tab will appear displaying the automaton on the left pane, and an input table on
the right:
A new multiple run tab
To enter the input strings, click on the first row in the Input column and type in the
string. Press Enter to continue to the next input string. When you are done, click
RunInputs to test your FA on all the input strings. The results, Accept or Reject
aredisplayed in the Result column. You can also load the inputs from file delimited
by white space. Simply click on Load Inputs and load the file to add additional input
strings into multi-run pane.
Let's take a look at this NFA, which can be accessed through ex1.3a.jff: (Note: This
example taken from JFLAP: An Interactive Formal Languages and AutomataPackage
by Susan Rodger and Thomas Finley.)
An NFA
We can immediately tell that this is an NFA because of the four λ-transitions coming
from q3 and q9, but we might not be sure if we have spotted all the nondeterministic
states. JFLAP can help with that.
Highlighting Nondeterministic States
To see all the nondeterministic states in the NFA, select Test :
HighlightNondeterminismfrom the menu bar:
A new tab will appear with the nondeterministic states shaded a darker color:
NOTE :When loading input from the file, JFLAP determines end of input string bythe
white space. Thus if there is string “ab cd” in a file, only “ab” will be considered as an
input (“cd” will be ignored since there is a white space before them).
Entering input
A new tab will appear displaying the automaton at the top of the window, and
configurations at the bottom. The current state is shaded.
A configuration icon
The configuration icon shows the current state of the configuration in the top left hand
corner, and input on the white tape below. The processed input is displayed in gray,
and the unprocessed input is black.
Click Step to process the next symbol of input. You will notice q1 becomes the shaded
state in the NFA, and that the configuration icon changes, reflecting the fact that the first
a has been processed. Click Step again to process the next a. You will find that four
states are shaded instead of one, and there are four configurations instead of one.
aa processed
This is because the machine is nondeterministic. From q1, the NFA took both a
transitions to q2 and q9. As q9 has two λ-transitions (which do not need input), the
NFA further produced two more configurations by taking those transitions. Thus, the
simulator now has four configurations. Click Step again to process the next input
symbol.
aaa processed
Notice that two of the configurations are highlighted red, indicating they were
rejected. Looking at their input, we also know that only aa was processed. What
happened?
Producing a Trace
To select a configuration, click on it. It will become a solid color when selected,
instead of the slightly graded color. Click on the icon for the rejected configuration
with state q11, and click Trace. A new widow will appear showing the traceback of
that configuration:
A configuration's traceback
The traceback shows the configuration after processing each input symbol. From the
traceback, we can tell that that configuration started at q0 and took the transition to q1
after processing the first a. After processing the second a, it was in q11. Although q11
is not adjacent to q1, it can be reached by taking a λ-transition from q9. As the
simulator tried to process the next a on this configuration, it realized that there are no
outgoing a transitions from q11 and thus rejected the configuration.
Although rejected configurations will remove themselves in the next step, we can also
remove configurations that have not been rejected.
Removing Configurations
Looking at the tracebacks of the rejected configurations, we can tell that any
configurations that are in q11 or q6 and whose next input symbol is a will be rejected.
As the next input symbol is a, we can tell that the configurations that are currently in
q6 and q11 will be rejected. Click once on each of the four configurations to select
them, then click Remove. The simulator will no longer step these configurations.
(Although we are only removing configurations that are about to be rejected, we can
remove any configurations for any purpose, and the simulator will stop stepping
through input on those configurations.)
Now when we step the simulator, the two configurations will be stepped through.
Looking at the two configurations above, we might realize that the configuration on
q3 will not lead to an accepting configuration. We can test our idea out by freezing the
other configuration.
With that configuration frozen, as you click Step to step through the configuration on
q3, the frozen configuration remains the same. Clicking Step two more times will
reveal that the configuration on q3 is not accepted either. Your simulator will now
look like this:
If we click Step again, we will see that the last configuration is rejected. Thus, there is
only one accepting configuration. However, we might be unsure that this is really the
case, as we had removed some configurations. We can double-check by resetting the
simulator.
Solution- To start a new FA, start JFLAP and click the Finite Automaton option from themenu.
This should bring up a new window that allows us to create and edit an FA. The editor is divided
into two basic areas: the canvas, where we can construct our automaton on, and the toolbar,
which holds the tools we need to construct our automaton.
First, let's create several states. To do so we need to activate that State Creator tool by clicking
the button on the toolbar. Next, click on the canvas in different locations to create states.
Arbitrarily, we decide that q0 will be our initial state. To define it to be our initial state, first
select the Attribute Editor tool on the toolbar. Now that we are in Attribute Editor mode, right-
click on q0. This should give us a pop-up menu that looks like this:
From the pop-up menu, select the checkbox Initial. A white arrow head appears to the left of q0
to indicate that it is the initial state.
Next, let's create a final state. Arbitrarily, we select q1 as our final state. To define it as the final
state, right-click on the state and click the checkbox Final. It will have a double outline,
indicating that it is the final state.
We know that only strings that end with an odd number of b's should be accepted. Thus, we
know that q1 has an outgoing transition on b that it cannot loop back to q1. There are two options
for the transition: it can either go to the initial state q0, or to a brand new state, say, q2.
mn
If the transition on b was to the initial state q0, strings would not have to be of the form a b ;
strings such as ababab would also be accepted. Thus, the transition cannot be to q0, and it must
be to q2.
Create a transition on b from q1 to q2. As the FA should accept strings that end with an odd
number of b's, create another transition on b from q2 to q1. Our FA is now look something like
this:
Now that we have completed our FA, Now we test it to see if it really accepts strings from
the language. To do so, select Input: Multiple Run from the menu bar.
A new tab will appear displaying the automaton on the left pane, and an input table on the right:
To enter the input strings, click on the first row in the Input column and type in the string. Press
Enter to continue to the next input string. When we are done, click Run Inputs to test our FA
on all the input strings. The results, Accept or Reject are displayed in the Result column. We
can also load the inputs from file delimited by white space. Simply click on LoadInputs and
load the file to add additional input strings into multi-run pane.
TOC LAB
Code- CS-501
Solution- To see all the nondeterministic states in the NFA, select Test :
HighlightNondeterminism from the menu bar:
A new tab will appear with the nondeterministic states shaded a darker color:
Running Input on an NFA
When loading input from the file, JFLAP determines end of input string by the white space.
Thus if there is string “ab cd” in a file, only “ab” will be considered as an input (“cd” will be
ignored since there is a white space before them).
A new tab will appear displaying the automaton at the top of the window, and configurations at
the bottom. The current state is shaded. Click Step to process the next symbol of input. You will
notice q1 becomes the shaded state in the NFA, and that the configuration icon changes,
reflecting the fact that the first a has been processed. Click Step again to process the next a. We
will find that four states are shaded instead of one, and there are four configurations instead of
one.
TOC LAB
Code- CS-501
Solution- Create the NFA above in JFLAP. Click Convert > Convert to DFA
The unfinished DFA equivalent is started on the right-hand pane of the screen.
Solution- In the view, there is a toolbar along the top. To the left there is the original DFA,
withthe addition of the trap state (if necessary). To the right there is the tree where the set of
distinguishable groups is determined.
When the tool starts out, there are two major groups: non-final and final states. The current
groups are those groups in the leaf nodes. The union of all current groups is the set of all
states, and all current groups are state disjoint.
Click on the “Convert → Minimize DFA” menu option and this screen should come up:
TOC LAB
Code- CS-501
JFLAP, by default, assigns unique variables to each state. Each transition in the graph
corresponds with a production in a right-linear grammar.
TOC LAB
Code- CS-501
Solution:-We will now convert this DFA into a regular expression. Click on the “Convert →
Convert FA to RE” menu option, and this screen should come up:
This tool is accessed using the fourth button from the left, the “State Collapser” button. Click on
that and then try to click on either state “q0” or “q1”. You should be informed that the final or
initial state cannot be removed (whichever one you clicked on). Thus, the only state that can be
removed is “q2”. Thus, click on that state. Once we click on it, a “Transitions” window should
come up, which lists all the transitions and labels that will be present in the current graph once
the current state has been removed. If we click on the individual rows in the window, the old
transitions in the editor window that correspond to the new transition will be highlighted, in
addition to the state that will be removed. The screen below is an example of both the transition
window, highlighted old transitions, and the highlighted state to be removed (in a resized main
window).
Click on “Finalize” and the “Transitions” window will disappear. The following screen should
now be visible, with the new regular expression under the “Generalized Transition Graph
Finished.
TOC LAB
Code- CS-501
Problem- Construct two DFA which represent the languages a*b anda(ba)* respectively,
orconstruct them in two separate JFLAP windows and then combine it into one finite automata.
Now, in one of the windows, click on the “Convert → Combine Automata” menu option.
TOC LAB
Code- CS-501
Problem:-Convert a(b+c)*a to a DFA. The string must start with an a which is followed by a mix of
b’sand c’s repeated in any order.
Solution- Load JFLAP and create a new regular expression. Enter the given regular expression into
thetext box.
Next, convert the regular expression to a finite automata using Convert > RE to FA. The window changes
into an FA with the regular expression labeled in the transition.
When a double framed window shows, click Complete on the right hand pane.
The DFA appears on the right hand side. To export this to its own work area, click Export. Click OK on
the pop-up to confirm the export. Adjust the states as necessary so that edge labels are clear.
TOC LAB
Code- CS-501
Problem- Construct a Mealy machine which takes a binary number and replaces the first 1 with a 0
fromevery substring starting with 1. For example, 0001001110 become 0000000110.
Solution- Open JFLAP and createa Mealy machine with an initial state. Set its label to a “0” toremember
that a zero is read. Next, add a second state to remember that a “1” was read. Label this with a “1”.
Solution- Our approach is to push an “a” on the stack for each “a” in the input, and
topop an “a” off the stack for each “b” in the input. To start a new NPDA, start JFLAP
and click the Pushdown Automaton option from the menu, as shown below:
n n
Four states should be enough for the language L = {a b : n > 0}. Add four states to
the screen, setting the initial state to be q0 and the final state to be q3. The screen
should look similar to one below.
n
Add a transition (a, a; aa) between q1 and q1 to finish up the a segment. Create the
n
transition (b, a; λ) between q1 and q2 and between q2 and q2 to represent the b
segment. Finally, (λ , Z; Z) between q2 and q3 will allow an input to arrive at the final
state. When finished, the screen should look like this: