wattpad tag responder para c++ parsing boost c++11 boost-spirit

c++ - wattpad - tags para responder



¿Se puede usar el espíritu Boost.Espirit/prácticamente para analizar C++(0x)(o cualquier otro idioma)? (3)

¿Teóricamente está a la altura de la tarea?

¿Se puede hacer en la práctica y se usaría el analizador resultante con un rendimiento y salida suficientes (por ejemplo, LLVM IR o el gimple de GCC) para integrarlos en un compilador de la competencia?


Lo siento. Hablé con su autor y él dijo que no lo haría analizar C ++ completamente, pero admite que lo acepta para analizar ciertas construcciones como ambiguas.

Así que esto ya no es una respuesta !!

Te recomiendo que eches un vistazo al scalpel . Desde su página de inicio.

El bisturí es la base de un análisis, un análisis y una biblioteca. Esta es una biblioteca de C ++ que tiene como objetivo realizar una sintaxis completa y un análisis semántico de cualquier programa de C ++.

Y

Lo que me hace pensar que Scalpel podría ser aceptado en Boost

Scalpel utiliza varias bibliotecas de Boost: Spirit, Wave, shared_ptr (ahora en STL de C ++ 0x), Opcional, Prueba, etc. En realidad, utiliza exclusivamente las bibliotecas de Boost y la biblioteca estándar de C ++, que Boost requiere.

Además, Boost ya proporciona una biblioteca de preprocesamiento de código fuente C ++ basada en Spirit: Wave. Incluir una biblioteca de análisis de código fuente de C ++ parece ser una evolución natural.


No. C ++ es demasiado difícil de analizar para la mayoría de las herramientas automáticas, y en la práctica generalmente se analiza a través de analizadores escritos a mano. [Editar 1-Mar-2015: Se agregó ''más'' y ''generalmente''.]

Entre los problemas difíciles están:

  • A * B; que podría ser la definición de una variable B con tipo A* o simplemente la multiplicación de dos variables A y B.
  • A < B > C > D ¿Dónde termina la plantilla A<> ? Las reglas habituales de ''max-munch'' para analizar expresiones no funcionarán aquí.
  • vector<shared_ptr<int>> donde la >> termina dos plantillas, lo que es difícil de hacer con un solo token (y se permite un espacio intermedio). Pero en 1>>15 no se permite espacio.

Y apuesto a que esta lista está lejos de ser completa.

Adición : la gramática está disponible, pero es ambigua y, por lo tanto, no es válida como entrada para herramientas como Spirit.

Actualización 1-Mar-2015 : Como Ira Baxter, un conocido experto en este campo, señala en los comentarios, hay algunos generadores de analizadores que pueden generar un analizador que generará todo el bosque del analizador. Que yo sepa, seleccionar el análisis correcto aún requiere una fase semántica. No tengo conocimiento de ningún generador de analizador no comercial que pueda hacerlo para la gramática de C ++. Para más información, vea esta respuesta .


Para "cualquier otro idioma", una vez intenté crear un analizador de shell script con Spirit. Resultó ser teóricamente posible (creo que funcionaría), pero no era compilable en una máquina con 1 GB de memoria, por lo que finalmente me rendí.