fbpx
Wikipedia

Backus–Naur form

In computer science, Backus–Naur form (/ˌbækəs ˈnaʊər/) (BNF or Backus normal form) is a notation used to describe the syntax of programming languages or other formal languages. It was developed by John Backus and Peter Naur. BNF can be described as a metasyntax notation for context-free grammars. Backus–Naur form is applied wherever exact descriptions of languages are needed, such as in official language specifications, in manuals, and in textbooks on programming language theory. BNF can be used to describe document formats, instruction sets, and communication protocols.

Over time, many extensions and variants of the original Backus–Naur notation have been created; some are exactly defined, including extended Backus–Naur form (EBNF) and augmented Backus–Naur form (ABNF).

Overview edit

A BNF specification is a set of derivation rules, written as

 <symbol> ::= __expression__ 

where:

  • <symbol>[1] is a nonterminal variable that is always enclosed between the pair <>.
  • ::= means that the symbol on the left must be replaced with the expression on the right.
  • __expression__ consists of one or more sequences of either terminal or nonterminal symbols where each sequence is separated by a vertical bar "|" indicating a choice, the whole being a possible substitution for the symbol on the left.

Example edit

As an example, consider this possible BNF for a U.S. postal address:

 <postal-address> ::= <name-part> <street-address> <zip-part> <name-part> ::= <personal-part> <last-name> <opt-suffix-part> <EOL> | <personal-part> <name-part> <personal-part> ::= <first-name> | <initial> "." <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL> <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL> <opt-suffix-part> ::= "Sr." | "Jr." | <roman-numeral> | "" <opt-apt-num> ::= "Apt" <apt-num> | "" 

This translates into English as:

  • A postal address consists of a name-part, followed by a street-address part, followed by a zip-code part.
  • A name-part consists of either: a personal-part followed by a last name followed by an optional suffix (Jr. Sr., or dynastic number) and end-of-line, or a personal part followed by a name part (this rule illustrates the use of recursion in BNFs, covering the case of people who use multiple first and middle names and initials).[2]
  • A personal-part consists of either a first name or an initial followed by a dot.
  • A street address consists of a house number, followed by a street name, followed by an optional apartment specifier, followed by an end-of-line.
  • A zip-part consists of a town-name, followed by a comma, followed by a state code, followed by a ZIP-code followed by an end-of-line.
  • An opt-suffix-part consists of a suffix, such as "Sr.", "Jr." or a roman-numeral, or an empty string (i.e. nothing).
  • An opt-apt-num consists of a prefix "Apt" followed by an apartment number, or an empty string (i.e. nothing).

Note that many things (such as the format of a first-name, apartment number, ZIP-code, and Roman numeral) are left unspecified here. If necessary, they may be described using additional BNF rules.

History edit

The idea of describing the structure of language using rewriting rules can be traced back to at least the work of Pāṇini, an ancient Indian Sanskrit grammarian and a revered scholar in Hinduism who lived sometime between the 6th and 4th century BC.[3][4] His notation to describe Sanskrit word structure is equivalent in power to that of Backus and has many similar properties.

In Western society, grammar was long regarded as a subject for teaching, rather than scientific study; descriptions were informal and targeted at practical usage. In the first half of the 20th century, linguists such as Leonard Bloomfield and Zellig Harris started attempts to formalize the description of language, including phrase structure.

Meanwhile, string rewriting rules as formal logical systems were introduced and studied by mathematicians such as Axel Thue (in 1914), Emil Post (1920s–40s) and Alan Turing (1936). Noam Chomsky, teaching linguistics to students of information theory at MIT, combined linguistics and mathematics by taking what is essentially Thue's formalism as the basis for the description of the syntax of natural language. He also introduced a clear distinction between generative rules (those of context-free grammars) and transformation rules (1956).[5][6]

John Backus, a programming language designer at IBM, proposed a metalanguage of "metalinguistic formulas"[1][8][9] to describe the syntax of the new programming language IAL, known today as ALGOL 58 (1959). His notation was first used in the ALGOL 60 report.

BNF is a notation for Chomsky's context-free grammars. Backus was familiar with Chomsky's work.[10]

As proposed by Backus, the formula defined "classes" whose names are enclosed in angle brackets. For example, <ab>. Each of these names denotes a class of basic symbols.[1]

Further development of ALGOL led to ALGOL 60. In the committee's 1963 report, Peter Naur called Backus's notation Backus normal form. Donald Knuth argued that BNF should rather be read as Backus–Naur form, as it is "not a normal form in the conventional sense",[11] unlike, for instance, Chomsky normal form. The name Pāṇini Backus form was also once suggested in view of the fact that the expansion Backus normal form may not be accurate, and that Pāṇini had independently developed a similar notation earlier.[12]

BNF is described by Peter Naur in the ALGOL 60 report as metalinguistic formula:[13]

Sequences of characters enclosed in the brackets <> represent metalinguistic variables whose values are sequences of symbols. The marks "::=" and "|" (the latter with the meaning of "or") are metalinguistic connectives. Any mark in a formula, which is not a variable or a connective, denotes itself. Juxtaposition of marks or variables in a formula signifies juxtaposition of the sequence denoted.

Another example from the ALGOL 60 report illustrates a major difference between the BNF metalanguage and a Chomsky context-free grammar. Metalinguistic variables do not require a rule defining their formation. Their formation may simply be described in natural language within the <> brackets. The following ALGOL 60 report section 2.3 comments specification, exemplifies how this works:

For the purpose of including text among the symbols of a program the following "comment" conventions hold:

The sequence of basic symbols: is equivalent to
; comment <any sequence not containing ';'>; ;
begin comment <any sequence not containing ';'>; begin
end <any sequence not containing 'end' or ';' or 'else'> end

Equivalence here means that any of the three structures shown in the left column may be replaced, in any occurrence outside of strings, by the symbol shown in the same line in the right column without any effect on the action of the program.

Naur changed two of Backus's symbols to commonly available characters. The ::= symbol was originally a :≡. The | symbol was originally the word "or" (with a bar over it).[8]: 14 

BNF is very similar to canonical-form boolean algebra equations that are, and were at the time, used in logic-circuit design. Backus was a mathematician and the designer of the FORTRAN programming language. Studies of boolean algebra is commonly part of a mathematics curriculum. Neither Backus nor Naur described the names enclosed in < > as non-terminals. Chomsky's terminology was not originally used in describing BNF. Naur later described them as classes in ALGOL course materials.[1] In the ALGOL 60 report they were called metalinguistic variables. Anything other than the metasymbols ::=, |, and class names enclosed in < > are symbols of the language being defined. The metasymbol ::= is to be interpreted as "is defined as". The | is used to separate alternative definitions and is interpreted as "or". The metasymbols < > are delimiters enclosing a class name. BNF is described as a metalanguage for talking about ALGOL by Peter Naur and Saul Rosen.[1]

In 1947 Saul Rosen became involved in the activities of the fledgling Association for Computing Machinery, first on the languages committee that became the IAL group and eventually led to ALGOL. He was the first managing editor of the Communications of the ACM.[clarification needed] BNF was first used as a metalanguage to talk about the ALGOL language in the ALGOL 60 report. That is how it is explained in ALGOL programming course material developed by Peter Naur in 1962.[1] Early ALGOL manuals by IBM, Honeywell, Burroughs and Digital Equipment Corporation followed the ALGOL 60 report using it as a metalanguage. Saul Rosen in his book[14] describes BNF as a metalanguage for talking about ALGOL. An example of its use as a metalanguage would be in defining an arithmetic expression:

<expr> ::= <term>|<expr><addop><term> 

The first symbol of an alternative may be the class being defined, the repetition, as explained by Naur, having the function of specifying that the alternative sequence can recursively begin with a previous alternative and can be repeated any number of times.[1] For example, above <expr> is defined as a <term> followed by any number of <addop> <term>.

In some later metalanguages, such as Schorre's META II, the BNF recursive repeat construct is replaced by a sequence operator and target language symbols defined using quoted strings. The < and > brackets were removed. Parentheses () for mathematical grouping were added. The <expr> rule would appear in META II as

EXPR = TERM $('+' TERM .OUT('ADD') | '-' TERM .OUT('SUB')); 

These changes enabled META II and its derivative programming languages to define and extend their own metalanguage, at the cost of the ability to use a natural language description, metalinguistic variable, language construct description. Many spin-off metalanguages were inspired by BNF.[citation needed] See META II, TREE-META, and Metacompiler.

A BNF class describes a language construct formation, with formation defined as a pattern or the action of forming the pattern. The class name expr is described in a natural language as a <term> followed by a sequence <addop> <term>. A class is an abstraction; we can talk about it independent of its formation. We can talk about term, independent of its definition, as being added or subtracted in expr. We can talk about a term being a specific data type and how an expr is to be evaluated having specific combinations of data types, or even reordering an expression to group data types and evaluation results of mixed types. The natural-language supplement provided specific details of the language class semantics to be used by a compiler implementation and a programmer writing an ALGOL program. Natural-language description further supplemented the syntax as well. The integer rule is a good example of natural and metalanguage used to describe syntax:

<integer> ::= <digit>|<integer><digit> 

There are no specifics on white space in the above. As far as the rule states, we could have space between the digits. In the natural language we complement the BNF metalanguage by explaining that the digit sequence can have no white space between the digits. English is only one of the possible natural languages. Translations of the ALGOL reports were available in many natural languages.

The origin of BNF is not as important as its impact on programming language development.[citation needed] During the period immediately following the publication of the ALGOL 60 report BNF was the basis of many compiler-compiler systems.

Some, like "A Syntax Directed Compiler for ALGOL 60" developed by Edgar T. Irons and "A Compiler Building System" Developed by Brooker and Morris, directly used BNF. Others, like the Schorre Metacompilers, made it into a programming language with only a few changes. <class name> became symbol identifiers, dropping the enclosing <,> and using quoted strings for symbols of the target language. Arithmetic-like grouping provided a simplification that removed using classes where grouping was its only value. The META II arithmetic expression rule shows grouping use. Output expressions placed in a META II rule are used to output code and labels in an assembly language. Rules in META II are equivalent to a class definitions in BNF. The Unix utility yacc is based on BNF with code production similar to META II. yacc is most commonly used as a parser generator, and its roots are obviously BNF.

BNF today is one of the oldest computer-related languages still in use.[citation needed]

Further examples edit

 
BNF syntax diagram

BNF's syntax itself may be represented with a BNF like the following:

 <syntax> ::= <rule> | <rule> <syntax> <rule> ::= <opt-whitespace> "<" <rule-name> ">" <opt-whitespace> "::=" <opt-whitespace> <expression> <line-end> <opt-whitespace> ::= " " <opt-whitespace> | "" <expression> ::= <list> | <list> <opt-whitespace> "|" <opt-whitespace> <expression> <line-end> ::= <opt-whitespace> <EOL> | <line-end> <line-end> <list> ::= <term> | <term> <opt-whitespace> <list> <term> ::= <literal> | "<" <rule-name> ">" <literal> ::= '"' <text1> '"' | "'" <text2> "'" <text1> ::= "" | <character1> <text1> <text2> ::= "" | <character2> <text2> <character> ::= <letter> | <digit> | <symbol> <letter> ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" <digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <symbol> ::= "|" | " " | "!" | "#" | "$" | "%" | "&" | "(" | ")" | "*" | "+" | "," | "-" | "." | "/" | ":" | ";" | ">" | "=" | "<" | "?" | "@" | "[" | "\" | "]" | "^" | "_" | "`" | "{" | "}" | "~" <character1> ::= <character> | "'" <character2> ::= <character> | '"' <rule-name> ::= <letter> | <rule-name> <rule-char> <rule-char> ::= <letter> | <digit> | "-" 

Note that "" is the empty string.

The original BNF did not use quotes as shown in <literal> rule. This assumes that no whitespace is necessary for proper interpretation of the rule.

<EOL> represents the appropriate line-end specifier (in ASCII, carriage-return, line-feed or both depending on the operating system). <rule-name> and <text> are to be substituted with a declared rule's name/label or literal text, respectively.

In the U.S. postal address example above, the entire block-quote is a <syntax>. Each line or unbroken grouping of lines is a rule; for example one rule begins with <name-part> ::=. The other part of that rule (aside from a line-end) is an expression, which consists of two lists separated by a vertical bar |. These two lists consists of some terms (three terms and two terms, respectively). Each term in this particular rule is a rule-name.

Variants edit

EBNF edit

There are many variants and extensions of BNF, generally either for the sake of simplicity and succinctness, or to adapt it to a specific application. One common feature of many variants is the use of regular expression repetition operators such as * and +. The extended Backus–Naur form (EBNF) is a common one.

Another common extension is the use of square brackets around optional items. Although not present in the original ALGOL 60 report (instead introduced a few years later in IBM's PL/I definition), the notation is now universally recognised.

ABNF edit

Augmented Backus–Naur form (ABNF) and Routing Backus–Naur form (RBNF)[15] are extensions commonly used to describe Internet Engineering Task Force (IETF) protocols.

Parsing expression grammars build on the BNF and regular expression notations to form an alternative class of formal grammar, which is essentially analytic rather than generative in character.

Others edit

Many BNF specifications found online today are intended to be human-readable and are non-formal. These often include many of the following syntax rules and extensions:

  • Optional items enclosed in square brackets: [<item-x>].
  • Items existing 0 or more times are enclosed in curly brackets or suffixed with an asterisk (*) such as <word> ::= <letter> {<letter>} or <word> ::= <letter> <letter>* respectively.
  • Items existing 1 or more times are suffixed with an addition (plus) symbol, +, such as <word> ::= <letter>+.
  • Terminals may appear in bold rather than italics, and non-terminals in plain text rather than angle brackets.
  • Where items are grouped, they are enclosed in simple parentheses.

Software using BNF or variants edit

Software that accepts BNF (or a superset) as input edit

  • ANTLR, a parser generator written in Java
  • Coco/R, compiler generator accepting an attributed grammar in EBNF
  • DMS Software Reengineering Toolkit, program analysis and transformation system for arbitrary languages
  • GOLD, a BNF parser generator
  • RPA BNF parser.[16] Online (PHP) demo parsing: JavaScript, XML
  • XACT X4MR System,[17] a rule-based expert system for programming language translation
  • XPL Analyzer, a tool which accepts simplified BNF for a language and produces a parser for that language in XPL; it may be integrated into the supplied SKELETON program, with which the language may be debugged[18] (a SHARE contributed program, which was preceded by A Compiler Generator[19])
  • bnfparser2,[20] a universal syntax verification utility
  • bnf2xml,[21] Markup input with XML tags using advanced BNF matching
  • JavaCC,[22] Java Compiler Compiler tm (JavaCC tm) - The Java Parser Generator

Similar software edit

  • GNU bison, GNU version of yacc
  • Yacc, parser generator (most commonly used with the Lex preprocessor)
  • Racket's parser tools, lex and yacc-style parsing (Beautiful Racket edition)
  • Qlik Sense, a BI tool, uses a variant of BNF for scripting [23]
  • BNF Converter (BNFC[24]), operating on a variant called "labeled Backus–Naur form" (LBNF). In this variant, each production for a given non-terminal is given a label, which can be used as a constructor of an algebraic data type representing that nonterminal. The converter is capable of producing types and parsers for abstract syntax in several languages, including Haskell and Java

See also edit

References edit

  1. ^ a b c d e f g The meaning of syntactic formula may be further explained by saying that words enclosed in the brackets < >, like <ab>, denote classes whose members are sequences of basic symbols. Class designations of this kind are found in any description of a language. For describing ordinary natural languages designation like word, verb, noun, are used. .[7]: 5, Note 1 
  2. ^ This article is based on material taken from Backus-Naur+Form at the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.
  3. ^ "Panini biography". School of Mathematics and Statistics, University of St Andrews, Scotland. Retrieved 2014-03-22.
  4. ^ Ingerman, Peter Zilahy (March 1967). ""Pāṇini-Backus Form" Suggested". Communications of the ACM. 10 (3). Association for Computing Machinery: 137. doi:10.1145/363162.363165. S2CID 52817672. Ingerman suggests that the Backus Normal Form be renamed to the Pāṇini-Backus Form, to give due credit to Pāṇini as the earliest independent inventor.
  5. ^ Chomsky, Noam (1956). (PDF). IRE Transactions on Information Theory. 2 (3): 113–24. doi:10.1109/TIT.1956.1056813. S2CID 19519474. Archived from the original (PDF) on 2010-09-19.
  6. ^ Chomsky, Noam (1957). Syntactic Structures. The Hague: Mouton.
  7. ^ Naur, Peter (1961). "A COURSE OF ALGO L 60 PROGRAMMING with special reference to the DASK ALGOL system" (PDF). Copenhagen: Regnecentralen. Retrieved 26 March 2015.
  8. ^ a b Backus, J. W. (1959). "The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference". Proceedings of the International Conference on Information Processing. UNESCO. pp. 125–132.
  9. ^ Farrell, James A. (August 1995). "Compiler Basics: Extended Backus Naur Form". from the original on 5 June 2011. Retrieved May 11, 2011.
  10. ^ Fulton, III, Scott M. (20 March 2007). "John W. Backus (1924 - 2007)". BetaNews. Inc. Retrieved Jun 3, 2014.
  11. ^ Knuth, Donald E. (1964). "Backus Normal Form vs. Backus Naur Form". Communications of the ACM. 7 (12): 735–736. doi:10.1145/355588.365140. S2CID 47537431.
  12. ^ Ingerman, P. Z. (1967). ""Pāṇini Backus Form" suggested". Communications of the ACM. 10 (3): 137. doi:10.1145/363162.363165. S2CID 52817672.
  13. ^ Revised ALGOL 60 report section. 1.1."ALGOL 60". Retrieved April 18, 2015.
  14. ^ Saul Rosen (Jan 1967). Programming Systems and Languages. McGraw Hill Computer Science Series. New York/NY: McGraw Hill. ISBN 978-0070537088.
  15. ^ RBNF.
  16. ^ "Online demo", , archived from the original on 2012-11-02, retrieved 2011-07-03
  17. ^ "Tools", , archived from the original on 2013-01-29
  18. ^ If the target processor is System/360, or related, even up to z/System, and the target language is similar to PL/I (or, indeed, XPL), then the required code "emitters" may be adapted from XPL's "emitters" for System/360.
  19. ^ McKeeman, W. M.; Horning, J.J.; Wortman, D. B. (1970). A Compiler Generator. Prentice-Hall. ISBN 978-0-13-155077-3.
  20. ^ "BNF parser²", Source forge (project)
  21. ^ bnf2xml
  22. ^ . Archived from the original on 2013-06-08. Retrieved 2013-09-25.
  23. ^ "Script Syntax - Qlik Sense on Windows". Qlik.com. QlikTech International AB. Retrieved 10 January 2022.
  24. ^ "BNFC", Language technology, SE: Chalmers

External links edit

  • Garshol, Lars Marius, BNF and EBNF: What are they and how do they work?, NO: Priv.
  • RFC 5234 — Augmented BNF for Syntax Specifications: ABNF.
  • RFC 5511 — Routing BNF: A Syntax Used in Various Protocol Specifications.
  • ISO/IEC 14977:1996(E) Information technology – Syntactic metalanguage – Extended BNF, available from "Publicly available", Standards, ISO or from Kuhn, Marcus, Iso 14977 (PDF), UK: CAM (the latter is missing the cover page, but is otherwise much cleaner)

Language grammars edit

  • Bernhard, Algol-60 BNF, DE: LRZ München, the original BNF.
  • "BNF grammars for SQL-92, SQL-99 and SQL-2003", Savage, AU: Net, freely available BNF grammars for SQL.
  • "BNF Web Club", , CH: Unige, archived from the original on 2007-01-24, retrieved 2007-01-25, freely available BNF grammars for SQL, Ada, Java.
  • "Free Programming Language Grammars for Compiler Construction", Source code, The free country, freely available BNF/EBNF grammars for C/C++, Pascal, COBOL, Ada 95, PL/I.
  • "BNF files related to the STEP standard", Exp engine (SVN), Source forge, archived from the original on 2012-12-25. Includes parts 11, 14, and 21 of the ISO 10303 (STEP) standard.

backus, naur, form, confused, with, boyce, codd, normal, form, this, article, multiple, issues, please, help, improve, discuss, these, issues, talk, page, learn, when, remove, these, template, messages, this, article, written, like, manual, guide, please, help. Not to be confused with Boyce Codd normal form This article has multiple issues Please help improve it or discuss these issues on the talk page Learn how and when to remove these template messages This article is written like a manual or guide Please help rewrite this article and remove advice or instruction December 2023 This article may be too technical for most readers to understand Please help improve it to make it understandable to non experts without removing the technical details December 2023 Learn how and when to remove this message This article needs additional citations for verification Please help improve this article by adding citations to reliable sources Unsourced material may be challenged and removed Find sources Backus Naur form news newspapers books scholar JSTOR December 2023 Learn how and when to remove this message Learn how and when to remove this message In computer science Backus Naur form ˌ b ae k e s ˈ n aʊer BNF or Backus normal form is a notation used to describe the syntax of programming languages or other formal languages It was developed by John Backus and Peter Naur BNF can be described as a metasyntax notation for context free grammars Backus Naur form is applied wherever exact descriptions of languages are needed such as in official language specifications in manuals and in textbooks on programming language theory BNF can be used to describe document formats instruction sets and communication protocols Over time many extensions and variants of the original Backus Naur notation have been created some are exactly defined including extended Backus Naur form EBNF and augmented Backus Naur form ABNF Contents 1 Overview 2 Example 3 History 4 Further examples 5 Variants 5 1 EBNF 5 2 ABNF 5 3 Others 6 Software using BNF or variants 6 1 Software that accepts BNF or a superset as input 6 2 Similar software 7 See also 8 References 9 External links 9 1 Language grammarsOverview editA BNF specification is a set of derivation rules written as lt symbol gt expression where lt symbol gt 1 is a nonterminal variable that is always enclosed between the pair lt gt means that the symbol on the left must be replaced with the expression on the right expression consists of one or more sequences of either terminal or nonterminal symbols where each sequence is separated by a vertical bar indicating a choice the whole being a possible substitution for the symbol on the left Example editAs an example consider this possible BNF for a U S postal address lt postal address gt lt name part gt lt street address gt lt zip part gt lt name part gt lt personal part gt lt last name gt lt opt suffix part gt lt EOL gt lt personal part gt lt name part gt lt personal part gt lt first name gt lt initial gt lt street address gt lt house num gt lt street name gt lt opt apt num gt lt EOL gt lt zip part gt lt town name gt lt state code gt lt ZIP code gt lt EOL gt lt opt suffix part gt Sr Jr lt roman numeral gt lt opt apt num gt Apt lt apt num gt This translates into English as A postal address consists of a name part followed by a street address part followed by a zip code part A name part consists of either a personal part followed by a last name followed by an optional suffix Jr Sr or dynastic number and end of line or a personal part followed by a name part this rule illustrates the use of recursion in BNFs covering the case of people who use multiple first and middle names and initials 2 A personal part consists of either a first name or an initial followed by a dot A street address consists of a house number followed by a street name followed by an optional apartment specifier followed by an end of line A zip part consists of a town name followed by a comma followed by a state code followed by a ZIP code followed by an end of line An opt suffix part consists of a suffix such as Sr Jr or a roman numeral or an empty string i e nothing An opt apt num consists of a prefix Apt followed by an apartment number or an empty string i e nothing Note that many things such as the format of a first name apartment number ZIP code and Roman numeral are left unspecified here If necessary they may be described using additional BNF rules History editThe idea of describing the structure of language using rewriting rules can be traced back to at least the work of Paṇini an ancient Indian Sanskrit grammarian and a revered scholar in Hinduism who lived sometime between the 6th and 4th century BC 3 4 His notation to describe Sanskrit word structure is equivalent in power to that of Backus and has many similar properties In Western society grammar was long regarded as a subject for teaching rather than scientific study descriptions were informal and targeted at practical usage In the first half of the 20th century linguists such as Leonard Bloomfield and Zellig Harris started attempts to formalize the description of language including phrase structure Meanwhile string rewriting rules as formal logical systems were introduced and studied by mathematicians such as Axel Thue in 1914 Emil Post 1920s 40s and Alan Turing 1936 Noam Chomsky teaching linguistics to students of information theory at MIT combined linguistics and mathematics by taking what is essentially Thue s formalism as the basis for the description of the syntax of natural language He also introduced a clear distinction between generative rules those of context free grammars and transformation rules 1956 5 6 John Backus a programming language designer at IBM proposed a metalanguage of metalinguistic formulas 1 8 9 to describe the syntax of the new programming language IAL known today as ALGOL 58 1959 His notation was first used in the ALGOL 60 report BNF is a notation for Chomsky s context free grammars Backus was familiar with Chomsky s work 10 As proposed by Backus the formula defined classes whose names are enclosed in angle brackets For example lt ab gt Each of these names denotes a class of basic symbols 1 Further development of ALGOL led to ALGOL 60 In the committee s 1963 report Peter Naur called Backus s notation Backus normal form Donald Knuth argued that BNF should rather be read as Backus Naur form as it is not a normal form in the conventional sense 11 unlike for instance Chomsky normal form The name Paṇini Backus form was also once suggested in view of the fact that the expansion Backus normal form may not be accurate and that Paṇini had independently developed a similar notation earlier 12 BNF is described by Peter Naur in the ALGOL 60 report as metalinguistic formula 13 Sequences of characters enclosed in the brackets lt gt represent metalinguistic variables whose values are sequences of symbols The marks and the latter with the meaning of or are metalinguistic connectives Any mark in a formula which is not a variable or a connective denotes itself Juxtaposition of marks or variables in a formula signifies juxtaposition of the sequence denoted Another example from the ALGOL 60 report illustrates a major difference between the BNF metalanguage and a Chomsky context free grammar Metalinguistic variables do not require a rule defining their formation Their formation may simply be described in natural language within the lt gt brackets The following ALGOL 60 report section 2 3 comments specification exemplifies how this works For the purpose of including text among the symbols of a program the following comment conventions hold The sequence of basic symbols is equivalent to comment lt any sequence not containing gt begin comment lt any sequence not containing gt begin end lt any sequence not containing end or or else gt end Equivalence here means that any of the three structures shown in the left column may be replaced in any occurrence outside of strings by the symbol shown in the same line in the right column without any effect on the action of the program Naur changed two of Backus s symbols to commonly available characters The symbol was originally a The symbol was originally the word or with a bar over it 8 14 BNF is very similar to canonical form boolean algebra equations that are and were at the time used in logic circuit design Backus was a mathematician and the designer of the FORTRAN programming language Studies of boolean algebra is commonly part of a mathematics curriculum Neither Backus nor Naur described the names enclosed in lt gt as non terminals Chomsky s terminology was not originally used in describing BNF Naur later described them as classes in ALGOL course materials 1 In the ALGOL 60 report they were called metalinguistic variables Anything other than the metasymbols and class names enclosed in lt gt are symbols of the language being defined The metasymbol is to be interpreted as is defined as The is used to separate alternative definitions and is interpreted as or The metasymbols lt gt are delimiters enclosing a class name BNF is described as a metalanguage for talking about ALGOL by Peter Naur and Saul Rosen 1 In 1947 Saul Rosen became involved in the activities of the fledgling Association for Computing Machinery first on the languages committee that became the IAL group and eventually led to ALGOL He was the first managing editor of the Communications of the ACM clarification needed BNF was first used as a metalanguage to talk about the ALGOL language in the ALGOL 60 report That is how it is explained in ALGOL programming course material developed by Peter Naur in 1962 1 Early ALGOL manuals by IBM Honeywell Burroughs and Digital Equipment Corporation followed the ALGOL 60 report using it as a metalanguage Saul Rosen in his book 14 describes BNF as a metalanguage for talking about ALGOL An example of its use as a metalanguage would be in defining an arithmetic expression lt expr gt lt term gt lt expr gt lt addop gt lt term gt The first symbol of an alternative may be the class being defined the repetition as explained by Naur having the function of specifying that the alternative sequence can recursively begin with a previous alternative and can be repeated any number of times 1 For example above lt expr gt is defined as a lt term gt followed by any number of lt addop gt lt term gt In some later metalanguages such as Schorre s META II the BNF recursive repeat construct is replaced by a sequence operator and target language symbols defined using quoted strings The lt and gt brackets were removed Parentheses for mathematical grouping were added The lt expr gt rule would appear in META II as EXPR TERM TERM OUT ADD TERM OUT SUB These changes enabled META II and its derivative programming languages to define and extend their own metalanguage at the cost of the ability to use a natural language description metalinguistic variable language construct description Many spin off metalanguages were inspired by BNF citation needed See META II TREE META and Metacompiler A BNF class describes a language construct formation with formation defined as a pattern or the action of forming the pattern The class name expr is described in a natural language as a lt term gt followed by a sequence lt addop gt lt term gt A class is an abstraction we can talk about it independent of its formation We can talk about term independent of its definition as being added or subtracted in expr We can talk about a term being a specific data type and how an expr is to be evaluated having specific combinations of data types or even reordering an expression to group data types and evaluation results of mixed types The natural language supplement provided specific details of the language class semantics to be used by a compiler implementation and a programmer writing an ALGOL program Natural language description further supplemented the syntax as well The integer rule is a good example of natural and metalanguage used to describe syntax lt integer gt lt digit gt lt integer gt lt digit gt There are no specifics on white space in the above As far as the rule states we could have space between the digits In the natural language we complement the BNF metalanguage by explaining that the digit sequence can have no white space between the digits English is only one of the possible natural languages Translations of the ALGOL reports were available in many natural languages The origin of BNF is not as important as its impact on programming language development citation needed During the period immediately following the publication of the ALGOL 60 report BNF was the basis of many compiler compiler systems Some like A Syntax Directed Compiler for ALGOL 60 developed by Edgar T Irons and A Compiler Building System Developed by Brooker and Morris directly used BNF Others like the Schorre Metacompilers made it into a programming language with only a few changes lt class name gt became symbol identifiers dropping the enclosing lt gt and using quoted strings for symbols of the target language Arithmetic like grouping provided a simplification that removed using classes where grouping was its only value The META II arithmetic expression rule shows grouping use Output expressions placed in a META II rule are used to output code and labels in an assembly language Rules in META II are equivalent to a class definitions in BNF The Unix utility yacc is based on BNF with code production similar to META II yacc is most commonly used as a parser generator and its roots are obviously BNF BNF today is one of the oldest computer related languages still in use citation needed Further examples edit nbsp BNF syntax diagram BNF s syntax itself may be represented with a BNF like the following lt syntax gt lt rule gt lt rule gt lt syntax gt lt rule gt lt opt whitespace gt lt lt rule name gt gt lt opt whitespace gt lt opt whitespace gt lt expression gt lt line end gt lt opt whitespace gt lt opt whitespace gt lt expression gt lt list gt lt list gt lt opt whitespace gt lt opt whitespace gt lt expression gt lt line end gt lt opt whitespace gt lt EOL gt lt line end gt lt line end gt lt list gt lt term gt lt term gt lt opt whitespace gt lt list gt lt term gt lt literal gt lt lt rule name gt gt lt literal gt lt text1 gt lt text2 gt lt text1 gt lt character1 gt lt text1 gt lt text2 gt lt character2 gt lt text2 gt lt character gt lt letter gt lt digit gt lt symbol gt lt letter gt A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z lt digit gt 0 1 2 3 4 5 6 7 8 9 lt symbol gt amp gt lt lt character1 gt lt character gt lt character2 gt lt character gt lt rule name gt lt letter gt lt rule name gt lt rule char gt lt rule char gt lt letter gt lt digit gt Note that is the empty string The original BNF did not use quotes as shown in lt literal gt rule This assumes that no whitespace is necessary for proper interpretation of the rule lt EOL gt represents the appropriate line end specifier in ASCII carriage return line feed or both depending on the operating system lt rule name gt and lt text gt are to be substituted with a declared rule s name label or literal text respectively In the U S postal address example above the entire block quote is a lt syntax gt Each line or unbroken grouping of lines is a rule for example one rule begins with lt name part gt The other part of that rule aside from a line end is an expression which consists of two lists separated by a vertical bar These two lists consists of some terms three terms and two terms respectively Each term in this particular rule is a rule name Variants editEBNF edit Main article Extended Backus Naur form There are many variants and extensions of BNF generally either for the sake of simplicity and succinctness or to adapt it to a specific application One common feature of many variants is the use of regular expression repetition operators such as and The extended Backus Naur form EBNF is a common one Another common extension is the use of square brackets around optional items Although not present in the original ALGOL 60 report instead introduced a few years later in IBM s PL I definition the notation is now universally recognised ABNF edit Main article ABNF Augmented Backus Naur form ABNF and Routing Backus Naur form RBNF 15 are extensions commonly used to describe Internet Engineering Task Force IETF protocols Parsing expression grammars build on the BNF and regular expression notations to form an alternative class of formal grammar which is essentially analytic rather than generative in character Others edit Many BNF specifications found online today are intended to be human readable and are non formal These often include many of the following syntax rules and extensions Optional items enclosed in square brackets lt item x gt Items existing 0 or more times are enclosed in curly brackets or suffixed with an asterisk such as lt word gt lt letter gt lt letter gt or lt word gt lt letter gt lt letter gt respectively Items existing 1 or more times are suffixed with an addition plus symbol such as lt word gt lt letter gt Terminals may appear in bold rather than italics and non terminals in plain text rather than angle brackets Where items are grouped they are enclosed in simple parentheses Software using BNF or variants editSoftware that accepts BNF or a superset as input edit ANTLR a parser generator written in Java Coco R compiler generator accepting an attributed grammar in EBNF DMS Software Reengineering Toolkit program analysis and transformation system for arbitrary languages GOLD a BNF parser generator RPA BNF parser 16 Online PHP demo parsing JavaScript XML XACT X4MR System 17 a rule based expert system for programming language translation XPL Analyzer a tool which accepts simplified BNF for a language and produces a parser for that language in XPL it may be integrated into the supplied SKELETON program with which the language may be debugged 18 a SHARE contributed program which was preceded by A Compiler Generator 19 bnfparser2 20 a universal syntax verification utility bnf2xml 21 Markup input with XML tags using advanced BNF matching JavaCC 22 Java Compiler Compiler tm JavaCC tm The Java Parser Generator Similar software edit GNU bison GNU version of yacc Yacc parser generator most commonly used with the Lex preprocessor Racket s parser tools lex and yacc style parsing Beautiful Racket edition Qlik Sense a BI tool uses a variant of BNF for scripting 23 BNF Converter BNFC 24 operating on a variant called labeled Backus Naur form LBNF In this variant each production for a given non terminal is given a label which can be used as a constructor of an algebraic data type representing that nonterminal The converter is capable of producing types and parsers for abstract syntax in several languages including Haskell and JavaSee also editAugmented Backus Naur form ABNF Compiler Description Language CDL Definite clause grammar a more expressive alternative to BNF used in Prolog Extended Backus Naur form EBNF Meta II an early compiler writing tool and notation Syntax diagram railroad diagram Translational Backus Naur form TBNF Van Wijngaarden grammar used in preference to BNF to define Algol68 Wirth syntax notation an alternative to BNF from 1977References edit a b c d e f g The meaning of syntactic formula may be further explained by saying that words enclosed in the brackets lt gt like lt ab gt denote classes whose members are sequences of basic symbols Class designations of this kind are found in any description of a language For describing ordinary natural languages designation like word verb noun are used 7 5 Note 1 This article is based on material taken from Backus Naur Form at the Free On line Dictionary of Computing prior to 1 November 2008 and incorporated under the relicensing terms of the GFDL version 1 3 or later Panini biography School of Mathematics and Statistics University of St Andrews Scotland Retrieved 2014 03 22 Ingerman Peter Zilahy March 1967 Paṇini Backus Form Suggested Communications of the ACM 10 3 Association for Computing Machinery 137 doi 10 1145 363162 363165 S2CID 52817672 Ingerman suggests that the Backus Normal Form be renamed to the Paṇini Backus Form to give due credit to Paṇini as the earliest independent inventor Chomsky Noam 1956 Three models for the description of language PDF IRE Transactions on Information Theory 2 3 113 24 doi 10 1109 TIT 1956 1056813 S2CID 19519474 Archived from the original PDF on 2010 09 19 Chomsky Noam 1957 Syntactic Structures The Hague Mouton Naur Peter 1961 A COURSE OF ALGO L 60 PROGRAMMING with special reference to the DASK ALGOL system PDF Copenhagen Regnecentralen Retrieved 26 March 2015 a b Backus J W 1959 The syntax and semantics of the proposed international algebraic language of the Zurich ACM GAMM Conference Proceedings of the International Conference on Information Processing UNESCO pp 125 132 Farrell James A August 1995 Compiler Basics Extended Backus Naur Form Archived from the original on 5 June 2011 Retrieved May 11 2011 Fulton III Scott M 20 March 2007 John W Backus 1924 2007 BetaNews Inc Retrieved Jun 3 2014 Knuth Donald E 1964 Backus Normal Form vs Backus Naur Form Communications of the ACM 7 12 735 736 doi 10 1145 355588 365140 S2CID 47537431 Ingerman P Z 1967 Paṇini Backus Form suggested Communications of the ACM 10 3 137 doi 10 1145 363162 363165 S2CID 52817672 Revised ALGOL 60 report section 1 1 ALGOL 60 Retrieved April 18 2015 Saul Rosen Jan 1967 Programming Systems and Languages McGraw Hill Computer Science Series New York NY McGraw Hill ISBN 978 0070537088 RBNF Online demo RPatk archived from the original on 2012 11 02 retrieved 2011 07 03 Tools Act world archived from the original on 2013 01 29 If the target processor is System 360 or related even up to z System and the target language is similar to PL I or indeed XPL then the required code emitters may be adapted from XPL s emitters for System 360 McKeeman W M Horning J J Wortman D B 1970 A Compiler Generator Prentice Hall ISBN 978 0 13 155077 3 BNF parser Source forge project bnf2xml JavaCC Archived from the original on 2013 06 08 Retrieved 2013 09 25 Script Syntax Qlik Sense on Windows Qlik com QlikTech International AB Retrieved 10 January 2022 BNFC Language technology SE ChalmersExternal links editGarshol Lars Marius BNF and EBNF What are they and how do they work NO Priv RFC 5234 Augmented BNF for Syntax Specifications ABNF RFC 5511 Routing BNF A Syntax Used in Various Protocol Specifications ISO IEC 14977 1996 E Information technology Syntactic metalanguage Extended BNF available from Publicly available Standards ISO or from Kuhn Marcus Iso 14977 PDF UK CAM the latter is missing the cover page but is otherwise much cleaner Language grammars edit Bernhard Algol 60 BNF DE LRZ Munchen the original BNF BNF grammars for SQL 92 SQL 99 and SQL 2003 Savage AU Net freely available BNF grammars for SQL BNF Web Club DB research CH Unige archived from the original on 2007 01 24 retrieved 2007 01 25 freely available BNF grammars for SQL Ada Java Free Programming Language Grammars for Compiler Construction Source code The free country freely available BNF EBNF grammars for C C Pascal COBOL Ada 95 PL I BNF files related to the STEP standard Exp engine SVN Source forge archived from the original on 2012 12 25 Includes parts 11 14 and 21 of the ISO 10303 STEP standard Retrieved from https en wikipedia org w index php title Backus Naur form amp oldid 1204483713, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.