130 likes | 257 Views
Module 28. Context Free Grammars Definition of a grammar G Deriving strings and defining L(G) Context-Free Language definition. Context-Free Grammars. Definition. Definition. A context-free grammar G = (V, S , S, P) V: finite set of variables (nonterminals)
E N D
Module 28 • Context Free Grammars • Definition of a grammar G • Deriving strings and defining L(G) • Context-Free Language definition
Context-Free Grammars Definition
Definition • A context-free grammar G = (V, S, S, P) • V: finite set of variables (nonterminals) • S: 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
English Context-Free Grammar • ECFG = (V, S, 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 • S = {a, b, c, ..., z, ;, ,, ., ...} • S = <sentence> • P = { <sentence> --> <noun phrase> <verb phrase> <pct>, <noun phrase> --> <article> <adj> <noun>, ...}
{aibi | i>0} CFG • ABG = (V, S, S, P) • V = {S} • S = {a, b} • S = S • P = {S --> aSb, S --> ab} or S --> aSb | ab • second format saves some space
Context-Free Grammars Deriving strings, defining L(G), and defining context-free languages
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
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
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
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, S, P) where P = S -->SS | a • Deriving string aaa • S ==> SS ==> Sa ==> SSa ==> aSa ==> aaa
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 S generated by grammar G • Note we only consider terminal strings generated by G • {aibi | i > 0} = L(ABG) • {ai | i > 0} = L(AG)
Context-Free Languages * • Context-Free Languages • A language L is a context-free language (CFL) iff there exists a CFG G such that L(G) = L • 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
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, S, P) • V = {S} • S = {(, )} • S = S • P = ? • Give derivations of ((( ))) and ( )(( )) with your grammar