140 likes | 268 Views
Context Free Grammars Definition of a grammar G Deriving strings and defining L(G) Context-Free Language definition. 1. Context-Free Grammars. Definition. 2. Definition. A context-free grammar G = (V, Σ, S, P) V: finite set of variables (nonterminals)
E N D
Context Free Grammars • Definition of a grammar G • Deriving strings and defining L(G) • Context-Free Language definition 1
Context-Free Grammars Definition 2
Definition • A context-free grammar G = (V, Σ, S, P) • V: finite set of variables (nonterminals) • Σ: finite set of characters (terminals) • S: start variable • element of V • role is similar to that of q0 for an FSA or NFA • P: finite set of grammar rules or production rules • Syntax of a production • variable → string of variables and terminals 3
English Context-Free Grammar • ECFG = (V, Σ, S, P) • V = {<sentence>, <noun phrase>, <verb phrase>, ... } • people sometimes use < > to delimit variables • In this course, we generally will use capital letters to denote variables • Σ = {a, b, c, ..., z, ;, ,, ., ...} • S = <sentence> • P = { <sentence> → <noun phrase> <verb phrase>, <noun phrase> → <article> <adj> <noun>, ...} 4
{aibi | i>0} CFG • ABG = (V, Σ, S, P) • V = {S} • Σ = {a, b} • S = S • P = {S → aSb, S → ab} or S → aSb | ab • second format saves some space 5
Context-Free Grammars Deriving strings, defining L(G), and defining context-free languages 6
Defining →, ==> notation • First: → notation • This is used to define the productions of a grammar • S → aSb | ab • Second: ==>G notation • This is used to denote theapplication of a production rule from a grammar G • S ==>ABG aSb ==>ABG aaSbb ==>ABG aaabbb • We say that string S derives string aSb (in one step) • We say that string aSb derives string aaSbb (in one step) • We say that string aaSbb derives string aaabbb (in one step) • We often omit the grammar subscript when the intended grammar is unambiguous 7
Defining ==> continued • Third: ==>kG notation • This is used to denote kapplications of production rules from a grammar G • S ==>2ABG aaSbb • We say that string S derives string aaSbb in two steps • aSb ==>2ABG aaabbb • We say that string aSb derives string aaabbb in two steps • We often omit the grammar subscript when the intended grammar is unambiguous 8
Defining ==> continued • Fourth: ==>*G notation • This is used to denote 0 or moreapplications of production rules from a grammar G • S ==>*ABG S • We say that string S derives string S in 0 or more steps • S ==>*ABG aaSbb • We say that string S derives string aaSbb in 0 or more steps • aSb ==>*ABG aaSbb • We say that string aSb derives string aaSbb in 0 or more steps • aSb ==>*ABG aaabbb • We say that string aSb derives string aaabbb in 0 or more steps • We often omit the grammar subscript when the intended grammar is unambiguous 9
Defining derivations * • Derivation of a string x • The complete step by step derivation of a string x from the start variable S • Key fact: each step in a derivation makes only one application of a production rule from G • Example: Derivation of string aaabbb using ABG • S ==>ABG aSb ==>ABG aaSbb ==>ABG aaabbb • Example 2: AG= (V, , S, P) where P = S →SS | a • Deriving string aaa • S ==> SS ==> Sa ==> SSa ==> aSa ==> aaa 10
Defining L(G) * • Generating strings • If S ==>G* x, then grammar G generates string x • Note G generates strings which contain terminals and nonterminals • aSb contains nonterminals and terminals • S contains only nonterminals • aaabbb contains only terminals • L(G) • The set of strings over generated by grammar G • Note we only consider terminal strings generated by G • {aibi | i > 0} = L(ABG) • {ai | i > 0} = L(AG) 11
Context-Free Languages * • Context-Free Languages • A language L is a context-free language (CFL) iff • Results so far • {ai | i > 0} is a CFL • One CFG G such that L(G) = this language is AG • Note this language is also regular • {aibi | i > 0} is a CFL • One CFG G such that L(G) = this language is ABG • Note this language is NOT regular 12
Example • Let BAL = the set of strings over {(,)} in which the parentheses are balanced • Prove that BAL is a CFL • To prove this, you need to come up with a CFG BALG such that L(BALG) = BAL • BALG = (V, Σ, S, P) • V = {S} • Σ = {(, )} • S = S • P = ? • Give derivations of ((( ))) and ( )(( )) with your grammar 13
Implications • Given that the language of balanced parentheses is a CFL, what implications does this have for compiler design? • What programming language structures can be captured by CFG? 14