### 11CS10020

```TRANSITION DIAGRAM BASED
LEXICAL ANALYZER
and
FINITE AUTOMATA
Class date : 12 August, 2013
Prepared by : Karimgailiu R Panmei
Roll no. : 11CS10020
GROUP NO. : 9
State Transition Machine 1
State Transition Machine 2
Stream of
input
characters
(source)
Token
State Transition Machine 3
Lex Compiler
pattern1
pattern 2
pattern 3
Simulating the transition machines :
Input string : x1, x2 ,x 3 …… x n
• Scan the input using forward pointer
• Machine accepts or rejects based on the
transition function
• Match the longest prefix of the input
• If accepted, token is produced
Two approach to simulate the machine :
Approach 1 :
Sequential simulation
• Sequentially simulate the transition
machines
• If the previous machine fails, reset the
forward pointer
• Start the next transition machine
Approach 2 :
Parallel simulation
• Simulate all transition diagrams in
parallel
• The machine stops when no match is
found
Pattern : Define based on regular expression
Pattern
Lex
compiler
generate state transition machines
C
Compiler
a.out
Source
code
a.out
tokens
FINITE AUTOMATA
• Recognize regular languages
• Accepts or rejects a possible input string
• Two types :
1. Non deterministic finite automata(NFA)
2. Deterministic finite automata(DFA)
NFA
Definition :
N={ Σ, S, so , F, Δ}
where
Σ : set of input symbol
S : finite set of states
so : start state
F : finite set of final states
Δ : transition function (S × Σ → P(S))
where P(S) is the power set of S
• Given an input a, NFA allows to go from one
state to a multiple state
a
a
• ϵ-transition is allowed
ϵ
DFA
Definition :
D={ Σ, S, so , f, δ}
where
Σ : set of input symbol
S : finite set of states
so : start state
F : finite set of final states
δ : transition function (δ : S × Σ → S)
More on DFA
• No ϵ-transition is allowed
• For a given input a, DFA allows to moves
from one state to a single state
a
Simulating DFA
Input :
- a string x
- DFA with start state so , accepting
states F and transition function
detect
Output :
“yes” if accepts and “no” if rejects
Algorithm :
s= so ;
//character
while(c!=‘\0’)
{
s=detect(s,c);