Beispiel #1
0
        public ExpressionTree Build(CompilationContext compilationContext, ICodeHierarchyNode expressionParent, ExpressionNodeSequence nodeSequence, IParseTree wholeExpressionAntlrContext)
        {
            _compilationContext = compilationContext;

            _nodeSequence = nodeSequence;

            _tree = new ExpressionTree(expressionParent);
            _tree.AntlrContext = wholeExpressionAntlrContext;

            _sequence = new List <IExpression>();

            // ToDo: по хорошему надо еще на каждую конкретную ноду, которая обрабатывается далее устанавливать этот контекст, для этого его можно в них передавать из visitor-а
            compilationContext.SetParsingAntlrContext(_tree.AntlrContext);

            for (int sequenceIndex = 0; sequenceIndex < _nodeSequence.Sequence.Count; sequenceIndex++)
            {
                var expressionNode = _nodeSequence.Sequence[sequenceIndex];

                var expression = HandleNode(expressionNode);

                _sequence.Add(expression);
            }

            _tree.RootExpression = _sequence.LastOrDefault();

            (new ExpressionTransformer()).Transform(_compilationContext, _tree);

            compilationContext.SetParsingAntlrContext(null);

            return(_tree);
        }
 public ExpressionCreationVisitor(CompilationContext compilationContext)
     : base(compilationContext)
 {
     Sequence = new ExpressionNodeSequence();
 }