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(); }