コード例 #1
0
ファイル: ExpressionTypeChecker.cs プロジェクト: chhoumann/p4
        private void SetNumericalExpression(IdentifierValueNode identifierValueNode,
                                            ExpressionNode expressionNode, SymbolType expressionType)
        {
            switch (expressionType)
            {
            case SymbolType.Float:
            {
                FloatValueNode floatValueNode = new FloatValueNode();
                ExpressionEvaluator <float> expressionEvaluator = new ExpressionEvaluator <float>(new FloatCalculator(expressionNode.Token));

                expressionNode.Accept(expressionEvaluator);

                floatValueNode.Value          = expressionEvaluator.Result;
                identifierValueNode.ValueNode = floatValueNode;
                break;
            }

            case SymbolType.Integer:
            {
                IntValueNode intValueNode = new IntValueNode();
                ExpressionEvaluator <int> expressionEvaluator = new ExpressionEvaluator <int>(new IntCalculator(expressionNode.Token));

                expressionNode.Accept(expressionEvaluator);

                intValueNode.Value            = expressionEvaluator.Result;
                identifierValueNode.ValueNode = intValueNode;
                break;
            }
            }
        }
コード例 #2
0
        IEnumerable <ExpressionNode> Extract(ExpressionNode root)
        {
            var visitor = new SideEffectExtractorVisitor();

            root.Accept(visitor);
            return(visitor.Trees);
        }
コード例 #3
0
        private ExpressionNode ProcessSingleNode(ExpressionNode node, ref SubExpressionGraph sub_graph)
        {
            var node_graph = node.Accept(this);

            if (node_graph.ContainsExtracted)
            {
                sub_graph = SubExpressionGraph.ConcatSubGraph(sub_graph, node_graph);
            }
            return(GetUpdatedExpressionNodeValue(node, node_graph));
        }
コード例 #4
0
ファイル: ExpressionTypeChecker.cs プロジェクト: chhoumann/p4
        public SymbolType GetType(ExpressionNode expression)
        {
            if (expression == null)
            {
                return(SymbolType.Null);
            }

            expression.Accept(this);

            return(typeHandler.CurrentType);
        }
コード例 #5
0
        public override Node Visit(ExpressionNode expression)
        {
            if (expression.IsBinary)
            {
                return(EvaluateBinaryExpression(expression.ChildNodes[0], expression.ChildNodes[1], expression.Operator, expression.Token));
            }
            else if (expression.IsUnary)
            {
                return(EvaluateUnaryExpression(expression.ChildNodes[0], expression.Operator, expression.Token));
            }

            return(expression.Accept(this));
        }