cfl1
TRANSCRIPT
-
7/29/2019 cfl1
1/28
1
Context-Free Grammars
FormalismDerivations
Backus-Naur FormLeft- and Rightmost Derivations
-
7/29/2019 cfl1
2/28
2
Informal Comments
A context-free grammar is a notationfor describing languages.It is more powerful than finiteautomata or REs, but still cannot defineall possible languages.
Useful for nested structures, e.g.,parentheses in programming languages.
-
7/29/2019 cfl1
3/28
3
Informal Comments (2)
Basic idea is to use variables to standfor sets of strings (i.e., languages).These variables are defined recursively,in terms of one another.Recursive rules (productions) involveonly concatenation. Alternative rules for a variable allowunion.
-
7/29/2019 cfl1
4/28
4
Example : CFG for { 0 n1n | n > 1}
Productions:S -> 01S -> 0S1
Basis : 01 is in the language.Induction : if w is in the language, thenso is 0w1.
-
7/29/2019 cfl1
5/28
5
CFG Formalism
Terminals = symbols of the alphabetof the language being defined.Variables = nonterminals = a finiteset of other symbols, each of whichrepresents a language.
Start symbol = the variable whoselanguage is the one being defined.
-
7/29/2019 cfl1
6/28
6
Productions
A production has the form variable ->string of variables and terminals .
Convention : A, B, C, are variables. a, b, c, are terminals.
, X, Y, Z are either terminals or variables. , w, x, y, z are strings of terminals only.
, , , are strings of terminals and/orvariables.
-
7/29/2019 cfl1
7/28
7
Example : Formal CFG
Here is a formal CFG for { 0 n1n | n > 1}.Terminals = {0, 1}.
Variables = {S}.Start symbol = S.
Productions =S -> 01S -> 0S1
-
7/29/2019 cfl1
8/28
8
Derivations Intuition
We derive strings in the language of aCFG by starting with the start symbol,and repeatedly replacing some variable
A by the right side of one of itsproductions.
That is, the productions for A are thosethat have A on the left side of the ->.
-
7/29/2019 cfl1
9/28
9
Derivations Formalism
We say A => if A -> is aproduction.Example : S -> 01; S -> 0S1.S => 0S1 => 00S11 => 000111.
-
7/29/2019 cfl1
10/28
10
Iterated Derivation
=>* means zero or more derivationsteps. Basis : =>* for any string .Induction : if =>* and => , then
=>* .
-
7/29/2019 cfl1
11/28
11
Example : Iterated Derivation
S -> 01; S -> 0S1.S => 0S1 => 00S11 => 000111.So S =>* S; S =>* 0S1; S =>* 00S11;S =>* 000111.
-
7/29/2019 cfl1
12/28
12
Sentential Forms
Any string of variables and/or terminalsderived from the start symbol is called asentential form .Formally, is a sentential form iff S =>* .
-
7/29/2019 cfl1
13/28
13
Language of a Grammar
If G is a CFG, then L(G), the language of G , is {w | S =>* w}.
Note : w must be a terminal string, S is thestart symbol.
Example : G has productions S -> and
S -> 0S1.L(G) = {0 n1n | n > 0}. Note : is a legitimate
right side.
-
7/29/2019 cfl1
14/28
14
Context-Free Languages
A language that is defined by someCFG is called a context-free language .There are CFLs that are not regularlanguages, such as the example justgiven.
But not all languages are CFLs. Intuitively : CFLs can count two things,not three.
-
7/29/2019 cfl1
15/28
15
BNF NotationGrammars for programming languagesare often written in BNF ( Backus-Naur
Form ). Variables are words in ; Example :.
Terminals are often multicharacterstrings indicated by boldface orunderline; Example : while or WHILE.
-
7/29/2019 cfl1
16/28
16
BNF Notation (2)
Symbol ::= is often used for ->.Symbol | is used for or.
A shorthand for a list of productions withthe same left side.
Example : S -> 0S1 | 01 is shorthandfor S -> 0S1 and S -> 01.
-
7/29/2019 cfl1
17/28
17
BNF Notation Kleene Closure
Symbol is used for one or more. Example : ::= 0|1|2|3|4|5|6|7|8|9
::= Note: thats not exactly the * of REs.
Translation : Replace with a newvariable A and productions A -> A | .
-
7/29/2019 cfl1
18/28
18
Example : Kleene Closure
Grammar for unsigned integers can bereplaced by:
U -> UD | DD -> 0|1|2|3|4|5|6|7|8|9
-
7/29/2019 cfl1
19/28
19
BNF Notation: Optional Elements
Surround one or more symbols by []to make them optional.
Example : ::= if then [; else ]
Translation : replace [ ] by a newvariable A with productions A -> | .
-
7/29/2019 cfl1
20/28
20
Example : Optional Elements
Grammar for if-then-else can bereplaced by:
S -> iCtSA A -> ;eS |
-
7/29/2019 cfl1
21/28
21
BNF Notation Grouping
Use {} to surround a sequence of symbols that need to be treated as a
unit.Typically, they are followed by a for
one or more.
Example : ::= [{;}]
-
7/29/2019 cfl1
22/28
22
Translation : Grouping
You may, if you wish, create a newvariable A for { }.
One production for A: A -> .Use A in place of { }.
-
7/29/2019 cfl1
23/28
23
Example : Grouping
L -> S [{;S}] Replace by L - > S [A] A -> ;S
A stands for {;S}.Then by L -> SB B - > A | A -> ;S
B stands for [A] (zero or more As). Finally by L -> SB B -> C | C -> AC | A A -> ;S
C stands for A .
-
7/29/2019 cfl1
24/28
24
Leftmost and RightmostDerivations
Derivations allow us to replace any of the variables in a string.
Leads to many different derivations of the same string.By forcing the leftmost variable (oralternatively, the rightmost variable) tobe replaced, we avoid these
distinctions without a difference.
-
7/29/2019 cfl1
25/28
25
Leftmost Derivations
Say wA => lm w if w is a string of terminals only and A -> is a
production. Also, =>* lm if becomes by asequence of 0 or more => lm steps.
-
7/29/2019 cfl1
26/28
26
Example : Leftmost Derivations
Balanced-parentheses grammmar:S -> SS | (S) | ()
S => lm SS => lm (S)S => lm (())S => lm (())()Thus, S =>* lm (())()S => SS => S() => (S)() => (())() is aderivation, but not a leftmost derivation.
-
7/29/2019 cfl1
27/28
27
Rightmost Derivations
Say Aw => rm w if w is a string of terminals only and A -> is a
production. Also, =>* rm if becomes by asequence of 0 or more => rm steps.
-
7/29/2019 cfl1
28/28
28
Example : Rightmost Derivations
Balanced-parentheses grammmar:S -> SS | (S) | ()
S => rm SS => rm S() => rm (S)() => rm (())()Thus, S =>* rm (())()S => SS => SSS => S()S => ()()S =>()()() is neither a rightmost nor aleftmost derivation.