html – 如何在C中有效地构建解释器(词法分析器)?

前端之家收集整理的这篇文章主要介绍了html – 如何在C中有效地构建解释器(词法分析器)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一种用于编写标记代码的元语言(例如xml和html),它可以直接嵌入到C/C++代码中.
这是一个用这种语言编写的简单示例,我称之为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代码.

因此,例如标题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,但我不确定它们是否是最好的工具.有什么好的选择吗?创建这样一个解释器的最佳方法是什么?你能就这个问题提供一些简短的文献吗?

解决方法

如果您对此非常认真,那么您要做的是修改现有的C解析器. Edison Design Group C Front End可能是一个选项,虽然它真的只想成为C(C)前端.

另一种选择是我们的DMS Software Reengineering Toolkit.DMS可以用C Front End获得,其中包含完全由语法驱动的完整C语法分析器.

DMS为构建语言方言提供直接支持,你想要做的是建立一个C方言,这样就可以支持你的目标. DMS还提供了许多用于构建翻译器的机器,因此将您的方言翻译成真正的C代码并将其发出相当容易.

原文链接:https://www.f2er.com/html/227196.html

猜你在找的HTML相关文章