`
oldrev
  • 浏览: 233790 次
  • 性别: 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!

相关推荐

    u3d apk 资源 代码 反编译工具

    当使用Unity创建的应用程序被打包成apk文件时,其中的资源和代码通常会被编译为特定格式,如.assets文件存储资源,.dll文件包含代码。在某些情况下,开发者可能需要对这些文件进行反编译,以进行逆向工程、学习或...

    java 中间代码生成 编译原理

    Java中间代码生成是编程语言编译过程中的一个重要环节,它涉及到编译原理的多个核心概念。在Java的编译过程中,源代码首先被解析成抽象语法树(AST),然后通过词法分析和语法分析转化为更易处理的中间代码。这个...

    编译原理虎书随书代码

    这本书的随书代码包含了实现编译器所需的关键算法和数据结构,对于理解和学习编译原理具有极大的价值。 一、编译器概述 编译器是将高级编程语言转换为机器可执行代码的软件。它主要由词法分析器、语法分析器、语义...

    d-gui反编译

    "d-gui反编译"工具就是这样一个专门针对Java程序的反编译工具,它允许用户查看Java字节码背后的源代码,即使原始源代码不可用。 反编译的概念源于软件开发和安全领域,它通常被用来研究已有的二进制代码,例如找出...

    编译原理 代码优化

    ### 编译原理中的代码优化技术详解 #### 一、代码优化概述 代码优化是编译原理中的一个重要组成部分,旨在提高生成的机器代码的效率,包括执行速度和内存占用。优化通常发生在编译过程的不同阶段,如语法分析、...

    jad代码反编译

    3. **反编译整个目录**:如果你需要反编译一个包含多个类的目录,可以使用`jad -d <output_directory> <input_directory>`命令,其中`<output_directory>`是存放反编译结果的目录。 **jad的特性** 1. **代码恢复**...

    hbks.rar_三地址代码_编译 三地址_编译 原理 三地址 代码

    《编译原理与三地址代码详解》 在计算机科学领域,编译原理是研究如何将高级编程语言转换为机器可理解的低级语言——机器代码的关键学科。其中,三地址码(Three-Address Code,TAC)是一种中间表示形式,广泛应用...

    编译原理中间代码生成器

    编译原理课程词法分析器,语法分析器(递归实现),中间代码生成;

    srs海思3531d交叉编译.7z

    描述中的 "已经修改好的3531d交叉编译源码+交叉编译文档" 暗示该压缩包包含了两个关键部分:针对海思3531D优化的SRS源代码以及一份详述如何进行交叉编译的文档。这意味着用户无需从头开始配置编译环境,可以直接使用...

    Unity3d U3D C#反编译工具Reflector

    ### Unity3d U3D C#反编译工具Reflector #### 一、Reflector简介与功能 Reflector是一款强大的.NET反编译工具,能够帮助开发者解析和理解其他程序员编写的.NET程序集(Assembly)。在Unity3d开发环境中,Reflector...

    编译原理 pl0源代码

    在编程领域,编译原理是理解计算机语言转换过程的关键学科,它涉及词法分析、语法分析、语义分析以及代码生成等步骤。PL/0是一种简单的编程语言,由Alfred V. Aho、Monica S. Lam、Ravi Sethi和Jeffrey D. Ullman在...

    TINY 编译C代码

    1. **词法分析**:这是编译的第一步,它将源代码分解成一个个被称为“词法单元”或“标记”的小单元。例如,识别出关键字、标识符、运算符和常量。 2. **语法分析**:接着,编译器通过解析词法单元,根据语法规则...

    APPLEM2-2.5D引擎源码编译教程

    在本教程中,我们将深入探讨如何编译APPLEM2,这是一个专为2.5D游戏设计的引擎。这个过程对于游戏开发人员、程序员以及对游戏引擎感兴趣的任何人都至关重要,因为它允许他们自定义引擎以适应特定需求,优化性能,或...

    编译原理pl0源代码

    这对于想要深入学习编译技术或者开发自己编译器的人来说,是一个极好的实践项目。 在学习过程中,可以逐步剖析每个模块的功能,对比理论与实践的差异,从而更好地掌握编译原理的知识。同时,这份源代码也是检验理论...

    反编译Apk得到Java源代码

    2. 打开命令窗口,输入apktool d C:\*.apk C:\*文件夹,反编译apk文件。 3. 打开C:\*文件夹,就可以得到我们学院的各种资源了。 在这个过程中,apktool工具将apk文件反编译成各种资源,包括源代码、图片、XML配置、...

    apk反编译得到源代码

    反编译Apk得到Java源代码 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:...

    利用bat反编译jar包生成源码jar包

    标题中的“利用bat反编译jar包生成源码jar包”指的是通过批处理脚本(BAT)配合反编译工具,将已有的Java字节码(JAR包)转换为源代码并打包成新的JAR包的过程。这个过程通常用于没有源代码但需要查看或修改JAR包...

    编译原理实验报告——生成中间代码

    【编译原理实验——生成中间代码】实验报告 在编译原理的学习中,生成中间代码是编译器设计的关键步骤之一。本实验旨在通过程序设计实现对简单的赋值语句和算术表达式文法G[A]的中间代码四元式生成。中间代码是一种...

    金蝶BOS中安装JAVA反编译插件

    在金蝶BOS中安装JAVA反编译插件是指在BOS平台上安装和配置JAVA反编译插件,以便在BOS中对Java类文件进行反编译和查看源代码的操作。下面是该过程的详细步骤和知识点: 1. 获取反编译插件文件 在安装JAVA反编译插件...

    小程序反编译脚本下载,从此小程序源码就是囊中取物了

    “反编译”是指将已编译的字节码或机器码转换回人类可读的源代码的过程,对于理解小程序的工作原理和保护代码安全具有重要意义。“源码”则意味着通过反编译,我们可以看到小程序的原始编写语言(通常是JavaScript、...

Global site tag (gtag.js) - Google Analytics