ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Idiomas y su especificación formal. Forma Backus-Naur


Enviado por   •  20 de Marzo de 2021  •  Prácticas o problemas  •  1.580 Palabras (7 Páginas)  •  98 Visitas

Página 1 de 7

   Bachelor of Science Honours Degree in Computer Science             Compiladores[pic 1][pic 2]

Unidad II: Idiomas y su especificación formal. Forma Backus-Naur.

[pic 3]

Notación de Backus-Naur

http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_Backus-Naur

La notación de Backus-Naur, también conocida por sus denominaciones inglesas Backus-Naur form (BNF), Backus-Naur formalismo Backus normal form, es un metalenguaje usado para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.

El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de programación de la computadora, de los sistemas de comando y de los protocolos de comunicación, así como una notación para representar partes de las gramáticas de la lengua natural (por ejemplo, el metro en la poesía de Venpa). La mayoría de los libros de textos para la teoría o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF.

Algunas variantes, tales como la Augmented Backus-Naur Form (ABNF) y la Extended Backus–Naur Form (EBNF), tienen su propia documentación.


La idea de transcribir la estructura del lenguaje con reglas de reescritura se remontan cuando menos al trabajo del gramático indio Panini (hacia el 460 a. C.), que la utilizó en su descripción de la estructura de palabras del idioma sánscrito (algunos incluso han sugerido renombrar BNF a Forma Panini-Backus). Lingüïstas estadounidenses como Leonard Bloomfield y Zellig Harris llevaron esta idea un paso más adelante al tratar de formalizar el lenguaje y su estudio en términos de definiciones formales y procedimientos (1920-1960).

Noam Chomsky, maestro de lingüística de alumnos de teoría de la información del MIT, combinó la lingüística y las matemáticas, tomando esencialmente el formalismo de Axel Thue como la base de su descripción de la sintaxis del lenguaje natural. También introdujo una clara distinción entre reglas generativas (de la gramática libre de contexto) y reglas transformativas (1956).

John Backus, un diseñador de lenguajes de programación de IBM, adoptó las reglas generativas de Chomsky para describir la sintaxis del nuevo lenguaje de programación IAL, conocido en la actualidad como ALGOL 58 (1959), presentando en el primer Congreso de Computación Mundial (World Computer Congress) el artículo "The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference".

Peter Naur, en su reporte sobre ALGOL 60 de 1963, identificó la notación de Backus como la Forma Normal de Backus (Backus Normal Form), y la simplificó para usar un conjunto de símbolos menor, pero a sugerencia de Donald Knuth, su apellido fue agregado en reconocimiento a su contribución, reemplazando la palabra "Normal" por Naur, dado que no se trata de una forma normal en ningún sentido, a diferencia, por ejemplo de la Forma Normal de Chomsky.

Una especificación de BNF es un sistema de reglas de derivación, escrito como:

<simbolo> ::= <expresión con símbolos>

donde <símbolo> es un no terminal, y la expresión consiste en secuencias de símbolos o secuencias separadas por la barra vertical, '|', indicando una opción, el conjunto es una posible substitución para el símbolo a la izquierda. Los símbolos que nunca aparecen en un lado izquierdo son terminales.


Ejemplo

Como ejemplo, considere este BNF para una dirección postal

<dirección postal> ::= <nombre_destinatario> <dirección> <apartado postal>

<personal> ::= <primer nombre> | <inicial> "."

<nombre_destinatario> ::= <personal> <apellido> [<trato>] <EOL>

                          | <personal> <nombre_destinatario>

<nombre_de_calle> ::= <personal> <apellido> [<trato>]

                          | <personal> <nombre_de_calle>

<dirección> ::= [<Acronimo>] <nombre de la calle> <número de la casa>

<EOL>

<Acronimo> ::= “Avda.” | “c/” | “Plza” | “Pº”

<nombre de la calle> ::= <calle> | <calle> <nombre_de_calle>

<calle> ::= <primer nombre>

<apartado postal> ::= <ciudad> "," <código postal> <EOL> |

                        <código postal> <ciudad> <EOL>

<ciudad> ::= <primer nombre> | <primer nombre> <ciudad>

Nota:  Si añado esta producción permitiría tener direcciones con número de casa “sn” o “s/n”  (sin número)

<número de la casa> ::=  (1-9)(0-9)* | “sn” | “s/n”

Ejemplo:  Según este par de reglas vamos a deducir los nombres válidos y no válidos para incluir en direcciones postales.

<personal> ::= <primer nombre> | <inicial> "."

<nombre> ::= <personal> <apellido> [<trato>] <EOL>

...

Descargar como (para miembros actualizados)  txt (9.9 Kb)   pdf (1 Mb)   docx (356.8 Kb)  
Leer 6 páginas más »
Disponible sólo en Clubensayos.com