Está en la página 1de 7

Notacin BNF

Backus-Naur Form

Naur
Peter Naur adapt la
notacin de Backus
al reporte de ALGOL60, hacindole una
serie de mejoras.
Esto condujo a la
notacin
denominada
Backus-Naur Form
(BNF) que es tan
comn en nuestros
das.

John Backus

John Backus sugiri en los

1950s una manera formal de


describir la sintaxis de un
constructor en una parte del
reporte original de FORTRAN
I.

BNF
La notacin BNF es realmente un meta-lenguaje, porque se le usa para describir
otro lenguaje (normalmente, un lenguaje de programacin tal como ALGOL, Pascal,
C, etc.).
En trminos llanos, la notacin BNF es una nomenclatura que nos permite efectuar
una descripcin compacta y precisa de los constructores sintcticos usando ciertos
smbolos y reglas.
Los meta smbolos BNF son:
::= que significa definido como
|que significa o
< > que se usa para encerrar nombres de categoras

ingls
probaron ser
inadecuadas
Un dgito puede ser 0,1,2,3,4,5,6,7,8,9.
Un entero sin signo es una secuencia de uno o ms dgitos
Un entero tiene una de las siguientes tres formas: Un entero positivo (+) seguido por un
entero sin
signo, o un signo negativo (-) seguido de un entero sin signo, o un entero sin signo
precedido por nosigno.
Una fraccin decimal es un punto decimal(.) inmediatamente seguido por un entero sin
signo.
Una parte exponente es un smbolo 10 en subindice inmediatamente seguido por un
entero.
Un nmero decimal tiene una de las siguientes tres formas: Es un entero sin signo, o una
fraccin decimal
o un entero sin signo seguido de una fraccin decimal
Un numero sin signo puede tomar una de las siguientes tres formas: Es un numero
decimal, u una parte
exponente, o un numero decimal seguido de una parte exponenete.
Finalmente un numero puede tener una de las siguientes tres formas: Puede ser un signo
positivo seguido
de un numero sin signo, o un signo negativo seguido de un numero sin signo, o un numero

La notacin BNF
Los ngulos distinguen las reglas de sintaxis para los
nombres (tambien llamados smbolos no terminales) Los
smbolos terminales se escriben tal cual son
representados. Una regla BNF que define un no-terminal
tiene la forma:
nonterminal ::= sequence_of_alternatives
Que consiste de cadenas de smbolos terminales o noterminales
separados por el metasmbolo |
Por ejemplo, la produccin BNF para un mini-lenguaje es:
<program> ::= program
<declaration_sequence>
begin
<statements_sequence>
end ;

Ejemplos
<empty> ::=
<basic symbol>::= <letter> | <digit> | <logical value> | <special symbol> | <delimiter>
<letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | Y
|W|X|Y|Z
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<logical value> ::= #TRUE# | #FALSE#
<special symbol> ::= <any symbol in CDC 64-charaeter set>
<delimiter> ::= <operator> | <separator> | <bracket> | <declarator> | <specificator >
<operator> ::= <arithmetic operator> | <relational operator> | <logical operator > | <sequential
operator>
<arithmetic operator> ::= + | - | * | / | // | ** | ^
<relational operator> ::= < | #le# | = | #ge# | > | ~=
<logical operator> ::= #EQUIV# | #IMPL# | #and# | #OR# | ~
<sequential operator> ::= #GO TO# | #IF# | #THEN# | #ELSE# | #FOR# | #DO#
<separator> ::= # | , | . | : | ; | := | #STEP# | #UNTIL# | #WHILE# | #COMMENT# | #CODE# | #ALGOL#
| #FORTRAN# | #RJ#
<bracket> ::= ) | ( | ] | [ | #(# | #)# | #BEGIN# | #END#

También podría gustarte