src/EasyFrameWork/RuleEngine/Scripting/Compiler/InterpreterVisitor.cs

(开头部分) 6KB

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

/* http://www.zkea.net/ 
 * Copyright (c) ZKEASOFT. All rights reserved. 
 * http://www.zkea.net/licenses */

using System;
using System.Linq;
using Easy.RuleEngine.Scripting.Ast;

namespace Easy.RuleEngine.Scripting.Compiler
{
    public class InterpreterVisitor : AstVisitor
    {
        private readonly EvaluationContext _context;

        public InterpreterVisitor(EvaluationContext context)
        {
            _context = context;
        }

        public EvaluationResult Evaluate()
        {
            return Evaluate(_context.Tree.Root);
        }

        private EvaluationResult Evaluate(AstNode node)
        {
            return (EvaluationResult)this.Visit(node);
        }

        public override object VisitConstant(ConstantAstNode node)
        {
            return Result(node.Value);
        }

        public override object VisitUnary(UnaryAstNode node)
        {
            var operandValue = Evaluate(node.Operand);
            if (operandValue.IsError)
                return operandValue;

            switch (node.Operator.Kind)
            {
                case TokenKind.Not:
                case TokenKind.NotSign:
                    var operandBoolValue = ConvertToBool(operandValue);
                    if (operandBoolValue.IsError)
                        return operandBoolValue;

                    return Result(!operandBoolValue.BoolValue);
                default:
                    throw new InvalidOperationException(string.Format("Internal error: unary operator '{0}' is not supported.", node.Token.Kind));
            }
        }

        public override object VisitBinary(BinaryAstNode node)
        {
            var left = Evaluate(node.Left);
            if (left.IsError)
                return left;

后面还有 126 行代码,解锁后查看完整代码

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

AI 解读 AI

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

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