Presentation is loading. Please wait.

Presentation is loading. Please wait.

Costas Busch - RPI1 Positive Properties of Context-Free languages.

Similar presentations


Presentation on theme: "Costas Busch - RPI1 Positive Properties of Context-Free languages."— Presentation transcript:

1 Costas Busch - RPI1 Positive Properties of Context-Free languages

2 Costas Busch - RPI2 Context-free languages are closed under: Union is context free is context-free Union

3 Costas Busch - RPI3 Example Union LanguageGrammar

4 Costas Busch - RPI4 In general: The grammar of the union has new start variable and additional production For context-free languages with context-free grammars and start variables

5 Costas Busch - RPI5 Context-free languages are closed under: Concatenation is context free is context-free Concatenation

6 Costas Busch - RPI6 Example Concatenation LanguageGrammar

7 Costas Busch - RPI7 In general: The grammar of the concatenation has new start variable and additional production For context-free languages with context-free grammars and start variables

8 Costas Busch - RPI8 Context-free languages are closed under: Star-operation is context freeis context-free Star Operation

9 Costas Busch - RPI9 Example Language Grammar Star Operation

10 Costas Busch - RPI10 In general: The grammar of the star operation has new start variable and additional production For context-free language with context-free grammar and start variable

11 Costas Busch - RPI11 Negative Properties of Context-Free Languages

12 Costas Busch - RPI12 Context-free languages are not closed under: intersection is context free not necessarily context-free Intersection

13 Costas Busch - RPI13 Example Context-free: NOT context-free Intersection

14 Costas Busch - RPI14 Context-free languages are not closed under: complement is context freenot necessarily context-free Complement

15 Costas Busch - RPI15 NOT context-free Example Context-free: Complement

16 Costas Busch - RPI16 Intersection of Context-free languages and Regular Languages

17 Costas Busch - RPI17 The intersection of a context-free language and a regular language is a context-free language context free regular context-free

18 Costas Busch - RPI18 for NPDA DFA Construct a new NPDA machine that accepts Machine context-free regular simulates in parallel and

19 Costas Busch - RPI19 transition NPDADFA transition NPDA

20 Costas Busch - RPI20 transition NPDADFA transition NPDA

21 Costas Busch - RPI21 initial state NPDADFA Initial state NPDA

22 Costas Busch - RPI22 final state final states NPDADFA final states NPDA

23 Costas Busch - RPI23 Example: NPDA context-free

24 Costas Busch - RPI24 DFA regular

25 Costas Busch - RPI25 Automaton for: NPDA context-free

26 Costas Busch - RPI26 simulates in parallel and accepts stringif and only if accepts string and accepts string In General:

27 Costas Busch - RPI27 Therefore: is NPDA is context-free

28 Costas Busch - RPI28 Applications of Regular Closure

29 Costas Busch - RPI29 The intersection of a context-free language and a regular language is a context-free language context free regular context-free Regular Closure

30 Costas Busch - RPI30 An Application of Regular Closure Prove that: is context-free

31 Costas Busch - RPI31 We know: is context-free

32 Costas Busch - RPI32 is regular We also know:

33 Costas Busch - RPI33 regularcontext-free is context-free (regular closure)

34 Costas Busch - RPI34 Another Application of Regular Closure Prove that: is not context-free

35 Costas Busch - RPI35 context-freeregularcontext-free If is context-free Then Impossible!!! Therefore, is not context free (regular closure)

36 Costas Busch - RPI36 Decidable Properties of Context-Free Languages

37 Costas Busch - RPI37 Membership Question: for context-free grammar find if string Membership Algorithms: Parsers Exhaustive search parser CYK parsing algorithm

38 Costas Busch - RPI38 Empty Language Question: for context-free grammar find if Algorithm: 1.Remove useless variables 2.Check if start variable is useless

39 Costas Busch - RPI39 Infinite Language Question: for context-free grammar find if is infinite Algorithm: 1. Remove useless variables 2. Remove unit and productions 3. Create dependency graph for variables 4. If there is a loop in the dependency graph then the language is infinite

40 Costas Busch - RPI40 Example: Dependency graph Infinite language

41 Costas Busch - RPI41

42 Costas Busch - RPI42 YACC Yet Another Compiler Compiler

43 Costas Busch - RPI43 Yacc is a parser generator Input: A Grammar Output: A parser for the grammar Reminder: a parser finds derivations

44 Costas Busch - RPI44 Example grammar: The yacc code: expr : '(' expr ')' | expr '+' expr | expr '-' expr | expr '*' expr | expr '/' expr | - expr | INT ; expr -> ( expr ) | expr '+' expr | expr '-' expr | expr '*' expr | expr '/' expr | - expr | INT ;

45 Costas Busch - RPI45 Exampe Input: 10 * 3 + 4 Yacc Derivation: expr => expr + expr => expr * expr + expr => 10*3 + 4

46 Costas Busch - RPI46 Resolving Ambiguities %left '+', '-' %left '*', '/' %left UMINUS % expr : '(' expr ')' | expr '+' expr | expr '-' expr | expr '*' expr | expr '/' expr | '-' expr %prec UMINUS | INT ;

47 Costas Busch - RPI47 Actions %left '+', '-' %left '*', '/' %left UMINUS % expr : '(' expr ')' {$$ = $2;} | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} | '-' expr %prec UMINUS {$$ = -$2;} | INT {$$ = $1;} ;

48 Costas Busch - RPI48 A Complete Yacc program %union{ int int_val; } %left '+', '-' %left '*', '/' %left UMINUS %token INT %type expr %start program %

49 Costas Busch - RPI49 program : expr {printf("Expr value = %d \n", $1);} | error {printf("YACC: syntax error near line %d \n", linenum); abort();} ; expr : '(' expr ')' {$$ = $2;} | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} | '-' expr %prec UMINUS {$$ = -$2;} | INT {$$ = $1;} ; % #include "lex.yy.c"

50 Costas Busch - RPI50 Execution Example 10 + 20*(3 - 4 + 25) Input: Output: Expr value = 490

51 Costas Busch - RPI51 The Lex Code %{ int linenum=1; int temp_int; %} % \n {linenum++;} [\t ] /* skip spaces */; \/\/[^\n]* /* ignore comments */; "+" {return '+';} "-" {return '-';} "*" {return '*';} "/" {return '/';} ")" {return ')';} "(" {return '(';}

52 Costas Busch - RPI52 [0-9]+ {sscanf(yytext, "%d", &temp_int); yylval.int_val = temp_int; return INT;}. {printf("LEX: unknown input string found in line %d \n", linenum); abort();}

53 Costas Busch - RPI53 Compiling: yacc YaccFile lex LexFile cc y.tab.c -ly -ll -o myparser Executable: myparser

54 Costas Busch - RPI54 Another Yacc Program %union{ int int_val; } %left '+', '-' %left '*', '/' %left UMINUS %token INT %type expr %start program %

55 Costas Busch - RPI55 program : stmt_list | error {printf("YACC: syntax error near line %d \n", linenum); abort();} ; stmt_list : stmt_list stmt | stmt ; stmt : expr ';' {printf("Expr value = %d \n", $1);} ;

56 Costas Busch - RPI56 expr : '(' expr ')' {$$ = $2;} | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} | '-' expr %prec UMINUS {$$ = -$2;} | INT {$$ = $1;} ; % #include "lex.yy.c"

57 Costas Busch - RPI57 Execution Example 10 + 20*(30 -67) / 4; 34 * 35 - 123 + -001; 17*8/6; Input: Output: Expr value = -175 Expr value = 1066 Expr value = 22

58 Costas Busch - RPI58 Lex Code %{ int linenum=1; int temp_int; %} % \n {linenum++;} [\t ] /* skip spaces */; \/\/[^\n]* /* ignore comments */;

59 Costas Busch - RPI59 "+" {return '+';} "-" {return '-';} "*" {return '*';} "/" {return '/';} ")" {return ')';} "(" {return '(';} ";" {return ';';} [0-9]+ {sscanf(yytext, "%d", &temp_int); yylval.int_val = temp_int; return INT;}. {printf("LEX: unknown input string found in line %d \n", linenum); abort();}

60 Costas Busch - RPI60 Another Yacc Program %union{ int int_val; char *str_val; } %left '+', '-' %left '*', '/' %left UMINUS %token PRINT %token NEWLINE %token STRING %token INT %type expr %start program %

61 Costas Busch - RPI61 program : stmt_list | error {printf("YACC: syntax error near line %d \n", linenum); abort();} ; stmt_list : stmt_list stmt | stmt ; stmt : expr ';' {printf("expression found\n");} | PRINT expr ';' {printf("%d", $2);} | PRINT STRING ';' {printf("%s", $2);} | PRINT NEWLINE ';' {printf("\n");} ;

62 Costas Busch - RPI62 expr : '(' expr ')' {$$ = $2;} | expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} | '-' expr %prec UMINUS {$$ = -$2;} | INT {$$ = $1;} ; % #include "lex.yy.c"

63 Costas Busch - RPI63 Execution Example Input: print "The value of expression 123 * 25 is "; print 123 * 25; print newline; 10 + 5 * 8; print "end of program"; print newline; Output: The value of expression 123 * 25 is 3075 expression found end of program

64 Costas Busch - RPI64 Lex Code %{ int linenum=1; int temp_int; char temp_str[200]; %} % \n {linenum++;} [\t ] /* skip spaces */; \/\/[^\n]* /* ignore comments */;

65 Costas Busch - RPI65 "+" {return '+';} "-" {return '-';} "*" {return '*';} "/" {return '/';} ")" {return ')';} "(" {return '(';} ";" {return ';';} "print" {return PRINT;} "newline" {return NEWLINE;}

66 Costas Busch - RPI66 [0-9]+ {sscanf(yytext, "%d", &temp_int); yylval.int_val = temp_int; return INT;} \"[^"\n]*\" {strncpy(temp_str, &(yytext[1]), strlen(yytext)-2); temp_str[strlen(yytext)-2] = (char) 0; yylval.str_val = temp_str; return STRING;}. {printf("LEX: unknown input string found in line %d \n", linenum); abort();}


Download ppt "Costas Busch - RPI1 Positive Properties of Context-Free languages."

Similar presentations


Ads by Google