我正在尝试创建一种用于编写标记代码的元语言(例如xml和html),它可以直接嵌入到C/C++代码中.
这是一个用这种语言编写的简单示例,我称之为WDI(Web开发接口):
这是一个用这种语言编写的简单示例,我称之为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源代码内部没有必要使用print,每个return语句都将用于输出(在printf函数中).
该程序的输出将是干净的HTML代码.
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,但我不确定它们是否是最好的工具.有什么好的选择吗?创建这样一个解释器的最佳方法是什么?你能就这个问题提供一些简短的文献吗?
解决方法
如果您对此非常认真,那么您要做的是修改现有的C解析器.
Edison Design Group C Front End可能是一个选项,虽然它真的只想成为C(C)前端.
另一种选择是我们的DMS Software Reengineering Toolkit.DMS可以用C Front End获得,其中包含完全由语法驱动的完整C语法分析器.
DMS为构建语言方言提供直接支持,你想要做的是建立一个C方言,这样就可以支持你的目标. DMS还提供了许多用于构建翻译器的机器,因此将您的方言翻译成真正的C代码并将其发出相当容易.