Theoretical Aspects of Lexical Analysis/Exercise 5: Difference between revisions
From Wiki**3
No edit summary |
|||
| (6 intermediate revisions by the same user not shown) | |||
| Line 10: | Line 10: | ||
The following is the result of applying Thompson's algorithm. State '''3''' recognizes the first expression (token '''T1'''); state '''8''' recognizes token '''T2'''; and state '''14''' recognizes token '''T3'''. | The following is the result of applying Thompson's algorithm. State '''3''' recognizes the first expression (token '''T1'''); state '''8''' recognizes token '''T2'''; and state '''14''' recognizes token '''T3'''. | ||
< | <kroki lang="graphviz"> | ||
digraph nfa { | |||
</ | { node [shape=circle style=invis] s } | ||
rankdir=LR; ratio=0.5 | |||
node [shape=doublecircle,fixedsize=true,width=0.2,fontsize=10]; 3 8 14 | |||
node [shape=circle,fixedsize=true,width=0.2,fontsize=10]; | |||
s -> 0 | |||
0 -> 1 | |||
1 -> 2 [label="a",fontsize=10] | |||
2 -> 3 [label="b",fontsize=10] | |||
0 -> 4 | |||
4 -> 5 [label="a",fontsize=10] | |||
5 -> 6 | |||
5 -> 8 | |||
6 -> 7 [label="b",fontsize=10] | |||
7 -> 6 | |||
7 -> 8 | |||
0 -> 9 | |||
9 -> 10 | |||
9 -> 12 | |||
10 -> 11 [label="a",fontsize=10] | |||
12 -> 13 [label="b",fontsize=10] | |||
11 -> 14 | |||
13 -> 14 | |||
fontsize=10 | |||
} | |||
</kroki> | |||
== DFA == | == DFA == | ||
| Line 93: | Line 121: | ||
Graphically, the DFA is represented as follows: | Graphically, the DFA is represented as follows: | ||
< | <kroki lang="graphviz"> | ||
digraph dfa { | |||
{ node [shape=circle style=invis] s } | |||
rankdir=LR; ratio=0.5 | |||
node [shape=doublecircle,fixedsize=true,width=0.2,fontsize=10]; 1 2 3 4 | |||
</ | node [shape=circle,fixedsize=true,width=0.2,fontsize=10]; | ||
s -> 0 | |||
0 -> 1 [label="a",fontsize=10] | |||
0 -> 2 [label="b",fontsize=10] | |||
1 -> 3 [label="b",fontsize=10] | |||
3 -> 4 [label="b",fontsize=10] | |||
4 -> 4 [label="b",fontsize=10] | |||
fontsize=10 | |||
} | |||
</kroki> | |||
The minimization tree is as follows. Note that before considering transition behavior, states are split according to the token they recognize. | The minimization tree is as follows. Note that before considering transition behavior, states are split according to the token they recognize. | ||
< | <kroki lang="graphviz"> | ||
digraph mintree { | digraph mintree { | ||
node [shape=none,fixedsize=true,width=0.3,fontsize=10] | node [shape=none,fixedsize=true,width=0.3,fontsize=10] | ||
| Line 110: | Line 147: | ||
"{1, 2, 3, 4}" -> "{1, 4}" [label=" T2",fontsize=10] | "{1, 2, 3, 4}" -> "{1, 4}" [label=" T2",fontsize=10] | ||
"{1, 2, 3, 4}" -> "{2}" [label=" T3",fontsize=10] | "{1, 2, 3, 4}" -> "{2}" [label=" T3",fontsize=10] | ||
"{1, 4}" -> "{1}" / | "{1, 4}" -> "{1}" /*[label=" T3",fontsize=10]*/ | ||
"{1, 4}" -> "{4}" [label=" b",fontsize=10] | "{1, 4}" -> "{4}" [label=" b",fontsize=10] | ||
fontsize=10 | fontsize=10 | ||
} | } | ||
</ | </kroki> | ||
The tree expansion for non-splitting sets has been omitted for simplicity ("a" transition for final states {1, 4}). | The tree expansion for non-splitting sets has been omitted for simplicity ("a" transition for final states {1, 4}). | ||
| Line 167: | Line 203: | ||
The input string ''abaabb'' is, after 9 steps, split into three tokens: '''T1''' (corresponding to lexeme ''ab''), '''T2''' (''a''), and '''T2''' (''abb''). | The input string ''abaabb'' is, after 9 steps, split into three tokens: '''T1''' (corresponding to lexeme ''ab''), '''T2''' (''a''), and '''T2''' (''abb''). | ||
[[category: | [[category:Compiladores]] | ||
[[category: | [[category:Ensino]] | ||
[[en:Theoretical Aspects of Lexical Analysis]] | [[en:Theoretical Aspects of Lexical Analysis]] | ||
Latest revision as of 18:39, 26 April 2026
Consider the lexical analyzer G = { ab, ab*, a|b }, defined for the alphabet Σ = { a, b }.
Compute the non-deterministic finite automaton (NFA) by using Thompson's algorithm. Compute the minimal deterministic finite automaton (DFA).
Indicate the number of processing steps for the abaabb input string.
NFA
The following is the result of applying Thompson's algorithm. State 3 recognizes the first expression (token T1); state 8 recognizes token T2; and state 14 recognizes token T3.
DFA
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, 4, 9, 10, 12 | 0 |
| 0 | a | 2, 5, 11 | 2, 5, 6, 8, 11, 14 | 1 (T2) |
| 0 | b | 13 | 13, 14 | 2 (T3) |
| 1 | a | - | - | - |
| 1 | b | 3, 7 | 3, 6, 7, 8 | 3 (T1) |
| 2 | a | - | - | - |
| 2 | b | - | - | - |
| 3 | a | - | - | - |
| 3 | b | 7 | 6, 7, 8 | 4 (T2) |
| 4 | a | - | - | - |
| 4 | b | 7 | 6, 7, 8 | 4 (T2) |
Graphically, the DFA is represented as follows:
The minimization tree is as follows. Note that before considering transition behavior, states are split according to the token they recognize.
The tree expansion for non-splitting sets has been omitted for simplicity ("a" transition for final states {1, 4}).
Given the minimization tree, the final minimal DFA is exactly the same as the original DFA (all leaf sets are singular).
Input Analysis
| In | Input | In+1 / Token |
|---|---|---|
| 0 | abaabb$ | 1 |
| 1 | baabb$ | 3 |
| 3 | aabb$ | T1 |
| 0 | aabb$ | 1 |
| 1 | abb$ | T2 |
| 0 | abb$ | 1 |
| 1 | bb$ | 3 |
| 3 | b$ | 4 |
| 4 | $ | T2 |
The input string abaabb is, after 9 steps, split into three tokens: T1 (corresponding to lexeme ab), T2 (a), and T2 (abb).