解决一些Bug:
一、 按回车出bug
二 、1+1=2 未完全解析就返回树了
三、1+(1-4 出错 因为刚开始由exp()->term()->factor()解析出1后,然后识别出+运算符后,继续解析(1-4 由于缺少右括号,这个expr()所返回的是NULL节点,那么添加到sumNode的时候就会出错!
四、1+(-)
解决1:
只需要在main中进行判断 if(!scanner.IsEmpty())
所以在扫描器中增加一个函数IsEmpty 进行判断
Scanner::Scanner(const std::string& buf) : buf_(buf), curPos_(0)
{
Accept();
isEmpty_ = (token_ == TOKEN_END);
}
bool Scanner::IsEmpty() const
{
return isEmpty_;
}
解决2:
bool Scanner::IsDone() const
{
return token_ == TOKEN_END;
}
main中
if (!scanner.IsEmpty())
{
Parser parser(scanner, calc);
status = parser.Parse();
if (status == STATUS_OK)
{
std::cout<<parser.Calculate()<<std::endl;
}
else
std::cout<<"Syntax Error."<<std::endl;
}
}
用状态来进行判断的话 就可以解决后面的问题!所以接下来的bug都已经被解决了。