Estoy escribiendo un analizador para archivos de configuración bastante complicados que utilizan sangría, etc. Decidí usar Lex para dividir la entrada en tokens, ya que parece facilitar la vida. El problema es que no puedo encontrar ningún ejemplo del uso de herramientas de informes de errores de Qi (on_error
) con analizadores que operan en la secuencia de tokens en lugar de caracteres.Boost.Spirit: informe de error Lex + Qi
El controlador de errores que se utilizará en on_error
requiere algunos para poder indicar exactamente dónde está el error en la secuencia de entrada. Todos los ejemplos solo construyen std::string
del par de iteradores y los imprimen. Pero si se usa Lex, los iteradores son iteradores de la secuencia de tokens, no de caracteres. En mi programa esto llevó a colgar en el constructor std::string
antes de que notara el tipo de iterador no válido.
Como lo entiendo token puede contener un par de iteradores a la secuencia de entrada como su valor. Este es el tipo de atributo predeterminado (si el tipo es como lex::lexertl::token<>
). Pero si quiero que mi token contenga algo más útil para el análisis (int
, std::string
, etc.), esos iteradores se pierden.
¿Cómo puedo generar mensajes de error que indiquen la posición en el flujo de entrada mientras utilizo Lex con Qi? ¿Hay algún ejemplo de tal uso?
Gracias.
@justsomebody gracias por la edición :) – sehe