Pregunta

Para tener un sistema de documentación de propósito general que puede extraer la documentación en línea de múltiples idiomas, se necesita un analizador para cada idioma. Un generador de filtros (que en realidad no tiene por qué ser completa o eficiente) es, pues, necesario.

http://antlr.org/ es un generador de analizadores sintácticos agradable que ya tiene un número de gramáticas para populares idiomas. ¿Hay mejores alternativas es decir, más simples que los programas de análisis de generación de soporte para más idiomas fuera de la caja?

¿Fue útil?

Solución

Si sólo está buscando un "análisis parcial", entonces se podría usar la opción de antlr a una corriente parcial token "lex" e ignorar el resto de las fichas. Usted puede hacer que al permitir la filter=true en un analizador léxico-gramatical. El analizador léxico continuación, trata de combinar con cualquier prenda que definió en su gramática, y cuando no puede coincidir con una de las fichas, se avanza un solo carácter (y lo ignora) y luego otra vez intenta hacer coincidir uno de su ficha en el siguiente carácter :

lexer grammar Foo;

options {filter=true;}

StringLiteral
  :  ...
  ;

CharLiteral
  :  ...
  ;

SingleLineComment
  :  ...
  ;

MultiLineComment
  :  ...
  ;

Cuando se implementa correctamente, puede obtener los MultiLineComments (/* ... */) de un archivo Java con bastante facilidad, sin tener miedo de los comentarios de una sola línea y String o literales de char ensuciar las cosas.

Obviamente, los archivos de origen tienen que ser válidos para poder tokenize correctamente un archivo, si no se obtienen resultados extraños!

Otros consejos

Mi compilador utiliza Dypgen. Este es un programa de análisis GLR extenisble usuario con un montón de enriquecimientos por lo que puede analizar muchos idiomas. La gramática de arranque es como EBNF (soporta * + y? Directamente en sus producciones). Es lo suficientemente potente como para extensiones de carga dinámica, un hecho mis palancas del compilador:. La mayor parte de mi lenguaje de programación tiene su sintaxis carga dinámicamente en el arranque del compilador

Dypgen está escrito en Ocaml y genera código Ocaml.

Hay un analizador de C ++ GLR llamada Elkhound que es lo suficientemente potente como para analizar la mayor parte de C ++.

Sin embargo, para sus necesidades reales, que realmente no necesita hacer ningún análisis serio: un motor de expresión regular coincidente es probablemente lo suficientemente bueno. Googles re2 puede ser adecuado (proporciona más funcionalidad PCRE, mucho más rápido y con la interfaz de C ++).

A pesar de que esto es menos exacta, es lo suficientemente bueno porque se puede exigir que la documentación en línea se adhieren a algunos formatos simples. La mayoría de los documentos en línea existentes ya lo hacen precisamente por esta razón.

Donde trabajo solíamos usar ORO Analizador . Esto es mucho más simple que Antlr y soporta múltiples idiomas. ya hemos pasado a Antlr sin embargo, como que teníamos que hacer el análisis más complejo, lo cual nos pareció Antlr era mejor para que el oro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top