BD4SUR

Results 9 issues of BD4SUR

如题:梳理并资源化所有报错信息。

enhancement

**特性描述**:见R5RS对准引用的描述。 **实现思路**:①Parser、Analyser和Compiler都需要做修改;②需要恰当处理单个符号(变量)的unquote情形,尤其是Analyser中需要区分因嵌套层数不同,而导致unquote在unquote和variable之间变化的情况。例如:`(quasiquote ,a)`和`(quasiquote (quasiquote ,a))`两个qq中,`,a`应当被分别解释成变量和符号。作为变量的`a`,应当作未定义的检查。

enhancement

如题,需要交互式的REPL。 进一步的思考记录在下面。

enhancement

**特性描述**:增加非递归的、直接的循环结构`(while condition body)`。这个特性应当优先实现,因为该结构无法通过宏构造出来。 **实现思路**:①将`while`设置为关键字;②编译器将其作为特殊结构,使用现有的AIL指令集直接编译为AIL代码。

enhancement

**特性描述**:支持`+`等基本运算符传入多于2个的参数,以实现不定长参数列表。 **实现思路**:此特性不紧急,未来将使用宏实现。进一步地,将所有算术逻辑运算符封装为宏。

enhancement

**特性描述**:增加`this`特殊变量,这一变量的值,①为它所出现的词法Lambda节点的把柄。②为运行时确定的所在闭包的把柄。 **实现思路**:这一特性涉及反射,需要通盘考虑。目前的想法是:若值为闭包,则返回`currentClosureHandle`。若值为Lambda节点把柄,则静态分析阶段作替换。 需要考虑`this`①能否用来模拟面向对象特性;②能否用来实现`define`;③能否用来实现匿名函数递归进而实现`(function ..)`特殊结构。等等。

enhancement

**特性描述**:增加`(var )`,用于声明一个变量``(即建立当前词法作用域上的一个约束变量绑定),并用``参数初始化其值。新声明的变量在作用域内是全局有效的,这类似于JavaScript的`var`变量声明,以及RnRS规定的`letrec`。 为什么要增加这个结构?因为`(set! var val)`只能修改**已绑定**的变量为已求值的右值参数,而`(define var init)`的右值参数只能是**未经求值**的词法节点把柄/立即值/函数所在IL代码的标签。二者的功能某种程度上是正交的,这一点与RnRS中定义的有所不同。 **实现思路**:接续执行`define`和`set!`。在实现卫生宏之前,在编译器层面实现之。

enhancement

**特性描述**:计划增加3条指令,使AVM可执行不具有闭包特性的非一等函数(例如C、Java等语言的函数、方法等)。3条指令分别为: - `invoke ` 执行``处定义的函数。 - `setlocal ` 将OP栈顶对象保存到位于栈帧的局部变量中。 - `getlocal ` 从栈帧中取出局部变量的值,并压入OP栈顶。 还需要加入全局变量操作指令。 **实现思路**:①栈帧增加局部变量字段。②或者`invoke`的栈帧并不与`call`共用同一类栈帧。

enhancement

**特性描述**:目前,变量名是直接以原始形式被保留在编译得到的AIL代码中,这很冗长,且字符串形式的变量名并不利于后续的处理。因此,有必要将IL代码中出现的变量,全部替换为全局唯一的数字形式(变量编号),这样VM就可以使用数组之类的简单数据结构去实现闭包,也便于以后用C语言实现VM。 **实现思路**:在适当位置保留变量名与变量编号的映射表,也就是所谓的符号表。

enhancement