购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 递归函数

程序本质上是递归的。例如,一个表达式通常由更小的表达式组成。因此,处理整个程序的自然方法是使用递归函数。作为递归函数的第一个例子,我们定义函数is_exp,如图1.3所示,该函数取任意一个值并判断它是否是 L Int 中的表达式。如果函数是使用与语法匹配情形相对应的序列定义的,并且每个case用例的主体对每个子节点进行递归调用,那么我们就说函数是通过 结构化递归 定义的。 我们定义了第二个名为is_stmt的函数,该函数用于识别值是否为一个 L Int 中的语句。最后,在图1.3中包含了is_Lint的定义,它判定AST是否为 L Int 语言的程序。一般来说,我们可以编写一个递归函数来处理语法中的每个非终结符。在图底部的两个例子中,第一个是 L Int 中的语句,第二个不是。

图1.3 L Int 语言递归函数示例,这些函数识别AST是否在 L Int KHHK0YRD8pZuCwDP7Bej05mRmNg9NAhpnb50ZnJz2ulnbsTSIaXUEEKkL/UfV58Y

点击中间区域
呼出菜单
上一章
目录
下一章
×