Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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();
        }