Beispiel #1
0
        private void addPostFixOperator(ASTNode node)
        {
            if (node.Operator > ASTOperator.Single && node.Operator < ASTOperator.End)
            {
                if (postFixStack.Count < 1)
                {
                    throw new Exception();
                }

                ASTNode oprd1 = postFixStack.Pop();

                node.Right = oprd1;
                node.ComputeSingle();
            }
            else if (node.Operator > ASTOperator.Binary && node.Operator < ASTOperator.Single)
            {
                if (postFixStack.Count < 2)
                {
                    throw new Exception();
                }

                ASTNode oprd2 = postFixStack.Pop();
                ASTNode oprd1 = postFixStack.Pop();

                // Assign have Associativity R to L
                node.Left = oprd1;
                node.Right = oprd2;
                node.ComputeDouble();
            }
            else
            {
                throw new Exception();
            }

            postFixStack.Push(node);

            // Write SSA
        }