Presentation is loading. Please wait.

Presentation is loading. Please wait.

Other Issues - § 3.9 – Not Discussed More advanced algorithm construction – regular expression to DFA directly.

Similar presentations


Presentation on theme: "Other Issues - § 3.9 – Not Discussed More advanced algorithm construction – regular expression to DFA directly."— Presentation transcript:

1 Other Issues - § 3.9 – Not Discussed More advanced algorithm construction – regular expression to DFA directly

2 Final Notes : R.E. to NFA Construction So, an NFA may be simulated by algorithm, when NFA is constructed using Previous techniques Algorithm run time is proportional to |N| * |x| where |N| is the number of states and |x| is the length of input Alternatively, we can construct DFA from NFA and use the resulting Dtran to recognize input: space required O(|r|)O(|r|*|x|) O(|x|)O(2 |r| )DFA NFA time to simulate where |r| is the length of the regular expression.

3 Pulling Together Concepts Designing Lexical Analyzer Generator Reg. Expr.  NFA construction NFA  DFA conversion DFA simulation for lexical analyzer Recall Lex Structure Pattern Action … … - Each pattern recognizes lexemes - Each pattern described by regular expression e.g.    etc. (abc)*ab (a | b)*abb Recognizer!

4 Lex Specification  Lexical Analyzer Let P 1, P 2, …, P n be Lex patterns (regular expressions for valid tokens in prog. lang.) Construct N(P 1 ), N(P 2 ), … N(P n ) Note: accepting state of N(P i ) will be marked by P i Construct NFA:    N(P 1 ) N(P 2 ) N(P n ) Lex applies conversion algorithm to construct DFA that is equivalent!

5 Pictorially Lex Specification Lex Compiler Transition Table (a) Lex Compiler FA Simulator Transition Table lexeme input buffer (b) Schematic lexical analyzer

6 Example P 1 : a P 2 : abb P 3 : a*b + 3 patterns NFA’s : start 1 b b bb a a a 2 345 87 6 P1P1 P2P2 P3P3

7 Example – continued (2) Combined NFA :    0 b b bb a a a 2 345 87 6 1 start Examples a a b a {0,1,3,7} {2,4,7} {7} {8} death pattern matched: - P 1 - P 3 - a b b {0,1,3,7} {2,4,7} {5,8} {6,8} pattern matched: - P 1 P 3 P 2,P 3  P1P1 P2P2 P3P3 break tie in favor of P 2

8 Example – continued (3) Alternatively Construct DFA: (keep track of correspondence between patterns and new accepting states) P2P2 {8}-{6,8} P3P3 -{5,8} none{8}{7} P3P3 {8}- P1P1 {5,8}{7}{2,4,7} none{8}{2,4,7}{0,1,3,7} PatternbaSTATE Input Symbol break tie in favor of P 2

9 Minimizing the Number of States of DFA 1.Construct initial partition  of S with two groups: accepting/ non-accepting. 2.(Construct  new )For each group G of  do begin 1.Partition G into subgroups such that two states s,t of G are in the same subgroup iff for all symbols a states s,t have transitions on a to states of the same group of . 2.Replace G in  new by the set of all these subgroups. 3.Compare  new and . If equal,  final :=  then proceed to 4, else set  :=  new and goto 2. 4.Aggregate states belonging in the groups of  final

10 example D C A B b b a a a b b F a b A,C,D B,F a b b a a Minimized DFA:

11 Using LEX Lex Program Structure: declarations % translation rules % auxiliary procedures Name the file e.g. test.lex Then, “ lex test.lex ” produces the file “ lex.yy.c ” (a C-program)

12 LEX %{ /* definitions of all constants LT, LE, EQ, NE, GT, GE, IF, THEN, ELSE,... */ %}...... letter[A-Za-z] digit[0-9] id{letter}({letter}|{digit})*...... % if{ return(IF);} then{ return(THEN);} {id}{ yylval = install_id(); return(ID); }...... % install_id() {/* procedure to install the lexeme to the ST */ C declarations declarations Rules Auxiliary

13 Example of a Lex Program int num_lines = 0, num_chars = 0; % \n {++num_lines; ++num_chars;}. {++num_chars;} % main( argc, argv ) int argc; char **argv; { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); printf( "# of lines = %d, # of chars = %d\n", num_lines, num_chars ); }

14 Another Example %{ #include %} WS[ \t\n]* % [0123456789]+ printf("NUMBER\n"); [a-zA-Z][a-zA-Z0-9]* printf("WORD\n"); {WS} /* do nothing */. printf(“UNKNOWN\n“); % main( argc, argv ) int argc; char **argv; { ++argv, --argc; if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); }

15 Concluding Remarks Focused on Lexical Analysis Process, Including - Regular Expressions - Finite Automaton - Conversion - Lex - Interplay among all these various aspects of lexical analysis Looking Ahead: The next step in the compilation process is Parsing: - Top-down vs. Bottom-up -- Relationship to Language Theory


Download ppt "Other Issues - § 3.9 – Not Discussed More advanced algorithm construction – regular expression to DFA directly."

Similar presentations


Ads by Google