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.