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

2.9 挑战: L Var 的部分求值器

本节描述两个可选的具有挑战性的练习,它们涉及调整和改进1.6节中介绍的 L Int 语言的部分求值器。

习题2.7 调整1.6节(图1.5)中的部分求值器,使其适用于 L Var 程序而不仅是 L Int 程序。回想一下, L Var 语言将变量和赋值添加到 L Int 语言中,因此需要在pe_exp和pe_stmt函数中添加相应情形的处理。完成后,将部分求值编译遍添加到编译器的前端,并检查编译器是否仍然能通过所有测试。

习题2.8 通过将pe_neg和pe_add辅助函数替换为更通晓算术的函数来改进部分求值器。例如,部分求值器需要将

翻译为

要做到这一点,pe_exp函数应该以下面语法的非终结符 residual 的形式产生输出。其思想是,在处理加法表达式时,我们总是可以生成以下情况之一:整数常数,左边有整数常数但右边没有整数常数的加法表达式,或者两个子表达式都不是常数的加法表达式。

pe_add和pe_neg函数可以假定它们的输入是 resdiual 表达式 ,并且它们应该返回 resdiual 表达式 。完成改进后,确保编译器仍然能够通过所有的测试。毕竟,如果生成不正确的结果,更快的代码也是无用的! P8VVXfdm2csZ5J/9F414hasjh/Vsf9whaD51D+FII7tdKHGhfW2dw3SeRjXGwGFr

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