DOC PREVIEW
Penn CIT 594 - BNF Grammar

This preview shows page 1-2-21-22 out of 22 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 22 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 22 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 22 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 22 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 22 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

BNF GrammarForm of BNF rulesNotes on terminologyUses of a grammarGenerating sentencesDevelopment approachesRequirements and constraintsFirst cutFirst cut: EvaluationSecond cut: OverviewSecond cut: More detailSecond cut: EvaluationThird (very brief) cutFourth cut, not quite as briefLetting go of a constraintFifth (and final) cutExplanation I of final BNF APIExplanation II of final BNF APIFinal version: EvaluationMoralsAside: Tokenizing the input grammarThe EndJan 14, 2019BNF GrammarExample design of a data structureForm of BNF rules<BNF rule> ::= <nonterminal> "::=" <definitions><nonterminal> ::= "<" <words> ">"<terminal> ::= <word> | <punctuation mark> | ' " ' <any chars> ' " '<words> ::= <word> | <words> <word><word> ::= <letter> | <word> <letter> | <word> <digit><definitions> ::= <definition> | <definitions> "|" <definition><definition> ::= <empty> | <term> | <definition> <term><empty> ::=<term> ::= <terminal> | <nonterminal>Not defined here (but you know what they are) : <letter>, <digit>, <punctuation mark>, <any chars> (any printable nonalphabetic character except double quote)Notes on terminologyA grammar typically has a “top level” elementA string is a “sentential form” if it satisfies the syntax of the top level elementA string is a “sentence” if it is a sentential form and is composed entirely of terminalsA string “belongs to” a grammar if it satisfies the rules of that grammarUses of a grammarA BNF grammar can be used in two ways:To generate strings belonging to the grammarTo do this, start with a string containing a nonterminal;while there are still nonterminals in the string { replace a nonterminal with one of its definitions}To recognize strings belonging to the grammarThis is the way programs are compiled--a program is a string belonging to the grammar that defines the languageRecognition is much harder than generationGenerating sentencesI want to write a program that reads in a grammar, stores it in some appropriate data structure, then generates random sentences belonging to that grammarI need to decide:How to store the grammarWhat operations to provide on the grammarThese decisions are intertwined!How I store the grammar determines what operations are easy and efficient (and even possible!)Development approachesBad approach:Design a general representation for grammars and a complete set of operations on themActually, this is a good approach if you are writing a general-purpose package for general use--for example, for inclusion in the Java APIOtherwise, it just makes your program much more complexGood approach:Decide the operations you need for this program, and design a representation for grammars that supports these operationsIt’s a nice bonus if the design can later be extended for other purposesRemember the Extreme Programming slogan YAGNI: “You ain’t gonna need it.”Requirements and constraintsWe need to read the grammar inBut we don’t need to modify it laterAny tools for building the grammar structure can be privateWe need to look up the definitions of nonterminalsWe need this because we will need to replace each nonterminal with one of its definitionsWe need to know the top level element of the grammarBut we can just assume that we know what it isFor example, we can insist that the top-level element be <sentence>First cutpublic class Grammar implements Iterable List<String> rule; // a single alternative for a nonterminal List<List<String>> definition; // all the rules for one nonterminal Map<String, List<List<String>>> grammar; // rules for all the nonterminals  public Grammar() { grammar = new TreeMap<String, List<String>>(); }  public void addRule(String rule) throws IllegalArgumentException public List<List<String>> getDefinition(String nonterminal)  public List<String> getOneRule(String nonterminal) // random choice public Iterator iterator()  public void print()First cut: EvaluationAdvantagesSmall, easily learned interfaceJust one classCan be made to workDisadvantagesAs designed, <foo> ::= bar | baz is two rules, requiring two calls to addRule; hence requires caller to do some of the parsing, to separate out the left-hand sideRequires some fairly complicated use of genericsArrayList implements List (hence is a List), but consider: List<List<String>> definition = makeList();This statement is legal if makeList() returns an ArrayList<List<String>>It is not legal if makeList() returns an ArrayList<ArrayList<String>>Second cut: OverviewWe can eliminate the compound generics by using more than one classpublic class Grammar implements Iterable Map<String, Definition> grammar; // all the rulespublic class Definition List<Rule> definition;public class Rule String lhs; // the definiendum List<String> rhs; // the definiensSecond cut: More detailpublic class Grammar implements Iterable Map<String, Definition> grammar; // rules for all the nonterminals public Grammar() { grammar = new TreeMap<String, Definition>(); } // constructor public void addRule(String rule) throws IllegalArgumentException public Definition getDefinition(String nonterminal) public Iterator iterator() public void print()public class Definition List<Rule> definition; // all definitions for some unspecified nonterminal Definition() // constructor void addRule(Rule rule) Rule getOneRule() public String toString() public class Rule String lhs; // the definiendum List<String> rhs; // the definiens Rule(String text) // constructor public String getLeftHandSide() public List<String> getRightHandSide() public String toString()Second cut: EvaluationAdvantages:Simplifies use of genericsDisadvantages:Many more methodsDefinitions are “unattached” from nonterminal being definedThis makes it easier to parse definitionsSeems a bit unnaturalNeed to pass the tokenizer around as an additional argumentDoesn’t help with the problem that the caller still has to separate out the definiendum from the definiensThird (very brief) cutDefinition and Rule are basically both just lists of stringsWhy not just have them implement List?Methods to implement:public boolean add(Object o)public void


View Full Document

Penn CIT 594 - BNF Grammar

Documents in this Course
Trees

Trees

17 pages

Searching

Searching

24 pages

Pruning

Pruning

11 pages

Arrays

Arrays

17 pages

Stacks

Stacks

30 pages

Recursion

Recursion

25 pages

Hashing

Hashing

24 pages

Recursion

Recursion

24 pages

Graphs

Graphs

25 pages

Storage

Storage

37 pages

Trees

Trees

21 pages

Arrays

Arrays

24 pages

Hashing

Hashing

24 pages

Recursion

Recursion

25 pages

Graphs

Graphs

23 pages

Graphs

Graphs

25 pages

Stacks

Stacks

25 pages

Recursion

Recursion

25 pages

Quicksort

Quicksort

21 pages

Quicksort

Quicksort

21 pages

Graphs

Graphs

25 pages

Recursion

Recursion

25 pages

Searching

Searching

24 pages

Counting

Counting

20 pages

HTML

HTML

18 pages

Recursion

Recursion

24 pages

Pruning

Pruning

11 pages

Graphs

Graphs

25 pages

Load more
Download BNF Grammar
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view BNF Grammar and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view BNF Grammar 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?