VTemplate.Engine/Evaluator/ExpressionEvaluator.cs

(开头部分) 16KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

/* ***********************************************
 * Author		:  kingthy
 * Email		:  kingthy@gmail.com
 * Description	:  ExpressionEvaluator
 *
 * ***********************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace VTemplate.Engine.Evaluator
{
    /// <summary>
    /// 表达式计算器
    /// </summary>
    public class ExpressionEvaluator
    {
        #region 构造函数
        /// <summary>
        /// 
        /// </summary>
        private ExpressionEvaluator()
        {
        }
        #endregion

        #region 分析表达式

        /// <summary>
        /// 将算术表达式转换为逆波兰表达式
        /// </summary>
        /// <param name="expression">要计算的表达式,如"1+2+3+4"</param>
        private static List<ExpressionNode> ParseExpression(string expression)
        {
            if (string.IsNullOrEmpty(expression)) return new List<ExpressionNode>();

            List<ExpressionNode> listOperator = new List<ExpressionNode>(10);
            Stack<ExpressionNode> stackOperator = new Stack<ExpressionNode>(5);

            ExpressionParser expParser = new ExpressionParser(expression);
            ExpressionNode beforeExpNode = null;       //前一个节点            
            ExpressionNode unitaryNode = null;         //一元操作符
            ExpressionNode expNode;

            //是否需要操作数
            bool requireOperand = false;

            #region 分析表达式

            while ((expNode = expParser.ReadNode()) != null)
            {
                if (expNode.Type == ExpressionNodeType.Numeric)
                {
                    //操作数, 直接加入后缀表达式中
                    if (unitaryNode != null)
                    {
                        //设置一元操作符节点
                        expNode.UnitaryNode = unitaryNode;
                        unitaryNode = null;
后面还有 333 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。