analizador con alcances y condicionales

Estoy escribiendo un sistema de compilación C / C ++ / ... (entiendo que esto es una locura;)), y tengo problemas para diseñar mi analizador.

Mis "recetas" se ven así:

global
{
    SOURCE_DIRS src
    HEADER_DIRS include
    SOURCES bitwise.c \
            framing.c
    HEADERS \
            ogg/os_types.h \
            ogg/ogg.h
}
lib static ogg_static
{         
   NAME ogg
}
lib shared ogg_shared
{
    NAME ogg
}

(Esto se basa en el árbol fuente súper simple de libogg)

# son comentarios,\ son "escapes de línea nueva", lo que significa que la línea continúa en la línea siguiente (vea la sintaxis QMake).{} son ámbitos, como en C ++, y global son configuraciones que se aplican a cada "objetivo". Todo esto es de fondo, y noese relevante ... Realmente no sé cómo trabajar con mis ámbitos. Necesitaré poder tener múltiples ámbitos, y también una forma de procesamiento condicional, en las líneas de:

win32:DEFINES NO_CRT_SECURE_DEPRECATE

La función de análisis necesitará saber en qué nivel de alcance se encuentra y llamarse a sí misma cada vez que se aumenta el alcance. También existe el problema con la ubicación de las llaves (global { oglobal{ o como en el ejemplo).

¿Cómo podría hacer esto, usando Standard C ++ y STL? Entiendo que esto es mucho trabajo, y es exactamente por eso que necesito un buen punto de partida. ¡Gracias!

Lo que ya tengo es todo el ifstream y el almacenamiento interno de string / stringstream, por lo que puedo leer palabra por palabra.

Respuestas a la pregunta(4)

Su respuesta a la pregunta