让D代码自己编译自己

阅读更多

刚在 D语言的新闻组里看到了D模板&元编程顶尖高人 Don Clugston 的新作——Compile time lex + parse + semantic = 300 lines of code 一个用300行代码就实现的D语言编译时词法解析、语法解析、语义分析器,换句话说就是一个非常简单的编译器前端。

当然了,这也不是什么新技术,C++ 借助一些模板递归也能实现出像 boost.spirit/boost.phoenix 这样的语法分析器,但是这个语法分析器只是在编译时生成,却不能在编译时运行。而 Don 的实现,借助了D 编译时函数执行(CTFE)的强大功能,能在编译时就完成解析,真是不可思议。

Don 给出的例子:


D 代码
  1. import SyntaxTree;  
  2.   
  3. const foo = “abc”;  
  4. int bar(real x, char [] s) { return 0; }  
  5. struct Duck{};  
  6. Duck duck;  
  7.   
  8. AbstractSyntaxTree a = mixin(syntaxtreeof(`foo*   bar(2.18_3242e+45L, “xyz”) in duck`));   

这段代码在编译时,a 是一个编译时的常量,表达式`foo*   bar(2.18_3242e+45L, “xyz”) in duck`将被解析为 a 的子节点。

D快变成脚本了,不是吗?

你可能感兴趣的:(D语言,编程,脚本,C,C++)