visual-decaf / decaf-compiler

Compiler of decaf language
1 stars 3 forks source link

添加类型系统 #43

Closed DistinctWind closed 1 year ago

DistinctWind commented 1 year ago

添加了类型的基础设施

目前的想法是,在抽象语法树构建过程中计算S-Attribute。类型刚好就是S-Attribute,可以在抽象语法树的构造过程中计算。

DistinctWind commented 1 year ago

现在虚拟机的运行结果已经变为

    using result_type = std::variant<std::monostate, int, double, bool>;

访问结果类型,需要调用者自己处理可能的变体。详见单元测试添加的部分

DistinctWind commented 1 year ago

新问题,下面实现浮点数,那虚拟机中浮点数应该跟整数共享指令PLUS吗?也就是说让PLUS指令既能处理整数也能处理浮点数?

按照正常的CPU设计来说,浮点数和整数的处理应该是分开的。所以我比较想加上新指令FLOAT_PLUS来确保类型安全。

DistinctWind commented 1 year ago

这个虚拟机实现现在不能汇报错误,虚拟机会假设我们的程序输入是完全正确的。一旦程序有错,将会抛出异常(而我们还没有手段处理这个异常)。

所以在现在的情况下,暂时没办法把程序的编写权限交给用户。