Toc Lab Experiment List: (Java Formal Languages and Automata Package)
Toc Lab Experiment List: (Java Formal Languages and Automata Package)
Experiment List
1. Introduction to JFLAP
2. Deterministic Finite Automata (DFA)
3. Non-deterministic Finite Automata (NFA)
4. Conversion of NFA to DFA
5. DFA Minimization
6. DFA to regular grammar conversion
7. DFA to regular expression conversion
8. Mealy and Moore machine
9. Pushdown automata
10. Single tape Turing machine
11. Regular pumping lemma
Exp. No. 1: Introduction to JFLAP
Definition
JFLAP defines a finite automaton (FA) M as the quintuple M = (Q, Σ, δ, qs, F) where
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:
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. Wecan
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.
Exp. No. 3 Nondeterministic Finite Automata (NFA)
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.
Exp. No. 4 Conversion of NFA to DFA
Problem- Convert the given NFA as shown in figure into corresponding DFA.
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:
Exp. No. 6 DFA to regular grammar conversion
JFLAP, by default, assigns unique variables to each state. Each transition in the graph
corresponds with a production in a right-linear grammar.
Exp. No. 7 DFA to regular expression conversion
Problem- Convert the following DFA into regular expression
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.
Exp. No. 8 Mealy and Moore machine
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”.
2. At q0, a 1 is read so a transition to q1 is needed. Output a 0 since this is the first 1 in a substring
starting 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:
Exp. No. 10 Single tape Turing machine
n n n
Problem- Construct a Turing machine for the language L = {a b c ,n>=1}.
Solution- To start a new one-tape Turing machine, start JFLAP and click the Turing
Machine option from the menu, as shown below:
n n n
We will be adding a lot of states to create a Turing machine for L = {a b c }. Add
seven states to the screen, setting the initial state to be q0 and the final state to be q6.
The screen should be roughly similar to one below.
Now its time to add the transitions. Attempt to add a transition between the states q0
and q1. Now, it's time to add input. To change the transition from the default, click on
the first box. Enter a value of “a” for the first box, a value of “x” for the second box,
and a value of “R” in the third box. Use Tab or the mouse to move between the boxes,
and press enter or click the mouse on the screen outside the boxes when done. This
transition has the following meaning. If the head is under an “a” and the machine is in
state “q0”, then replace the “a” with an “x” and move the head to the right. When
done adding input, the area between q0 and q1 should resemble the example below.
Now, let's try out our new Turing machine. Because of the number of steps, we will
avoid the “Step” option we used with finite automata (although for finite automata titled
“Step with Closure”) and instead use the “Fast Run” option. To use this, click onthe
“Input” menu, and then click on “Fast Run”. After clicking “OK” or pressingenter,
the following screen should come up:
Exp. No. 11 Regular pumping lemma
Upon being presented with the decomposition screen, we’ve used the sliders to make x = aa and
y = a. Note that we cannot make y straddle the boundary between the as and the bs because that
would violate the length constraint on xy.