ContextFree Languages Costas Busch RPI 1 Regular Languages
Context-Free Languages Costas Busch - RPI 1
Regular Languages Costas Busch - RPI 2
Context-Free Languages Regular Languages Costas Busch - RPI 3
Context-Free Languages Context-Free Grammars Pushdown Automata stack automaton Costas Busch - RPI 4
Context-Free Grammars Costas Busch - RPI 5
Example A context-free grammar : A derivation: Costas Busch - RPI 6
A context-free grammar : Another derivation: Costas Busch - RPI 7
Describes parentheses: Costas Busch - RPI (((( )))) 8
Example A context-free grammar : A derivation: Costas Busch - RPI 9
A context-free grammar : Another derivation: Costas Busch - RPI 10
Costas Busch - RPI 11
Example A context-free grammar : A derivation: Costas Busch - RPI 12
A context-free grammar : A derivation: Costas Busch - RPI 13
Describes matched parentheses: () ((( ))) (( )) Costas Busch - RPI 14
Definition: Context-Free Grammars Grammar Variables Terminal symbols Start variable Productions of the form: Variable String of variables and terminals Costas Busch - RPI 15
Costas Busch - RPI 16
Definition: Context-Free Languages A language is context-free if and only if there is a context-free grammar with Costas Busch - RPI 17
Derivation Order Leftmost derivation: Rightmost derivation: Costas Busch - RPI 18
Leftmost derivation: Rightmost derivation: Costas Busch - RPI 19
Derivation Trees Costas Busch - RPI 20
Costas Busch - RPI 21
Costas Busch - RPI 22
Costas Busch - RPI 23
Costas Busch - RPI 24
Derivation Tree Costas Busch - RPI 25
Derivation Tree yield Costas Busch - RPI 26
Partial Derivation Trees Partial derivation tree Costas Busch - RPI 27
Partial derivation tree Costas Busch - RPI 28
sentential form Partial derivation tree yield Costas Busch - RPI 29
Sometimes, derivation order doesn’t matter Leftmost: Rightmost: Same derivation tree Costas Busch - RPI 30
Ambiguity Costas Busch - RPI 31
leftmost derivation Costas Busch - RPI 32
leftmost derivation Costas Busch - RPI 33
Two derivation trees Costas Busch - RPI 34
The grammar is ambiguous: string has two derivation trees Costas Busch - RPI 35
The grammar is ambiguous: string has two leftmost derivations Costas Busch - RPI 36
Definition: A context-free grammar if some string is ambiguous has: two or more derivation trees Costas Busch - RPI 37
In other words: A context-free grammar if some string is ambiguous has: two or more leftmost derivations (or rightmost) Costas Busch - RPI 38
Why do we care about ambiguity? take Costas Busch - RPI 39
Costas Busch - RPI 40
Costas Busch - RPI 41
Correct result: Costas Busch - RPI 42
• Ambiguity is bad for programming languages • We want to remove ambiguity Costas Busch - RPI 43
We fix the ambiguous grammar: New non-ambiguous grammar: Costas Busch - RPI 44
Costas Busch - RPI 45
Unique derivation tree Costas Busch - RPI 46
The grammar : is non-ambiguous: Every string has a unique derivation tree Costas Busch - RPI 47
Another Ambiguous Grammar IF_STMT if EXPR then STMT else STMT Costas Busch - RPI 48
If expr 1 then if expr 2 then stmt 1 else stmt 2 IF_STMT if expr 1 if then expr 2 STMT then stmt 1 else STMT else stmt 2 IF_STMT if expr 1 if then expr 2 then stmt 1 Costas Busch - RPI 49
Inherent Ambiguity Some context free languages have only ambiguous grammars Example: Costas Busch - RPI 50
The string has two derivation trees Costas Busch - RPI 51
Compilers Costas Busch - RPI 52
Machine Code Program v = 5; if (v>5) x = 12 + v; while (x !=3) { x = x - 3; v = 10; }. . . Compiler Costas Busch - RPI Add v, v, 0 cmp v, 5 jmplt ELSE THEN: add x, 12, v ELSE: WHILE: cmp x, 3. . . 53
Compiler Lexical analyzer input parser output machine code program Costas Busch - RPI 54
A parser knows the grammar of the programming language Costas Busch - RPI 55
Parser PROGRAM STMT_LIST STMT; STMT_LIST | STMT; STMT EXPR | IF_STMT | WHILE_STMT | { STMT_LIST } EXPR + EXPR | EXPR - EXPR | ID IF_STMT if (EXPR) then STMT | if (EXPR) then STMT else STMT WHILE_STMT while (EXPR) do STMT Costas Busch - RPI 56
The parser finds the derivation of a particular input derivation input 10 + 2 * 5 Parser E -> E + E |E*E | INT Costas Busch - RPI E => E + E * E => 10 + E*E => 10 + 2 * 5 57
derivation tree derivation E => E + E * E => 10 + E*E => 10 + 2 * 5 E E 10 + E 2 Costas Busch - RPI E * E 5 58
derivation tree E E 10 machine code + E 2 E * mult a, 2, 5 add b, 10, a E 5 Costas Busch - RPI 59
Parsing Costas Busch - RPI 60
input string Parser grammar Costas Busch - RPI derivation 61
Example: Parser derivation input ? Costas Busch - RPI 62
Exhaustive Search Phase 1: Find derivation of All possible derivations of length 1 Costas Busch - RPI 63
Costas Busch - RPI 64
Phase 2 Phase 1 Costas Busch - RPI 65
Phase 2 Phase 3 Costas Busch - RPI 66
Final result of exhaustive search (top-down parsing) Parser input derivation Costas Busch - RPI 67
Time complexity of exhaustive search Suppose there are no productions of the form Number of phases for string Costas Busch - RPI : 68
For grammar with rules Time for phase 1: possible derivations Costas Busch - RPI 69
Time for phase 2: possible derivations Costas Busch - RPI 70
Time for phase : possible derivations Costas Busch - RPI 71
Total time needed for string phase 1 phase 2 : phase 2|w| Extremely bad!!! Costas Busch - RPI 72
There exist faster algorithms for specialized grammars S-grammar: symbol string of variables appears once Pair Costas Busch - RPI 73
S-grammar example: Each string has a unique derivation Costas Busch - RPI 74
For S-grammars: In the exhaustive search parsing there is only one choice in each phase Time for a phase: Total time for parsing string Costas Busch - RPI : 75
For general context-free grammars: There exists a parsing algorithm that parses a string in time (we will show it in the next class) Costas Busch - RPI 76
- Slides: 76