Skip to content

Latest commit

 

History

History
20 lines (18 loc) · 1.4 KB

report-PA4.md

File metadata and controls

20 lines (18 loc) · 1.4 KB

PA3 实验报告

2018011289 包涵

实验简述

  • 扩展call
    • 首先修改LocalVarDef,让函数对象初始化为指向大小为8的内存区域的指针
    • 修改varsel,让varsel在select到函数时,返回函数对象的指针,包括函数指针和可选的this
    • 修改call,直接利用函数对象进行函数调用
  • 方法名当作函数使用
    • 修改varsel,让varsel对于各种情况都可以正确返回一个函数对象
  • lambda表达式
    • 首先生成lambda表达式对应的函数,利用lambda表达式栈和参数栈,中断当前函数的parsing,生成lambda表达式之后,再恢复对当前函数的parsing
    • 然后生成lambda函数的对象,包括函数指针、可选的this和捕获变量,将生成的函数对象返回
    • 根据Call的种类和传递的类型信息,决定调用的方式,相应修改传递参数的方式和数量
    • 相应修改this和varsel在lambda表达式中的行为

挑战和解决方法

  • pa2的实现细节已经忘了,这次又要对pa2的代码做很多的修改,包括确定捕获变量、传递更丰富的类型信息等,非常痛苦,又复习了一边pa2的代码
  • 对rust语言的特性不熟悉,导致很久都没有找到在ast中记录捕获变量的合适的数据结构,最终用了refcell才得以实现
  • 没有完全看懂文档,只好部分按照自己的思路来实现,可能是出现bug的原因。