/// <summary> /// 获取节点所对应的优先级。 /// </summary> /// <remarks> /// 函数节点的优先级均为 8。 /// 运算符节点的优先级为运算符对应的优先级。 /// 其他节点的优先级均为 0。 /// </remarks> /// <param name="node">要获得优先级的节点</param> /// <returns>节点所对应的优先级</returns> public static int OperatorRank(CalculatorNode node) { if (node is FunctionCalculatorNode) { return(8); } var operator_calculator_node = node as OperatorCalculatorNode; return(operator_calculator_node != null?OperatorRank(operator_calculator_node.Operator) : 0); }
/// <summary> /// 判断此节点是否左括号。 /// 此为对OperatorCalculator.IsLeftBracket的转发。 /// </summary> /// <param name="node">要判断的节点</param> /// <returns>一个值,指示此节点是否优先级。</returns> public static bool IsLeftBracket(this CalculatorNode node) { return(OperatorCalculatorNode.IsLeftBracket(node)); }
/// <summary> /// 获取节点所对应的优先级。 /// 此为对 OperatorCalculator.OperatorRank 的转发。 /// </summary> /// <param name="node">要获得优先级的节点</param> /// <returns>节点所对应的优先级</returns> public static int Rank(this CalculatorNode node) { return(OperatorCalculatorNode.OperatorRank(node)); }
/// <summary> /// 判断此节点是否左括号。 /// </summary> /// <param name="node">要判断的节点</param> /// <returns>一个值,指示此节点是否优先级。</returns> public static bool IsLeftBracket(CalculatorNode node) { var operator_calculator_node = node as OperatorCalculatorNode; return(operator_calculator_node != null && operator_calculator_node.Operator == '('); }