代码生成器的弱智错误

中缀表达式计算的翻译存在严重问题,以前的想法是,右操作数计算结果放在%ebx中,左操作数结果放%eax,再根据运算符计算即可。但仔细想想便知道,计算左操作数时,仍可能用到%ebx,所以是不可行的。

现在是把左操作数的结果放在栈上,维护一个临时空间的表,表的大小根据需要的最多临时变量确定。

目前可以翻译了,递归函数也没问题。以上问题是由于用一个binary Euclid’s algorithm求最大公约数的算法做测试而发现的,呵呵。这个算法比较有个性,不同于常见的辗转相除法。具体见
http://www.cut-the-knot.org/blue/binary.shtml

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.