public OperatorNode AddOperatorNode(TensorOp op) { var parent = TreeNodeStack.Count > 1 ? InternalNodeAsOperatorNode : ExpressionTree; var on = ExpressionTree.CreateOperatorNode(parent as OperatorNode, op); ExpressionTree.AddNode(on); TreeNodeStack.Push(on); return(on); }
public ValueNode AddValueNode(object value) { if (value is Tensor && TensorIndicesQueue.Count > 0) { Tensor t = value as Tensor; throw new ExpressionTreeException(ExpressionTree, $"Attempting to add new value node for Tensor {t.Name} but the tensor indices queue still has " + $"{TensorIndicesQueue.Count} elements and last element: {TensorIndicesQueue.Peek().Name}"); } var parent = InternalNodeAsOperatorNode; var vn = ExpressionTree.CreateValueNode(parent as OperatorNode, value); ExpressionTree.AddNode(vn); TreeNodeStack.Push(vn); return(vn); }
public ITreeNode Parse(Grammer grammer, IInput input, IGrammerRuleHandler ruleHandler) { States states = States.BuildStates(grammer); input.Parse(); Stack stack = new Stack(); TreeNodeStack treeNodeStack = new TreeNodeStack(); ruleHandler.TreeNodeStack = treeNodeStack; IAction action = states.GetAction(stack.Top(), input.Get()); while(!action.GetType().Equals(typeof(Accept))){ action.Do(input,stack,ruleHandler); action = states.GetAction(stack.Top(),input.Get()); } return treeNodeStack.Pop(); }