Lecture 3 Lexical Analyzer
Lecture 3 Lexical Analyzer
Lecture 3 Lexical Analyzer
Lecture 03
Example or Regular Expression / Regular Definition:
Using shorthands:
digit → 0|1|…|9
digits → digit+
optional_fraction → (.digits)?
optional_exponent → ( E (+|-| ε) digits ) ?
num → digits optional_fraction optional_exponent
Transition Diagram
start > =
0 1 2
other *
3
Example
>
3 Return (relop, NE)
other
4
*
Return (relop, LT)
=
5 Return (relop, EQ)
> =
6 7 Return (relop, GE)
other *
8 Return (relop, GT)
Example Letter or digit
digit
start b e g i n WS
WS – white space
Capturing variable names
A – alphabetic
start A WS AN – alphanumeric
AN
start b e g i n WS
A-b
AN WS – white space
A – alphabetic
AN WS AN – alphanumeric
INPUT: string
OUTPUT: yes or no
Example: NFA
Transition Table:
ε
start
0 a 1 b 2 b 3
STATE
a b ε
a,b 0 0,1 0 3
S = { 0,1,2,3} 1 2
S0 = 0 2 3
Σ = {a,b}
F = {3} 3
Deterministic Finite Automata
INPUT: string
OUTPUT: yes or no
DFA Execution
DFA(int start_state) {
state current = start_state;
input_element = next_token();
while (input to be processed) {
current = transition(current,table[input_element])
if current is an error state return No;
input_element = next_token();
}
if current is a final state return Yes;
else return No;
}
Relation between RE, NFA and DFA
start i ε f
start i a f
Converting Regular Expressions to NFAs
P | Q (union)
ε Np ε
start
i f
ε Nq ε
PQ (concatenation)
start
i Np Nq f
Converting Regular Expressions to NFAs
start
i
ε Nq ε f
ε
Example (ab* | a*b)*
Starting with:
ab* start a a*b start b
1 2 3 4
b a
ab* | a*b
a
1 2
ε ε
start b
5 6
ε ε
3 b 4
a
Example (ab* | a*b)*
ab* | a*b
a
1 2
ε ε
start b
5 6
ε b ε
3 4
(ab* | a*b)*
a
ε
1 2 ε
start ε b
ε
7 5 6 8
ε ε
ε b
ε 3 4
a
Terminology: ε-closure
a ε
b 5 ε-closure({1,2,5}) = {1,2,5}
a
ε-closure({4}) = {1,4}
3
ε
4 ε-closure({3}) = {1,3,4}
ε-closure({3,5}) = {1,3,4,5}
Converting NFAs to DFAs (subset construction)
NFA N with
NFA • State set SN = {1,2,3,4,5},
• Alphabet Σ = {a,b}
• Start state sN=1,
start ε
1 2 a,b • Final states FN={5},
b • Transition function TN: SN x {Σ ∪ ε} Æ SN
a 5
a,b
3
b
4 a b ε
1 3 - 2
2 5 5, 4 -
3 - 4 -
4 5 5 -
5 - - -
Example 1: Subset Construction
NFA
start 1,2
start ε
1 2 a,b
a b 5
a,b
3 4 a b
b
{1,2}
Example 1: Subset Construction
NFA
start b
1,2 4,5
start ε a
1 2 a,b
a b 5 3,5
a,b a b
3 4
b {1,2} {3,5} {4,5}
{3,5}
{4,5}
Example 1: Subset Construction
NFA
start b
1,2 4,5
start ε a
1 2 a,b
b 3,5 b 4
a 5
a,b a b
3 4
b {1,2} {3,5} {4,5}
{3,5} - {4}
{4,5}
{4}
Example 1: Subset Construction
NFA
start b a,b
1,2 4,5 5
start ε a
1 2 a,b
b 3,5 b 4
a 5
a,b a b
3 4
b {1,2} {3,5} {4,5}
{3,5} - {4}
{4,5} {5} {5}
{4}
{5}
Example 1: Subset Construction
NFA
start b a,b
1,2 4,5 5
start ε a a,b
1 2 a,b
b 3,5 b 4
a 5
a,b a b
3 4
b {1,2} {3,5} {4,5}
{3,5} - {4}
{4,5} {5} {5}
{4} {5} {5}
{5} - -
Example 1: Subset Construction
start b
a,b
1,2 4,5 5
NFA
a
a,b
start ε b
1 2 a,b 3,5 4
a b 5
a,b a b
3 4
b {1,2} {3,5} {4,5}
{3,5} - {4}
{4,5} {5} {5}
All final states since the
NFA final state is included {4} {5} {5}
{5} - -
Example 2: Subset Construction
NFA
start b
1 2 b
a ε b 5
a
3 4
ε
Example 2: Subset Construction
NFA DFA
start b start a
1 2 b 1 1,3,4
ε b b
a 5 b a
a 2 b a
3 4 1,3,
ε b b 4,5
a
1,4,5
Example 3: Subset Construction
NFA DFA
b
start ε b start
1 2 a 3 5 1,2,4
ε a
b b
b 3,4 3,5 3
a 4 5
b b
a
4
a
Converting DFAs to REs
6 c 7
start d a|b|c d a d
0 1 2 3 4 5
d b
b|c
6 7
Example
start d a|b|c d a d
0 1 2 3 4 5
d b
b|c
6 7
start d (a|b|c) d a d
0 3 4 5
b (b|c) d
Example
start d (a|b|c) d a d
0 3 4 5
b (b|c) d
start d (a|b|c) d a d
0 3 4 5
b(b|c)da
Example
start d (a|b|c) d a d
0 3 4 5
re: (a|b)*abb
start a b b
0 1 2 3
a,b NFA
b
a
start a b b
0 1 2 3
b a a
DFA
Relationship among RE, NFA, DFA
• DFAs, NFAs, and Regular Expressions all have the same “power”.
They describe “Regular Sets” (“Regular Languages”)
• The DFA may have a lot more states than the NFA. (May have
exponentially as many states, but...)
Suggestions for writing NFA/DFA/RE