Está en la página 1de 6

Historia

La notacin BNF suele usarse para describir sintcticamente lenguajes de programacin. Se remonta al ao 60, en que John Backus la us para describir el lenguaje Algol. De hecho, es el acrnimo de Backus Naur Form, en homenaje a la destacada contribucin de Backus (coordinador del grupo que desarroll el lenguaje FORTRAN), y de Peter Naur (coordinador del grupo que desarroll el lenguaje Algol) al diseo de lenguajes de programacin.

Gramticas BNF
La definicin formal de la sintaxis de un LP se conoce comnmente como gramtica. Una gramtica se compone de un conjunto de reglas (producciones) que definen las palabras (elementos lxicos) y unidades sintcticas. Una gramtica formal es una que usa una notacin definida (o metalenguaje) de manera estricta. Cuando se considera la estructura de una oracin en Espaol, se le describe por lo general como una secuencia de categoras: sujeto | verbo | complemento Podemos decir que una oracin puede ser una oracin declarativa o una oracin interrogativa, lo que denotamos:
<oracin> ::= <declarativa> | <interrogativa>

donde "::=" significa "se define cmo" y "|" significa "o"; comparndolo con el lenguaje usado en las gramticas formales, las palabras encerradas entre <palabra> son categoras sintcticas o no terminales, es decir deben ser definidas; "::=" equivale a "->" y "|" tiene el mismo significado. As, por ejemplo, en gramticas formales:
O -> D | I S -> S V C S -> A N I -> V S P ?

en nuestro metalenguaje:
<oracin> ::= <declarativa> | <interrogativa> <declarativa> ::= <sujeto> <verbo> <complemento> <sujeto> ::= <artculo> <nombre> : <interrogativa> ::= <verbo> <sujeto> <predicado> ? :

Esta notacin especfica se conoce como BNF (Backus Naur Form) desarrollada por John Backus alrededor de 1960 para la definicin de ALGOL.

Para expresar repeticin se usa la recursividad, por ejemplo:


<entero> ::= <entero> <dgito> | <dgito>

define a un entero como una secuencia de dgitos, con a lo menos un dgito. A pesar de su estructura sencilla, BNF sirve para definir casi todos los lenguajes de programacin. Las reas de sintaxis que no pueden definirse con una BNF y tampoco con una gramtica libre del contexto, son aquellas que indican dependencia contextual. Por ejemplo, "un arreglo declarado con dos dimensiones, no se puede referenciar con tres subndices", o "en un comando de atribucin, la variable del lado izquierdo debe ser del mismo tipo de la expresin del lado derecho", etc. Notacin BNF extendida: Las extensiones siguientes permiten realizar descripciones ms fciles de los lenguajes:

Sintaxis Significado ::= t' <nt> (...) * + [...] | se define como el smbolo terminal t el smbolo no terminal nt usado para agrupar cero o ms repeticiones del elemento anterior una o ms repeticiones del elemento anterior elemento discrecional alternativa de varias formas sintcticas vlidas

Ejemplo:
<entero> ::= [+|-] <dgito> {<dgito>}* <identificador> ::= <letra> {<letra> | <dgito>}*

Diagramas sintcticos
Los diagramas sintcticos son una forma grfica de expresar la BNF extendida. Cada regla est representada por un camino que va desde la entrada ubicada a la izquierda, hasta la salida, ubicada a la derecha. Cualquier trayecto desde la entrada a la salida representa un string generado por esa regla. Las categoras sintcticas (no-terminales) se representan rectngulos y los smbolos terminales por crculos u valos. Ejemplo: Entero por

Veamos un ejemplo de asignacin con los dos metalenguajes: a. En BNF:


<comando asignacin> ::= <variable> := <expresin aritmtica> <expresin aritmtica> ::= <trmino> | <expresin aritmtica> + <trmino> | <expresin aritmtica> - <trmino> <trmino> ::= <primario> | <trmino> * <primario> | <trmino> / <primario> <primario> ::= <variable> | <nmero> | (<expresin aritmtica>) <variable> ::= <identificador> | <identificador> [<lista subndice>] <lista subndice> ::= <expresin aritmtica> | <lista subndice> , <expresin aritmtica>

b. En BNF extendida:
<comando asignacin> ::= <variable> := <expresin aritmtica> <expresin aritmtica> ::= <trmino> { [+|-] <trmino> }* <trmino> ::= <primario> { [*|/] <primario> } <primario> ::= <variable> | <nmero> | (<expresin aritmtica>) <variable> ::= <identificador> | <identificador> [<lista subndice>] <lista subndice> ::= <expresin aritmtica> { , <expresin aritmtica> }*

Universidad Arturo Prat Departamento de Ingeniera Lenguajes de Programacin

<Programa> ::= <ListaDeFunciones> <ListaDeFunciones> ::= <Funcin> | <ListaDeFunciones> <Funcin> <Funcin> ::= FUNC <Variable> ( <ListaDeParmetros> ) <Sentencia> <ListaDeParmetros> ::= <ListaDeVariables> | <ListaDeVariables> ::= <Variable> | <ListaDeVariables> , <Variable> <Variable> ::= <Letra> | <Variable> <Alfanumrico> <Alfanumrcio> ::= <Letra> | <Dgito> <Letra> ::= a | b | ... | y | z <Dgito> ::= 0 | 1 | ... | 8 | 9 <Sentencia> ::= <SentenciaDeAsignacin> | <SentenciaDeRetorno> | <SentenciaDeImpresin> | <SentenciaNula> | <SentenciaCondicional> | <SentenciaWhile> | <Bloque> <SentenciaDeAsignacin> ::= <Variable> := <Expresin> <Expresin> ::= <Expresin> <OperadorBinario> <Expresin> | <OperadorUnario> <Expresin> | ( <Expresin> ) | <Entero> | <Variable> | <Variable> (<ListaDeArgumentos> ) <OperadorBinario> ::= + | - | * | / <OperadorUnario> ::= <Entero> ::= <Dgito> | <Entero> <Dgito> <ListaDeArgumentos> ::= <ListaDeExpresiones> | <ListaDeExpresiones> ::= <Expresin> | <Expresin> , <ListaDeExpresiones> <SentenciaDeImpresin> ::= PRINT <ListaDeImpresin> <ListaDeImpresin> ::= <ElementoDeImpresin> | <ListaDeImpresin> , <ElementoDeImpresin> <ElementoDeImpresin> ::= <Expresin> | <Texto> <Texto> ::= <Carcter> | <Carcter> <Texto> <Carcter> ::= <CarcterImprimible> | <CarcterEscapado> <CarcterImprimible> ::= Cualquier carcter ASCII imprimible <CarcterEscapado> ::= \n <SentenciaDeRetorno> ::= RETURN <Expresin> <SentenciaNula> ::= CONTINUE <SentenciaCondicional> ::= IF <Expresin> THEN <Sentencia> FI | IF <Expresin> THEN <Sentencia> ELSE <Sentencia> FI <SentenciaWhile> ::= WHILE <Expresin> DO <Sentencia> DONE <Bloque> ::= { <ListaDeDeclaraciones> <ListaDeSentencias> } <ListaDeDeclaraciones> ::= <Declaracin> <ListaDeDeclaraciones> | <Declaracin> ::= VAR <ListaDeVariables> <ListaDeSEntencias> ::= <Sentencia> | <ListaDeSentencias> <Sentencia>

Nombre: Cristian Garviso

Profesor: Wilson Castillo

También podría gustarte