2008-12-13 42 views
9

Extended Backus-Naur Form: EBNF¿Dónde puedo obtener material para aprender EBNF?

yo soy muy nuevo para analizar conceptos. ¿Dónde puedo obtener lo suficientemente fácil de leer y seguir material para escribir una gramática para la biblioteca boost :: spirit, que usa una gramática similar a EBNF?

Actualmente estoy buscando en EBNF de Wikipedia.

Respuesta

4

El artículo de Wikipedia es fiel. Si tiene acceso, definitivamente lea Wirth's original article en EBNF.

Lo otro que debe saber es que EBNF fue diseñado para hacerlo fácil de escribir a mano los analizadores sintácticos de descendencia recursiva para los idiomas en los que cada construcción sintáctica tiene palabras clave de identificación al principio. Las llaves se traducen en while bucles; corchetes (material opcional) se traduce a if, y las alternativas se traducen en if-then-else o case declaraciones. Si tiene el lujo de diseñar su idioma de esta manera, puede eliminar un analizador rápidamente y dar buenos mensajes de error.

El único lugar que se vuelve un poco tedioso es cuando tienes un lenguaje en el que hay operadores infijo con muchos niveles de precedencia diferentes. Para eso, quiere el documento de Dave Hanson Compact Recursive-Descent Parsing of Expressions. Tal vez la serie de informes técnicos de Princeton tiene una versión gratuita, y siempre puedes mirar el código en Hanson's C front end.

+1

Realice la búsqueda de "Compilador Construcción Niklaus Wirth", debe devolver un enlace a donde puede descargar libremente la última versión de su excelente libro. O echa un vistazo a su página de inicio http://www.cs.inf.ethz.ch/~wirth/ –

0

Bueno, creo que la Wikipedia es la forma más simple, por dos razones:

  • Establece los puntos más relevantes sobre el artículo
  • Se tiene enlaces para leer más al pie de la página

También sugiero que leas standart BNF solo para familiarizarte con la idea que hay detrás.

Al menos siempre empiezo con Wikipedia, y casi siempre ayuda.

1

Here es un analizador de ebnf en php.

Además, aprender un poco sobre cómo se implementan los motores de expresiones regulares podría ayudar. Pruebe: re2.

Cuestiones relacionadas