.\icu

Blog of @megakite.


January 1, 0001

原来我在迭代化的时候写的this_*都是没用的……行吧,后序遍历太强大了。

这个call带返回值的设计说实话,有点难搞。

我的符号表dedent操作写得还有点问题,改了一下,设计又精妙了一点,同时又hacky了一点……

草啊,我就说怎么符号类型不对,原来是复制粘贴的时候忘记改tag了,我裂开。

然后符号表的查找还有点问题:引入全局符号之后,同义词的第一项不一定是当前符号,于是还要先往后找。不过事实上用不着改太多东西,只要改一下那个蹩脚的仿C++迭代器idiom就可以了。

接着又有问题:last_item全局会导致indentget没有任何问题,但是dedent有问题……我就说怎么从哪漏了180B的内存出来。pair解决。

然后就是写得非常、非常、非常丑的库函数初始化器。

全局变量倒是好解决:因为符号表第0层有且仅有1个scope,这就意味着在语义分析阶段直接顺次向下处理Decl和FuncDef就可以了——因为没找到的要么就是没有,要么就是在下面还没迭代到。

出现了一个reduce/reduce conflict?但是看不太懂,不太清楚怎么解决。

答案是BType->TYPEFuncType->TYPE……然后我去看了下kira-rs的实现,直接用"int"了,压根没写成非终结符,行吧。

事实证明我的这个寄存器分配算法是非常、非常、非常蠢的:它竟然是贪心和online的……然后真的是写了一堆我都不知道是什么东西的东西。算了,就这样吧,写都写了。

然后它是以基本块为单位的,也就是说我又得把哈希表key改一下,继续当人肉模板生成器。