修复右结合绑定力错误
This commit is contained in:
@@ -122,12 +122,12 @@ namespace Fig
|
||||
|
||||
while (true)
|
||||
{
|
||||
token = currentToken();
|
||||
if (shouldTerminate())
|
||||
{
|
||||
return lhs;
|
||||
}
|
||||
|
||||
token = currentToken();
|
||||
if (IsTokenOp(token.type /* isBinary = true */)) // 是否为二元运算符
|
||||
{
|
||||
BinaryOperator op = TokenToBinaryOp(token);
|
||||
@@ -136,7 +136,7 @@ namespace Fig
|
||||
{
|
||||
// 前操作数的右绑定力比当前操作数的左绑定力大
|
||||
// lhs被吸走
|
||||
return lhs;
|
||||
break;
|
||||
}
|
||||
|
||||
const auto &result = parseInfixExpr(lhs);
|
||||
@@ -154,6 +154,7 @@ namespace Fig
|
||||
return lhs;
|
||||
}
|
||||
}
|
||||
return lhs;
|
||||
}
|
||||
|
||||
}; // namespace Fig
|
||||
@@ -34,7 +34,7 @@ namespace Fig
|
||||
|
||||
bool isEOF = false;
|
||||
|
||||
const Token &nextToken()
|
||||
Token nextToken()
|
||||
{
|
||||
assert(!isEOF && "nextToken: eof but called nextToken");
|
||||
if (index + 1 < buffer.size())
|
||||
@@ -57,12 +57,16 @@ namespace Fig
|
||||
return token;
|
||||
}
|
||||
|
||||
inline const Token &prevToken()
|
||||
inline Token prevToken()
|
||||
{
|
||||
if (buffer.size() < 2)
|
||||
{
|
||||
return currentToken();
|
||||
}
|
||||
return buffer[buffer.size() - 2];
|
||||
}
|
||||
|
||||
inline const Token ¤tToken()
|
||||
inline Token currentToken()
|
||||
{
|
||||
if (buffer.empty())
|
||||
{
|
||||
@@ -70,8 +74,8 @@ namespace Fig
|
||||
}
|
||||
return buffer.back();
|
||||
}
|
||||
|
||||
const Token &peekToken(size_t lookahead = 1)
|
||||
|
||||
Token peekToken(size_t lookahead = 1)
|
||||
{
|
||||
assert(!isEOF && "peekToken: eof but called peekToken");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user