Estoy tratando de hacer un metalenguaje para escribir código de marcado (como xml y html) que se puede incrustar directamente en el código C/C++. Este es un ejemplo sencillo escrito en esta lengua, lo llamo WDI (Interfaz Web Development):Cómo construir eficientemente un intérprete (lexer + analizador) en C?
/*
* Simple wdi/html sample source code
*/
#include <mySite>
string name = "myName";
string toCapital(string str);
html
{
head {
title { mySiteTitle; }
link(rel="stylesheet", href="style.css");
}
body(id="default") {
// Page content wrapper
div(id="wrapper", class="some_class") {
h1 { "Hello, " + toCapital(name) + "!"; }
// Lists post
ul(id="post_list") {
for(post in posts) {
li { a(href=post.getID()) { post.tilte; } }
}
}
}
}
}
Básicamente se trata de una fuente en C con una interfaz fácil de usar para html. Como puede ver, el estilo tradicional basado en etiquetas se sustituye por el estilo C, con bloques delimitados por llaves. Necesito construir un intérprete para traducir este código a html y luego insertarlo en C, para que pueda ser compilado. La parte C permanece intacta. Dentro de la fuente de wdi no es necesario usar impresiones, cada declaración de retorno se usará para la salida (en la función printf). La salida del programa será código html limpio.
Así, por ejemplo, un 1 etiqueta de encabezado se transformaría así:
h1 { "Hello, " + toCapital(name) + "!"; }
// would become:
printf("<h1>Hello, %s!</h1>", toCapital(name));
Mi objetivo principal es crear un intérprete para traducir fuente WDI a html así:
tag(attributes) {content}
=><tag attributes>content</tag>
En segundo lugar, el código html devuelto por el intérprete debe insertarse en el código C con printfs. Las variables y funciones que ocurren dentro de wdi también deben clasificarse para usarlas como parámetros printf (el caso de toCapital (nombre) en la fuente de muestra).
Estoy buscando la forma eficiente (quiero crear un analizador rápido) para crear un lector y analizador para wdi. Ya probé flex y bison, pero no estoy seguro de si son las mejores herramientas. ¿Hay alguna buena alternativa? ¿Cuál es la mejor manera de crear dicho intérprete? ¿Puede aconsejar alguna breve literatura sobre este tema?
imho, flex y bison son probablemente las mejores herramientas para el trabajo. – ereOn
¿Realmente no está pidiendo un compilador WDI-> C? No parece que quiera ejecutar directamente el código WDI, sino convertirlo a C y luego alimentar el código C a un compilador de C. –
¡Eso es! WDI debería convertirse a C. Pero creo que la implementación sería similar, por lo que también me gustaría crear solo un intérprete para html solo para uso y pruebas. – Rizo