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

From Wiki**3

Root (talk | contribs)
No edit summary
Root (talk | contribs)
No edit summary
 
Line 1: Line 1:
__NOTOC__
__NOTOC__
<div class="section-container auto" data-section>
 
  <div class="section">
== Problem ==
    <p class="title" data-section-title>Problem</p>
 
    <div class="content" data-section-content>
<!-- ====================== START OF PROBLEM ====================== -->
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.


* '''<nowiki>(a*|b*)*</nowiki>'''
* '''<nowiki>(a*|b*)*</nowiki>'''
<!-- ====================== END OF PROBLEM ====================== -->
 
    </div>
== Solution ==
  </div>
 
  <div class="section">
    <p class="title" data-section-title>Solution</p>
    <div class="content" data-section-content>
<!-- ====================== START OF SOLUTION ====================== -->
The non-deterministic finite automaton (NFA), built by applying Thompson's algorithm to the regular expression '''<nowiki>(a*|b*)*</nowiki>''' is the following:
The non-deterministic finite automaton (NFA), built by applying Thompson's algorithm to the regular expression '''<nowiki>(a*|b*)*</nowiki>''' is the following:
<dot-hack>
<kroki lang="graphviz">
digraph nfa {
digraph nfa {
     { node [shape=circle style=invis] start }
     { node [shape=circle style=invis] start }
Line 36: Line 30:
   fontsize=10
   fontsize=10
}
}
</dot-hack>
</kroki>


Applying the determination algorithm to the above NFA, the following determination table is obtained:
Applying the determination algorithm to the above NFA, the following determination table is obtained:
Line 91: Line 85:
{| width="100%"
{| width="100%"
! style="text-align: left; font-weight:normal; vertical-align: top; width: 50%;" |Graphically, the DFA is represented as follows:
! style="text-align: left; font-weight:normal; vertical-align: top; width: 50%;" |Graphically, the DFA is represented as follows:
<dot-hack>
<kroki lang="graphviz">
digraph dfa {
digraph dfa {
     { node [shape=circle style=invis] start }
     { node [shape=circle style=invis] start }
Line 106: Line 100:
   fontsize=10
   fontsize=10
}
}
</dot-hack>
</kroki>


Given the minimization tree to the right, the final minimal DFA is:
Given the minimization tree to the right, the final minimal DFA is:
<dot-hack>
<kroki lang="graphviz">
digraph dfamin {
digraph dfamin {
     { node [shape=circle style=invis] start }
     { node [shape=circle style=invis] start }
Line 120: Line 114:
   fontsize=10
   fontsize=10
}
}
</dot-hack>
</kroki>


! style="text-align: left; font-weight:normal; vertical-align: top; width: 50%;" | The minimization tree is as follows. As can be seen, the states are indistinguishable.
! style="text-align: left; font-weight:normal; vertical-align: top; width: 50%;" | The minimization tree is as follows. As can be seen, the states are indistinguishable.


<dot-hack>
<kroki lang="graphviz">
digraph mintree {  
digraph mintree {  
   node [shape=none,fixedsize=true,width=0.2,fontsize=10]
   node [shape=none,fixedsize=true,width=0.2,fontsize=10]
Line 132: Line 126:
   fontsize=10
   fontsize=10
}
}
</dot-hack>
</kroki>
|}
|}
<!-- ====================== END OF SOLUTION ====================== -->
    </div>
  </div>
</div>


[[category:Compiladores]]
[[category:Compiladores]]

Latest revision as of 17:08, 6 August 2025


Problem

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

  • (a*|b*)*

Solution

The non-deterministic finite automaton (NFA), built by applying Thompson's algorithm to the regular expression (a*|b*)* is the following:

Applying the determination algorithm to the above NFA, the following determination table is obtained:

In α∈Σ move(In, α) ε-closure(move(In, α)) In+1 = ε-closure(move(In, α))
- - 0 0, 1, 2, 3, 5, 6, 7, 9, 10, 11 0
0 a 4 1, 2, 3, 4, 5, 6, 7, 9, 10, 11 1
0 b 8 1, 2, 3, 5, 6, 7, 8, 9, 10, 11 2
1 a 4 1, 2, 3, 4, 5, 6, 7, 9, 10, 11 1
1 b 8 1, 2, 3, 5, 6, 7, 8, 9, 10, 11 2
2 a 4 1, 2, 3, 4, 5, 6, 7, 9, 10, 11 1
2 b 8 1, 2, 3, 5, 6, 7, 8, 9, 10, 11 2
Graphically, the DFA is represented as follows:

Given the minimization tree to the right, the final minimal DFA is:

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