`
oldrev
  • 浏览: 229906 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

让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快变成脚本了,不是吗?

分享到:
评论
5 楼 sofire 2007-09-17  
看不懂:(
4 楼 achun 2007-09-16  
脚本
3 楼 ideage 2007-09-13  
Don Clugston  超级牛人!
2 楼 qiezi 2007-09-12  
1 楼 oldrev 2007-09-12  
Pypy!

相关推荐

Global site tag (gtag.js) - Google Analytics