Пример #1
0
        public string Visit(DivideOpNode visited)
        {
            var sb = new StringBuilder();

            // parentheses might be needed around children with lower priorities
            int thisPriority = visited.Accept(priorityGetter);
            int sonPriority  = visited.LeftSon.Accept(priorityGetter);

            if (sonPriority < thisPriority)
            {
                sb.Append("(");
            }
            sb.Append(visited.LeftSon.Accept(this));
            if (sonPriority < thisPriority)
            {
                sb.Append(")");
            }

            sb.Append("/");
            sonPriority = visited.RightSon.Accept(priorityGetter);

            // "/" is not associative - same priority right sons need parentheses
            if (sonPriority <= thisPriority)
            {
                sb.Append("(");
            }
            sb.Append(visited.RightSon.Accept(this));
            if (sonPriority <= thisPriority)
            {
                sb.Append(")");
            }

            return(sb.ToString());
        }
Пример #2
0
        public double Visit(DivideOpNode caller)
        {
            double left  = caller.LeftSon.Accept(this);
            double right = caller.RightSon.Accept(this);

            return(left / right);
        }
Пример #3
0
        public int Visit(DivideOpNode caller)
        {
            int left  = caller.LeftSon.Accept(this);
            int right = caller.RightSon.Accept(this);

            return(left / right);
        }
Пример #4
0
        public string Visit(DivideOpNode visited)
        {
            var sb = new StringBuilder();

            sb.Append("(");
            sb.Append(visited.LeftSon.Accept(this));
            sb.Append("/");
            sb.Append(visited.RightSon.Accept(this));
            sb.Append(")");
            return(sb.ToString());
        }
Пример #5
0
 public int Visit(DivideOpNode visited)
 {
     return(5);
 }