修复右结合绑定力错误

This commit is contained in:
2026-02-17 14:03:48 +08:00
parent 878157c2fc
commit 6b75e028ff
3 changed files with 26 additions and 22 deletions

View File

@@ -51,7 +51,7 @@ namespace Fig
{TokenType::PercentEqual, BinaryOperator::ModuloAssign},
{TokenType::CaretEqual, BinaryOperator::BitXorAssign},
{TokenType::Pipe, BinaryOperator::BitAnd},
{TokenType::Pipe, BinaryOperator::BitOr},
{TokenType::Ampersand, BinaryOperator::BitAnd},
{TokenType::ShiftLeft, BinaryOperator::ShiftLeft},
{TokenType::ShiftRight, BinaryOperator::ShiftRight},
@@ -137,22 +137,21 @@ namespace Fig
BindingPower GetBinaryOpRBp(BinaryOperator op)
{
/*
右结合,左绑定力 >= 右
a = b = c
a = (b = c)
a.b.c
*/
switch (op)
{
case BinaryOperator::Assign: return GetBinaryOpLBp(op);
case BinaryOperator::AddAssign: return GetBinaryOpLBp(op);
case BinaryOperator::SubAssign: return GetBinaryOpLBp(op);
case BinaryOperator::MultiplyAssign: return GetBinaryOpLBp(op);
case BinaryOperator::DivideAssign: return GetBinaryOpLBp(op);
case BinaryOperator::ModuloAssign: return GetBinaryOpLBp(op);
case BinaryOperator::BitXorAssign: return GetBinaryOpLBp(op);
case BinaryOperator::Power: return GetBinaryOpLBp(op);
/*
右结合,左绑定力 >= 右
a = b = c
a = (b = c)
*/
case BinaryOperator::Assign:
case BinaryOperator::AddAssign:
case BinaryOperator::SubAssign:
case BinaryOperator::MultiplyAssign:
case BinaryOperator::DivideAssign:
case BinaryOperator::ModuloAssign:
case BinaryOperator::BitXorAssign:
case BinaryOperator::Power: return GetBinaryOpLBp(op) - 1;
default:
/*