Class AstEvaluator

java.lang.Object
cloud.opencode.base.expression.eval.AstEvaluator
All Implemented Interfaces:
Evaluator

public class AstEvaluator extends Object implements Evaluator
AST Evaluator AST 求值器

The default evaluator that traverses and evaluates AST nodes. Uses the visitor pattern to evaluate different node types.

默认求值器,遍历和求值 AST 节点。使用访问者模式来求值不同的节点类型。

Features | 主要功能:

  • Evaluate single nodes or node lists - 求值单个节点或节点列表
  • Typed evaluation: boolean, number, string - 类型化求值: 布尔值、数字、字符串
  • Timeout-based evaluation - 基于超时的求值
  • Singleton and instance-based usage - 单例和基于实例的使用

Usage Examples | 使用示例:

AstEvaluator evaluator = AstEvaluator.getInstance();
Node ast = Parser.parse("x + y");
Object result = evaluator.evaluate(ast, ctx);

// Typed evaluation
boolean flag = evaluator.evaluateAsBoolean(conditionNode, ctx);
Number num = evaluator.evaluateAsNumber(calcNode, ctx);

Security | 安全性:

  • Thread-safe: Yes, stateless singleton - 线程安全: 是,无状态单例
  • Null-safe: Yes, null node returns null - 空值安全: 是,null节点返回null

Performance | 性能特性:

  • Time complexity: O(n) for evaluate where n is the number of AST nodes - 时间复杂度: evaluate 为 O(n),n为 AST 节点数量
  • Space complexity: O(d) call stack where d is the expression nesting depth - 空间复杂度: O(d) 调用栈,d为表达式嵌套深度
Since:
JDK 25, opencode-base-expression V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Constructor Details

    • AstEvaluator

      public AstEvaluator()
      Create a new AstEvaluator 创建新的 AstEvaluator
  • Method Details

    • getInstance

      public static AstEvaluator getInstance()
      Get the singleton instance 获取单例实例
      Returns:
      the instance | 实例
    • evaluate

      public Object evaluate(Node node, EvaluationContext context)
      Description copied from interface: Evaluator
      Evaluate an AST node 求值 AST 节点
      Specified by:
      evaluate in interface Evaluator
      Parameters:
      node - the AST node | AST 节点
      context - the evaluation context | 求值上下文
      Returns:
      the evaluation result | 求值结果
    • evaluateAll

      public List<Object> evaluateAll(List<Node> nodes, EvaluationContext context)
      Evaluate a list of nodes 求值节点列表
      Parameters:
      nodes - the nodes | 节点列表
      context - the context | 上下文
      Returns:
      the results | 结果列表
    • evaluateAsBoolean

      public boolean evaluateAsBoolean(Node node, EvaluationContext context)
      Evaluate node and expect boolean result 求值节点并期望布尔结果
      Parameters:
      node - the node | 节点
      context - the context | 上下文
      Returns:
      the boolean result | 布尔结果
    • evaluateAsNumber

      public Number evaluateAsNumber(Node node, EvaluationContext context)
      Evaluate node and expect number result 求值节点并期望数字结果
      Parameters:
      node - the node | 节点
      context - the context | 上下文
      Returns:
      the number result | 数字结果
    • evaluateAsString

      public String evaluateAsString(Node node, EvaluationContext context)
      Evaluate node and expect string result 求值节点并期望字符串结果
      Parameters:
      node - the node | 节点
      context - the context | 上下文
      Returns:
      the string result | 字符串结果
    • getRunawayTimeoutCount

      public static long getRunawayTimeoutCount()
      Returns the running count of virtual threads that timed out under evaluateWithTimeout(Node, EvaluationContext, long) and could not be confirmed terminated. Decrements when a runaway task eventually does complete. Useful as a metric source for ops dashboards. 返回 evaluateWithTimeout(Node, EvaluationContext, long) 下超时但未确认终止的虚拟线程总数。失控任务最终完成时 自减。可作运维仪表盘的指标来源。
      Returns:
      current count of runaway timeout-cancelled tasks | 当前失控的超时任务计数
      Since:
      opencode-base-expression V1.0.4
    • evaluateWithTimeout

      public Object evaluateWithTimeout(Node node, EvaluationContext context, long timeoutMs)
    • eval

      public static Object eval(Node node, EvaluationContext context)
      Static method to evaluate expression 静态方法求值表达式
      Parameters:
      node - the node | 节点
      context - the context | 上下文
      Returns:
      the result | 结果