我正在尝试制作一种用于编写可以直接嵌入到 C/C++ 代码中的标记代码(例如 xml 和 html)的元语言。这是一个用这种语言编写的简单示例,我称之为 WDI(Web 开发接口):
/*
* 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; } }
}
}
}
}
}
基本上它是一个修改过的 C 源代码,具有用户友好的 html 界面。如您所见,传统的基于标签的样式被类似 C 的命令所取代,块由花括号分隔。我需要构建一个解释器来将此代码翻译为 html 并将其插入到 C 中,以便可以对其进行编译。C部分保持完整。在 wdi 源内部,不需要使用打印,每个 return 语句都将用于输出(在 printf 函数中)。该程序的输出将是干净的 html 代码。
因此,例如标题 1 标记将被转换为:
h1 { "Hello, " + toCapital(name) + "!"; }
// would become:
printf("<h1>Hello, %s!</h1>", toCapital(name));
我的主要目标是创建一个解释器来将 wdi 源转换为 html,如下所示:
tag(attributes) {content}
=><tag attributes>content</tag>
其次,解释器返回的 html 代码必须用 printfs 插入到 C 代码中。wdi 中出现的变量和函数也应该进行排序,以便将它们用作 printf 参数(示例源中的 toCapital(name) 的情况)。
我正在寻找有效的(我想创建一个快速的解析器)方法来为 wdi 创建一个词法分析器和解析器。已经尝试过 flex 和 bison,但我不确定它们是否是最好的工具。有什么好的选择吗?创建这样的解释器的最佳方法是什么?你能推荐一些关于这个问题的简短文献吗?