Exemple #1
0
        IExpressionNode CreateNode(INode node)
        {
            IExpressionNode expressionNode = null;

            if (node is ExpressionStatement)
            {
                var statementNode = (ExpressionStatement)node;
                expressionNode = new StatementExpressionNode
                {
                    Expression = CreateNode(statementNode.Expression)
                };
            }
            else if (node is BinaryOperatorExpression)
            {
                var binaryNode = ((BinaryOperatorExpression)node);
                expressionNode = new BinaryExpressionNode
                {
                    Operator = (BinaryExpressionNode.Operators)binaryNode.Op,
                    Left     = CreateNode(binaryNode.Left),
                    Right    = CreateNode(binaryNode.Right),
                };
            }
            else if (node is PrimitiveExpression)
            {
                var primitiveNode = (PrimitiveExpression)node;
                var valueType     = primitiveNode.Value == null ? typeof(object) : primitiveNode.Value.GetType();
                var value         = (IValueNode)Activator.CreateInstance(typeof(ValueNode <>).MakeGenericType(valueType), primitiveNode.Value);
                expressionNode = new ValueExpressionNode
                {
                    Value = value,
                };
            }

            return(expressionNode);
        }
Exemple #2
0
 public IEnumerable <StatementNode> Visit(StatementExpressionNode node) => Flatten(node.Value);