2011-03-14 10 views
5

Necesito un analizador de formularios de Backus-Naur (RFC 5234) de Augmented para validar algunos idiomas.Implementación de analizador ABNF de código abierto para Java?

Con el interés de no reinventar la rueda, preferiría utilizar una implementación de código abierto ya existente de ABNF Parser si ya existe.

Necesito fuente abierta porque me permite mantener el código según sea necesario.

¿Alguien sabe de alguna que existe?

+0

Si los idiomas que desea validar ya tienen las especificaciones ABNF, esta es una buena idea. Si no lo hacen, debería buscar un sistema generador de analizadores para el cual ya se codificaron y probaron varias definiciones de idioma. Me sorprendería encontrar muchas definiciones de lenguaje existentes en este formalismo en particular. –

+1

@IraBaxter RFC822 (correo electrónico), RFC2045 (MIME), RFC3501 (IMAP) ... de hecho, todos los RFC serios con los que he trabajado están en ABNF. – djechlin

+0

@djechlin: Interesante. ¿Cuántas de las implementaciones utilizan el ABNF directamente? –

Respuesta

2

Parse2 genera una fuente Java para un analizador de ABNF.

2

me han hecho la observación de que Parse2 (véase la respuesta de Ralph) viene con algunas limitaciones:

  • aparse no le gustan los comentarios y tienen que ser retirados manualmente antes de la generación de código
  • todo declaraciones que tenga que terminar con un ; al final de la línea
  • aparse no aplica las reglas "básicas" ABNF como se define RFC 5234 por lo que tienen que ser copiado del RFC si su gramática se basa en ellos
  • apar se no le gustan los bucles en la gramática (p. S --> NT1 NT2 T1 ; NT1 --> S | T2 ; ...) y podría encontrarse con bucles infinitos.

Estas observaciones han sido confirmadas por el desarrollador de Parse2. En resumen: Parse2 puede analizar un subconjunto de gramáticas ABNF, sin embargo, es muy probable que tenga problemas si encuentra una gramática ABNF existente e intenta alimentarla al software.

Si especifica las gramáticas ABNF usted mismo y mantiene estas limitaciones en mente, esta biblioteca debería funcionar para usted. Si tiene que trabajar con gramáticas ABNF existentes, es posible que tenga que esforzarse más en la gramática antes de generar el código.

PD: el código fuente de la biblioteca Parse2 no está disponible actualmente a pesar de que el código binario compilado (código de bytes de Java) está disponible libremente.

+0

buscó además generadores de analizadores ABNF y encontró [Java APG] [1] (produce código que requiere bibliotecas GPL v2 + para ejecutarse) y [abnf-analizador-generador] [2] (código generado no tiene licencia). Entonces, el mejor generador de analizador de Java que pude encontrar es [abnf-analizador-generador] ya que genera un analizador LR (1) [3] que es bastante poderoso. [1] http://www.coasttocoastresearch.com/ [2] https://github.com/bqluan/abnf-parser-generator [3] http://en.wikipedia.org/wiki/ Canonical_LR_parser – Ray

Cuestiones relacionadas