Presentation is loading. Please wait.

Presentation is loading. Please wait.

30-Jun-15 BNF. Metalanguages A metalanguage is a language used to talk about a language (usually a different one) We can use English as its own metalanguage.

Similar presentations


Presentation on theme: "30-Jun-15 BNF. Metalanguages A metalanguage is a language used to talk about a language (usually a different one) We can use English as its own metalanguage."— Presentation transcript:

1 30-Jun-15 BNF

2 Metalanguages A metalanguage is a language used to talk about a language (usually a different one) We can use English as its own metalanguage (e.g. describing English grammar in English) We need a formal, precise means of describing the syntax of programming languages For decades, BNF has met that need One of the irritating things about Java is that it has no official BNF definition—hence, it’s sometimes hard to tell what is legal syntax It is essential to distinguish between the metalanguage terms and the object language terms For example, BNF uses the | symbol, as do many programming languages—so if we see a |, what is it?

3 BNF BNF stands for either Backus-Naur Form or Backus Normal Form BNF is a metalanguage that is frequently used to describe the grammar of a programming language BNF is formal and precise BNF is essential in compiler construction If you know about “context-free grammars (CFGs),” BNF is one way of defining CFGs There are many dialects of BNF in use, but… …the differences are almost always minor

4 BNF metasymbols Anything enclosed in is a nonterminal that needs to be further expanded, e.g. That is, if you see in the description of a programming language, that means “a variable goes here” Symbols not enclosed in are terminals; they represent themselves, e.g. if, while, ( That is, if you see while in the description of a programming language, that means “the actual word ‘ while ’ goes here” The symbol ::= means is defined as The symbol | means or; it separates alternatives, for example, ::= + | - That is, if you see an, it means “either a ‘ + ’ or a ‘ - ’ goes here”

5 BNF uses recursion ::= | or ::= | Many people find recursion confusing “Extended BNF” (which we’ll talk about shortly) allows repetition as well as recursion Repetition is often easier to implement (with a loop) than recursion, so Extended BNF has become popular

6 BNF Examples I ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 This defines the metasymbol ‘ ’ What it means is, “If the description of the syntax says ‘ ’, you need an actual digit in this location” ::= if ( ) | if ( ) else The symbols if, (, ), and else are terminals—they stand for themselves,, and are metasymbols If you see an, you should replace it by either if ( ) or with if ( ) else Next, you need to replace and with their definitions

7 BNF Examples II ::= | ::= | + | -

8 BNF Examples III ::= | | ::= { } ::= |

9 BNF Examples IV ::= | | | | | | | |...

10 Extended BNF Dialects differ, but the following are pretty standard: [ ] enclose an optional part of the rule Example: ::= if ( ) [ else ] { } mean the enclosed can be repeated any number of times (including zero) Example: ::= ( ) | ( {, } )

11 Variations The preceding notation is the original and most common notation BNF was designed before we had boldface, color, more than one font, etc. A typical modern variation might: Use boldface to indicate multi-character terminals Quote single-character terminals (because boldface isn’t so obvious in this case) Example: if_statement ::= if "(" condition ")" statement [ else statement ]

12 Limitations of BNF No easy way to impose length limitations, such as maximum length of variable names No way to impose distributed requirements, such as, a variable must be declared before it is used Describes only syntax, not semantics Nothing clearly better has been devised

13 The End


Download ppt "30-Jun-15 BNF. Metalanguages A metalanguage is a language used to talk about a language (usually a different one) We can use English as its own metalanguage."

Similar presentations


Ads by Google