xml-parsing bison lexer flex-lexer

xml parsing - Analizador XML simple en bisonte/flex



xml-parsing lexer (2)

No creo que sea la mejor herramienta para crear un analizador xml. Si tengo que hacer este trabajo, lo haré a mano.

El código Flex contendrá: NUM coincidente entero en este ejemplo. La coincidencia STR coincide con cualquier cadena que no contenga un ''<'' o ''>''. STOP coincide con todas las etiquetas de cierre. COMIENCE las etiquetas de inicio del partido.

</?.*/?> { ;} <[a-z]+> { return START; } </[a-z]+> { return STOP; } [0-9]+ { return NUM; } [^><]+ { return STR; }

El código de Bison se verá como

%token START, STOP, STR, NUM %% simple_xml : START value STOP ; value : simple_xml | STR | NUM | value simple_xml ;

Me gustaría crear un analizador xml simple usando bison / flex. No necesito validación, comentarios, argumentos, solo <tag>value</tag> , donde value puede ser number, string u otro <tag>value</tag> .

Así por ejemplo:

<div> <mul> <num>20</num> <add> <num>1</num> <num>5</num> </add> </mul> <id>test</id> </div>

Si ayuda, conozco los nombres de todas las etiquetas que pueden aparecer. Sé cuántas etiquetas secundarias puede contener una determinada etiqueta. ¿Es posible crear un analizador de bisontes que haga algo como eso?

- new Tag("num", 1) // tag1 - new Tag("num", 5) // tag2 - new Tag("add", tag1, tag2) // tag3 - new Tag("num", 20) // tag4 - new Tag("mul", tag4, tag3) ... - root = top_tag

Etiqueta y número de sub-etiquetas:

  • num: 1 (solo valor)
  • str: 1 (solo valor)
  • agregar | sub | mul | div: 2 (num | str | tag, num | str | tag)

¿Podrías ayudarme con la gramática para poder crear AST como se indica arriba?


Para sus requisitos, creo que el sistema yax funcionaría bien. Del LÉAME:

El objetivo del proyecto yax es permitir el uso de YACC (Gnu Bison en realidad) para analizar / procesar documentos XML.

La pieza clave de software para lograr el objetivo anterior es proporcionar una biblioteca que pueda producir una secuencia de token léxica XML a partir de un documento XML.

Esta secuencia se puede envolver para crear una instancia de yylex () para alimentar los tokens a una gramática de Bison para analizar y procesar el documento XML.

Usando la secuencia más una gramática de Bison, es posible llevar al menos los siguientes tipos de actividades.

  1. Validar documentos XML,
  2. Analizar directamente documentos XML para crear estructuras de datos internas,
  3. Construir árboles DOM.