private ExpressionAST ParseBinOpRHS(int expressionPrecedence, ExpressionAST LHS) { while (true) { int tokenPrecedence = GetPrecedence(parser.LastToken); if (tokenPrecedence < expressionPrecedence) { return(LHS); } string _operator = parser.LastToken.Value; parser.ProceedToken(); // 演算子を消費 var RHS = ParsePrimary(); RHS.IsReturnValueUsed = true; int nextPrecedence = GetPrecedence(parser.LastToken); if (tokenPrecedence < nextPrecedence) { RHS = ParseBinOpRHS(tokenPrecedence + 1, RHS); } LHS = new BinaryExpressionAST(LHS, RHS, _operator); } }
internal BinaryExpressionAST(ExpressionAST LHS, ExpressionAST RHS, string _operator) { this.LHS = LHS; this.RHS = RHS; this._operator = _operator; ReturnType = LHS.ReturnType; }