Pregunta

Estoy contemplando la idea de implementar un traductor XML usando un generador de compiladores, basado en el W3C's XML 1.1 especificación, que incluye una gramática EBNF completa.

Más precisamente, planeo usar Qi-yacc Porque quiero aprender esta herramienta. Será mi primera incursión para usar cualquier compilador de compilador.

El primer tipo de traducción que planeo implementar es muy sencillo: XML a S-EXPRS. Luego, planeo generalizar mi traductor, pero este no es el punto de mi pregunta.

¿Anticipas algún gran trampto para este tipo de proyecto? He leído que traducir XML usando su EBNF es una mala idea. Me pregunto porque. Y no es que el lenguaje QI ya tuviera un analizador XML, así que definitivamente no estoy buscando reinventar la rueda aquí.

¿Fue útil?

Solución

Ahora no tengo la razón por la cual se necesita contexto para analizar XML.

Pero QiyACC puede utilizar el contexto utilizando variables globales. Sería más limpio si pudiera pasar un estado, s, en el analizador, por ejemplo, o algo así. Esto no está en Qi, pero planeo implementar una característica de este tipo para Shen.

Entonces podría hacerse.

/Stefan

Otros consejos

No sé nada de Qiyacc, sin embargo, traducir un EBNF de XML a un analizador de descenso recursivo (RD) es más o menos sencillo. Uno solo necesita tener en cuenta el hecho de que hay lugares donde algunos pequeños ajustes para la gramática pueden tener un gran impacto de rendimiento en el analizador. Esto se debe a que las gramáticas están escritas con sucinto y claridad en mente, en lugar de tratar de evitar perseguir las reglas.

Hice algo como esto una vez en C ++ escribiendo la gramática de XML como un conjunto de tipos. Puedes ver un artículo que escribí sobre él en Proyecto de código. Los mismos principios básicos se pueden aplicar a cualquier idioma.

También le sugiero que mires a tu alrededor de las gramáticas de clavijas. Se extienden en EBNF al permitirle introducir afirmaciones de anchura cero, y son una excelente manera de aumentar una gramática EBNF para un analizador.

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