Backus-Naur notation (shortly BNF) is a formal mathematical way to describe a language, (to The Backus-Naur Form is a way of defining syntax. It consists of. The standard technique for defining the syntax of a computer language is to use Backus-Naur Form (BNF). The variant used in this tutorial is as follows. A Practical Tutorial on Context Free Grammars. Robert B. . Backus-Naur Form ( BNF) is a notation for expressing a CFG. The notation.

Author: Duk Zuluzil
Country: Portugal
Language: English (Spanish)
Genre: Spiritual
Published (Last): 3 February 2012
Pages: 207
PDF File Size: 9.84 Mb
ePub File Size: 13.52 Mb
ISBN: 369-1-49177-167-5
Downloads: 14006
Price: Free* [*Free Regsitration Required]
Uploader: Akinohn

Programming languages, protocol specifications, query languages, file formats, pattern languages, memory layouts, formal languages, config files, mark-up languages, formatting languages and meta-languages shape the way we compute.

Backus–Naur form – Wikipedia

After reading this article, you will be able to identify and interpret all commonly used notation for grammars. In computer science, the most common type of grammar is the context-free grammar, and these grammars will be the primary focus of this article. Context-free grammars have sufficient richness to describe the recursive syntactic structure of many though certainly not all languages.

When describing languages, Backus-Naur form BNF is a formal notation for encoding grammars intended for human consumption. The name of a class of literals is usually defined by other means, such as a regular expression or even prose.

Not all of these are strictly a superset, as some change the rule-definition relation:: More important than the minor syntactic differences between the forms of EBNF are the additional operations bsckus allows in expansions. In EBNF, square brackets around an expansion, [ expansion ]indicates that this expansion is optional.


To indicate precedence, EBNF grammars may use parentheses,to explictly define the order of expansion. In some forms of EBNF, theoperator explicitly denotes concatenation, rather than relying on juxtaposition. ABNF also provides the ability to specify specific byte values exactly — detail which matters in protocols.

BNF and EBNF: What are they and how do they work?

Here’s a definition of a date and time baackus taken from RFC It’s common to find regular-expression-like operations inside grammars. For instance, the Python lexical specification uses them. The definition of floating point literals in Python is a good example of combining several notations:. The grammar for the entire Python language uses a slightly different but still regular notation.

The language of languages

Even when grammars are not an object of mathematical tutoeial themselves, in texts that deal with discrete mathematical structures, grammars appear to define new notations and new structures.

For more on this, see my article on translating math into code.

Regular expressions sit just beneath context-free grammars in descriptive power: But, the reverse is not true: To go beyond the expressive power of context-free grammars, one needs to allow a degree of context-sensitivity in the grammar.

Context-sensitivity means that terminal symbols may also appear in the left-hand sides of rules.

While this change appears small, it makes grammars equivalent to Turing machines in terms of the languages they can describe. By restricting the rules so that the the left-hand side has strictly fewer symbols than all expansions on the right, context-sensitive grammars are equivalent to decidable baur automata. Even though some languages are context-sensitive, context-sensitive grammars are rarely used for describing computer languages.


For instance, C is slightly context-sensitive backys of the way it handles identifiers and type, but this context-sensitivity is resolved by a special convention, rather than by introducing context-sensitivity into the grammar.

For an comprehensive treatment of parsing techniques, I recommend Grune and Jacobs, Parsing Techniques: As an aside, if you think you’ve invented a new parsing technique, you need to check this book first. Your peer reviewers will check it.

Backus-Naur Form (BNF)

The language of languages [ article index ] [] [ mattmight ] [ rss ]. Defining a language A grammar defines a language. I’ll discuss grammars beyond context-free at the end. Components of a context-free grammar A set of rules is the core component of a grammar. Each rule has two parts: For instance, if we were creating a grammar to handle english text, we might add a rule like: Or, bavkus we were describing a programming language, we could add a rule like: