예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <summary>
 ///     判断此节点是否左括号。
 ///     此为对OperatorCalculator.IsLeftBracket的转发。
 /// </summary>
 /// <param name="node">要判断的节点</param>
 /// <returns>一个值,指示此节点是否优先级。</returns>
 public static bool IsLeftBracket(this CalculatorNode node)
 {
     return(OperatorCalculatorNode.IsLeftBracket(node));
 }
예제 #3
0
 /// <summary>
 ///     获取节点所对应的优先级。
 ///     此为对 OperatorCalculator.OperatorRank 的转发。
 /// </summary>
 /// <param name="node">要获得优先级的节点</param>
 /// <returns>节点所对应的优先级</returns>
 public static int Rank(this CalculatorNode node)
 {
     return(OperatorCalculatorNode.OperatorRank(node));
 }
예제 #4
0
        /// <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 == '(');
        }