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 NFA : Advantage C Compiler a.out Source code a.out tokens DFA : advantage 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 More about NFA • 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 ; c= read_next_char(); //read_next_char() returns the next //character while(c!=‘\0’) { s=detect(s,c); c=read_next_char(); } if(s ϵ F) return yes; else return no; THE END