编译原理 ML语言的初次接触(龙书)

ML语言支持嵌套的函数声明。也就是说将函数作为参数,并把函数当作值返回。

在这里插入图片描述

直接上代码

fun main()
{
    let
        fun fib0(n) =
            let
                fun fib1(n) =
                    let
                        fun fib2(n) = fib1(n-1) + fib2(n-2)
                    in
                        if(n >= 4) then fib2(n)
                        else fib0(n-1) + fib0(n-2)
                    end
            in
                if n >= 2 then fib1(n)
                else 1
            end
    in
        fib0(4)
    end;
}

如果这段代码没看懂,希望下面这段话能够帮到你。
对于ML语言,函数是可以嵌套定义的,(这就和我们之前学过的c和java都不一样),所以可以咋一看不好理解。函数都是由函数名函数体组成,ML语言的函数体由“ let——in——end ”共同组成。
下面这张图片可以帮你更好的理解上面的代码:
在这里插入图片描述

当你看懂上面这张图片,我们就可以分析这个main函数的执行过程。
当我们看一个函数时,首先要看函数体的三个部分的in部分(注意不是先看let部分) ,in中的代码一般是仅声明要调用哪个函数,然后再去let中去调用这个函数。

完整分析过程如下:
1.先进入main函数,然后看红色的in部分:fib0( 4 );
2.然后去main()的let块去找fib0函数(图中绿色部分),进入fib0函数,同样这个函数的in部分(绿色的in):满足if条件,执行fib1( 4 );
3.去fib0函数的let部分找fib1函数(蓝色部分),进入fib1函数,先看in部分(蓝色的in),满足if语句,执行fib2函数,然后去fib1函数的let部分。此时执行fib1(3) + fib1(2);

先算fib1(3),,我们再去找fib1函数,然后是fib1的in部分,满足else语句。执行fib0(2)+fib0(1);

先求fib0(2),找到fib0函数,满足if语句,执行fib1(2);
找fib1函数,进入蓝色in部分,满足else,执行fib0(1)+fib0(0);

先求fib0(1),找到fib0函数,进入绿色in部分,满足else,结束这个fib0(1)函数;
再求fib0(0),找到fib0函数,同样满足else,结束这个fib0(0)函数;

再求上面剩下的fib0(1),找到fib0函数,满足else,结束这个fib0(1)函数;

注意,上面还剩下一个函数没有处理,fib1(2),进入fib1,满足else,接着执行fib0(1)+fib(0),因为上面的步骤已经执行过这句代码,不再赘述。

至此,本文结束。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《编译原理第三版龙书》是一本经典的编译原理教材,广泛被国内外大学所采用。该教材以清晰简练的语言,全面系统地介绍了编译器的原理和实现方法。 该书内容包括了编译器的各个环节,如词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。每个环节都讲解了相关的理论知识,并通过实例深入探讨了各个概念和技术的具体应用。 与前两版相比,第三版对内容进行了全面更新和补充。特别是在词法分析和语法分析的部分,增加了更多最新的技术和算法,如正则表达式、自上而下和自下而上的分析方法、语法制导翻译等。此外,该书还在语义分析和目标代码生成的章节中介绍了常用的语言处理工具,如Yacc和Lex。 除了理论知识的讲解外,该书还包含了大量的实例和习题。这些练习和实例旨在帮助读者更好地理解和应用所学的知识。通过完成这些习题,读者可以加深对编译原理的理解,提高解决实际问题的能力。 总而言之,编译原理第三版龙书是一本权威的编译原理教材,无论是对于学习编译原理的学生还是从事编译器开发的工程师,都是一本不可或缺的参考书。它不仅详细介绍了编译器的原理和实现方法,而且通过实例和习题的形式提供了很好的学习和练习机会。 ### 回答2: 《编译原理(第三版)龙书》是一本经典的编译原理教材,全名为《编译原理》(原书第三版)。这本书由Alfred V. Aho、Monica S. Lam、Ravi Sethi和Jeffrey D. Ullman合作编写,系统地介绍了编译原理的相关内容。 龙书详细讲解了编译原理的基本概念和原理,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个方面。书中使用了大量的例子和算法描述,帮助读者理解和掌握编译原理的核心知识。 《编译原理》(第三版)龙书的PDF版本,即电子书版本,是广大学生和编译原理爱好者广泛使用的资源之一。这个PDF版本可以方便地在各种电子设备上阅读,如电脑、平板和手机等。它拥有书籍的完整内容,配有书中的插图和代码示例,方便读者学习和实践。 值得一提的是,虽然这本书被称为龙书,但它的书名实际上是《编译原理》(原书第三版)。之所以被称为龙书,是因为封面上绘有一条龙,这成为了它的代称。 总之,《编译原理》(第三版)龙书的PDF版本是学习编译原理的一个很好的资源,通过阅读和实践,能够帮助读者全面理解编译原理的基本概念和原理,并能够应用于实际的编译器开发和优化工作中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值