Theoretical Aspects of Lexical Analysis/Exercise 1: Difference between revisions

From Wiki**3

Root (talk | contribs)
No edit summary
Root (talk | contribs)
No edit summary
Line 1: Line 1:
__NOTOC__
__NOTOC__
<dl class="tabs" data-tab>
<div class="section-container auto" data-section>
   <dd class="active"><a href="#panel2-1">Lorem</a></dd>
   <div class="section">
  <dd><a href="#panel2-2">Eleifend</a></dd>
    <p class="title" data-section-title>Lorem</p>
  <dd><a href="#panel2-3">Urna</a></dd>
    <div class="content" data-section-content>
  <dd><a href="#panel2-4">Magna</a></dd>
1
</dl>
     </div>
<div class="section-container.tabs">
  <div class="content active" id="panel2-1">
     <p>1</p>
   </div>
   </div>
   <div class="content" id="panel2-2">
   <div class="section">
     <p>2</p>
    <p class="title" data-section-title>Eleifend</p>
     <div class="content" data-section-content>
2
    </div>
   </div>
   </div>
   <div class="content" id="panel2-3">
   <div class="section">
     <p>3</p>
    <p class="title" data-section-title>Urna</p>
     <div class="content" data-section-content>
3
    </div>
   </div>
   </div>
   <div class="content" id="panel2-4">
   <div class="section">
     <p>4</p>
    <p class="title" data-section-title>Magna</p>
     <div class="content" data-section-content>
4
    </div>
   </div>
   </div>
</div>
</div>


Use Thompson's algorithm to build the NFA for the following regular expression. Build the corresponding DFA and minimize it.
Use Thompson's algorithm to build the NFA for the following regular expression. Build the corresponding DFA and minimize it.

Revision as of 18:06, 18 February 2015

Lorem

1

Eleifend

2

Urna

3

Magna

4

Use Thompson's algorithm to build the NFA for the following regular expression. Build the corresponding DFA and minimize it.

  • (a|b)*

NFA

The following is the result of applying Thompson's algorithm.

<graph> digraph nfa {

    { node [shape=circle style=invis] start }
 rankdir=LR; ratio=0.5
 node [shape=doublecircle,fixedsize=true,width=0.2,fontsize=10]; 7
 node [shape=circle,fixedsize=true,width=0.2,fontsize=10];
 start -> 0
 0 -> 1 
 1 -> 2 
 1 -> 4
 2 -> 3 [label="a",fontsize=10]
 4 -> 5 [label="b",fontsize=10]
 3 -> 6
 5 -> 6
 6 -> 1
 6 -> 7
 0 -> 7
 fontsize=10
 //label="NFA for (a|b)*"

} </graph>

DFA

Determination table for the above NFA:

In α∈Σ move(In, α) ε-closure(move(In, α)) In+1 = ε-closure(move(In, α))
- - 0 0, 1, 2, 4, 7 0
0 a 3 1, 2, 3, 4, 6, 7 1
0 b 5 1, 2, 4, 5, 6, 7 2
1 a 3 1, 2, 3, 4, 6, 7 1
1 b 5 1, 2, 4, 5, 6, 7 2
2 a 3 1, 2, 3, 4, 6, 7 1
2 b 5 1, 2, 4, 5, 6, 7 2


Graphically, the DFA is represented as follows:

<graph> digraph dfa {

    { node [shape=circle style=invis] start }
 rankdir=LR; ratio=0.5
 node [shape=doublecircle,fixedsize=true,width=0.2,fontsize=10]; 0 1 2
 node [shape=circle,fixedsize=true,width=0.2,fontsize=10];
 start -> 0
 0 -> 1 [label="a"]
 0 -> 2 [label="b"]
 1 -> 1  [label="a"]
 1 -> 2  [label="b"]
 2 -> 1 [label="a"]
 2 -> 2 [label="b"]
 fontsize=10
 //label="DFA for (a|b)*"

} </graph>

Given the minimization tree to the right, the final minimal DFA is: <graph> digraph dfamin {

    { node [shape=circle style=invis] start }
 rankdir=LR; ratio=0.5
 node [shape=doublecircle,fixedsize=true,width=0.4,fontsize=10]; 012
 node [shape=circle,fixedsize=true,width=0.2,fontsize=10];
 start -> 012
 012 -> 012 [label="a"]
 012 -> 012 [label="b"]
 fontsize=10
 //label="DFA for (a|b)*"

} </graph>

The minimization tree is as follows. As can be seen, the states are indistinguishable.

<graph> digraph mintree {

 node [shape=none,fixedsize=true,width=0.2,fontsize=10]
 " {0, 1, 2}" -> "{}" [label="NF",fontsize=10]
 " {0, 1, 2}" -> "{0, 1, 2}" [label="F",fontsize=10]
 "{0, 1, 2}" -> "{0, 1, 2} " [label="a,b",fontsize=10]
 fontsize=10
 //label="Minimization tree"

} </graph>