public override void ProcessNode(PslOperatorUsageNode node)
        {
            string operatorSymbol = null;

            m_tierStateStack.Push(new PslInspectionTierState(PslContext.Inline, true));

            switch (node.Operator.Specification)
            {
            // Mathematical operators
            case FunctionSpecification.Add:
                operatorSymbol = "+";
                break;

            case FunctionSpecification.Subtract:
                operatorSymbol = "-";
                break;

            case FunctionSpecification.Multiply:
                operatorSymbol = "*";
                break;

            case FunctionSpecification.Divide:
                operatorSymbol = "/";
                break;

            // Comparison operators
            case FunctionSpecification.Equals:
                operatorSymbol = "==";
                break;

            case FunctionSpecification.NotEquals:
                operatorSymbol = "!=";
                break;

            case FunctionSpecification.GreaterThan:
                operatorSymbol = ">";
                break;

            case FunctionSpecification.LessThan:
                operatorSymbol = "<";
                break;

            case FunctionSpecification.GreaterThanOrEqualTo:
                operatorSymbol = ">=";
                break;

            case FunctionSpecification.LessThanOrEqualTo:
                operatorSymbol = "<=";
                break;

            // Logical operators
            case FunctionSpecification.And:
                operatorSymbol = "&&";
                break;

            case FunctionSpecification.Or:
                operatorSymbol = "||";
                break;

            case FunctionSpecification.Not:
                m_output.Append('!');
                node.Operands[0].VisitThis(this);
                break;

            // Special operations
            case FunctionSpecification.Set:
                operatorSymbol = "=";
                break;

            case FunctionSpecification.ListGet:
                node.Operands[0].VisitThis(this);
                m_output.Append(OPEN_ARRAY_INDEXER);
                node.Operands[1].VisitThis(this);
                m_output.Append(CLOSE_ARRAY_INDEXER);
                break;

            default:
                throw new OnlyForDebuggingException("Unexpected operator usage.");
            }

            if (operatorSymbol != null)
            {
                List <NodeBase> operands         = node.Operands;
                int             lastOperandIndex = operands.Count - 1;
                for (int i = 0; i <= lastOperandIndex; i++)
                {
                    operands[i].VisitThis(this);

                    if (i != lastOperandIndex)
                    {
                        m_output.Append(SPACE);
                        m_output.Append(operatorSymbol);
                        m_output.Append(SPACE);
                    }
                }
            }

            m_tierStateStack.Pop();

            if (m_tierStateStack.Peek().Context != PslContext.Inline)
            {
                m_output.Append(STATEMENT_TERMINATOR);
            }
        }
Beispiel #2
0
 public override void ProcessNode(PslOperatorUsageNode node)
 {
 }
 public abstract void ProcessNode(PslOperatorUsageNode node);