Context-Free Languages Wen-Guey Tzeng Department of Computer - - PowerPoint PPT Presentation
Context-Free Languages Wen-Guey Tzeng Department of Computer - - PowerPoint PPT Presentation
Context-Free Languages Wen-Guey Tzeng Department of Computer Science National Chiao Tung University Context-Free Grammars A grammar G=(V, T, S, P) is context-free if all productions in P are of form A x, where A V, x (V T)*
Context-Free Grammars
- A grammar G=(V, T, S, P) is context-free if all
productions in P are of form Ax, where AV, x(VT)*
– The left side has only one variable.
- Example,
G = ({S,A,B}, {a,b}, S, {SaAb|bBa, AaAb|, BbBb|})
2 2017 Spring
- Derivation:
3 2017 Spring
- L(G) = {w* | S * w}
- A language L is context-free if and only if
there is a context-free grammar G such that L=L(G).
4 2017 Spring
Examples
- G=({S}, {a, b}, S, P), with P={SaSa|bSb|}
– S aSa aaSaa aabSbaa aabbaa=aabbaa – L(G) = {wwR : w{a, b}*}
5 2017 Spring
- S abB, AaaBb|, BbbAa
– L(G) = {ab(bbaa)nbba(ba)n : n0} ?
6 2017 Spring
Design cfg’s
- Give a cfg for L={anbn : n0}
7 2017 Spring
- Give a cfg for L={anbm : n>m}
8 2017 Spring
- Give a cfg for L={anbm : nm0}
– Idea1:
- parse L into two cases (not necessarily disjoint)
L1={anbm : n>m} L2={anbm : n<m}.
- Then, construct productions for L1 and L2, respectively.
9 2017 Spring
- Give a cfg for L={anbm : nm0}
– Idea2:
- produce the same amount of a’s and b’s, then extra a’s
- r b’s
10 2017 Spring
- Give a cfg for L={anbmck : m=n+k}
– Match ‘a’ and ‘b’, ‘b’ and ‘c’
11 2017 Spring
- Give a cfg for L={anbmck : m>n+k}
12 2017 Spring
- Give a cfg for L={w{a,b}* : na(w)=nb(w)}
– Find the “recursion”
13 2017 Spring
- Give a cfg for L={w{a,b}* : na(w)>nb(w)}
– Find relation with other language – Consider starting with ‘a’ and ‘b’, respectively
14 2017 Spring
Leftmost and rightmost derivation
- G=({A, B, S}, {a, b}, S, P), where P contains
SAB, AaaA, A, BBb, B
– L(G)={a2nbm : n, m0}
- For string aab
– Rightmost derivation – Leftmost derivation
15 2017 Spring
Derivation (parse) tree
- AabABc
16 2017 Spring
- SaAB, AbBb, BA|
17 2017 Spring
Some comments
- Derivation trees represent no orders of
derivation
- Leftmost/rightmost derivations correspond to
depth-first visiting of the tree
- Derivation tree and derivation order are very
important to “programming language” and “compiler design”
18 2017 Spring
Grammar for C
19 2017 Spring
main() { int i=1; printf("i starts out life as %d.", i); i = add(1, 1); /* Function call */ printf(" And becomes %d after function is executed.\n", i); }
20 2017 Spring
Parsing and ambiguity
- Parsing of wL(G): find a sequence of
productions by which wL(G) is derived.
- Questions: given G and w
– Is wL(G) ? (membership problem) – Efficient way to determine whether wL(G) ? – How is wL(G) parsed ? (build the parsing tree) – Is the parsing unique ?
21 2017 Spring
Exhaustive search/top down parsing
- SSS|aSb|bSa|
- Determine aabbL(G) ?
– 1st round: (1) SSS; (2) SaSb; (3) SbSa; (4) S – 2nd round:
- From (1), SSSSSS, SSSaSbS, SSSbSaS,
SSS S
- From (2), SaSbaSSb, SaSbaaSbb, SaSbabSab,
SaSbab
– 3rd round: …
- Drawback: inefficiency
- Other ways ?
22 2017 Spring
- If no productions of form A or AB, the
exhaustive search for wL(G) can be done in |P|+|P|2+…+|P|2|w| = O(|P|2|w|+1)
– Consider the leftmost parsing method. – w can be obtained within 2|w| derivations.
23 2017 Spring
Bottom up parsing
- To reduce a string w to the start variable S
- SaSb|
– w=aabb aaSbb aSb S
- Efficiency: O(|w|3)
24 2017 Spring
Linear-time parsing
- Simple grammar (s-grammar)
– All productions are of form Aax, where x(V T)* – Any pair (A, a) occurs at most once in P.
- Example: SaS|bSS|c
– Parsing for ababccc
25 2017 Spring
Ambiguous grammars
- G is ambiguous if some wL(G) has two
derivation trees.
- Example: SaSb|SS|
26 2017 Spring
Example from programming languages
- C-like grammar for arithmetic expressions.
G=({E, I}, {a, b, c, +, x, (, )}, E, P), where P contains EI EE+E EExE E(E) Ia|b|c
- w=a+bxc has two derivation trees
27 2017 Spring
28 2017 Spring
Ambiguous languages
- A cfl L is inherently ambiguous if any cfg G
with L(G)=L is ambiguous. Otherwise, it is unambiguous.
- Note: an unambiguous language may have
ambiguous grammar.
- Example: L={anbncm} {anbmcm} is inherently
ambigous.
– Hard to prove.
29 2017 Spring
CFG and Programming Languages
- Programming language: syntax + semantics
- Syntax is defined by a grammar G
– <expression> ::= <term> | <expression> + <term> <term> ::= <factor> | <term> * <factor> – <while_statement> ::= while <expression><statement>
- Syntax checking in compilers is done by a parser
– Is a program p grammatically correct ? – Is pL(G) ? – We need efficient parsers.
30 2017 Spring
Restricted CFG Programming Languages
- Goal:
– Its expression power is enough. – It has no ambiguity. if then if then else
If then “if then else” If then “if then” else
– There exists an efficient parser.
31 2017 Spring
- C -- LR(1)
- PASCAL -- LL(1)
- Hierarchy of classes of context-free languages
– LL(1) LR(0) LR(1)=DCFL LR(2) … CFL
32 2017 Spring
slide 33
Syntactic Correctness
- Lexical analyzer produces a stream of tokens
x = y +2.1 <id> <op> <id> <op> <real>
- Parser (syntactic analyzer) verifies that this
token stream is syntactically correct by constructing a valid parse tree for the entire program
– Unique parse tree for each language construct – Program = collection of parse trees rooted at the top by a special start symbol
2017 Spring
slide 34
CFG For Floating Point Numbers
::= stands for production rule; <…> are non-terminals; | represents alternatives for the right-hand side of a production rule
Sample parse tree:
2017 Spring
slide 35
CFG For Balanced Parentheses
Sample derivation: <balanced> ( <balanced> ) (( <balanced> )) (( <empty> )) (( ))
Could we write this grammar using regular expressions or DFA? Why?
2017 Spring
slide 36
CFG For Decimal Numbers (Redux)
Sample top-down leftmost derivation: <num> <digit> <num> 7 <num> 7 <digit> <num> 7 8 <num> 7 8 <digit> 7 8 9
This grammar is right-recursive
2017 Spring
slide 37
Compiler-compiler
- A compiler-compiler is a program that
generates a compiler from a defined grammar
- Parser can be built automatically from the BNF
description of the language’s CFG
- Tools: yacc, Bison
2017 Spring
slide 38
Compiler- compiler
Compiler: parser + code generator Execution code Programming language grammar G=(V, T, S, P) program Input data result
2017 Spring