6

Han pasado algunos años desde mi clase de informática y olvidé los detalles de BNF y EBNF y no tengo un libro de texto a mi lado. Específicamente, he olvidado cómo convertir un EBNF en BNF.Convirtiendo EBNF a BNF

Por lo poco que recuerdo, sé que uno de los puntos principales es convertir { term } en <term> | <many-terms>. Pero no recuerdo las otras reglas. Intenté buscarlo en línea, pero solo puedo encontrar enlaces a preguntas sobre tareas o un pequeño comentario sobre cómo convertir términos con llaves. No puedo encontrar una lista exhaustiva de reglas que definan la traducción.

Respuesta

16

consulte el siguiente enlace, que contiene instrucciones para cada producción que necesita ser convertida:

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

Para analizadores de construcción (especialmente de abajo hacia arriba) una gramática BNF es a menudo mejor, que EBNF. Pero es fácil de convertir una gramática EBNF a BNF:

  • Convertir cada repetición { E } a un no terminal fresca X y añadir

    X = ε | X E. 
    
  • Convertir todas las opciones [ E ] a un no terminal fresca X y añadir

    X = ε | E. 
    

    (podemos convertir X = A [ E ] B.-X = A E B | A B.)

  • Convertir todos los grupos (E) a un no terminal fresca X y añadir

    X = E. 
    
  • Incluso podemos acabar con las alternativas al tener varias producciones con el mismo no terminal.

    X = E | E'. convierte X = E. X = E'.

+0

perfecto! Eso es exactamente lo que necesito. ¡Alguien que nunca encontré ese enlace! –

+1

Obtengo un 404 en ese enlace ahora ... ¿Alguna idea de si hay una versión actualizada en alguna parte? – Steve

+0

Por desgracia, no en la parte superior de mi cabeza. Con suerte, la página volverá. –