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 static IScopeOwner FindNearestScopeOwner(this ICodeHierarchyNode node) { if (node is IScopeOwner nodeScopeOwner) { return(nodeScopeOwner); } if (node.Parent == null) { return(null); } return(node.Parent.FindNearestScopeOwner()); }
public WhileStatement(ICodeHierarchyNode parent) : base(parent) { }
public Statement(ICodeHierarchyNode parent) { Parent = parent; }
public ExpressionStatement(ICodeHierarchyNode parent) : base(parent) { }
public LocalVariableDeclarationStatement(ICodeHierarchyNode parent) : base(parent) { }
public BlockOfStatements(ICodeHierarchyNode parent, Scope parentScope) : base(parent) { Scope = new Scope(this, parentScope); }
public EmptyStatement(ICodeHierarchyNode parent) : base(parent) { }
public ContinueStatement(ICodeHierarchyNode parent) : base(parent) { }
public BreakStatement(ICodeHierarchyNode parent) : base(parent) { }
public MethodBlockCreationVisitor(CompilationContext compilationContext, ICodeHierarchyNode currentNode, Scope currentScope) : base(compilationContext) { _currentNode = currentNode; _currentScope = currentScope; }
public ExpressionTree(ICodeHierarchyNode parent) { Parent = parent; }
private static ExpressionTree ApplyToParseTree(CompilationContext compilationContext, ICodeHierarchyNode expressionParent, Antlr4.Runtime.Tree.IParseTree antlrContext) { compilationContext.PushParsingContext(); var visitor = new ExpressionCreationVisitor(compilationContext); visitor.Visit(antlrContext); compilationContext.SetParsingAntlrContext(null); var result = new ExpressionBuilder().Build(compilationContext, expressionParent, visitor.Sequence, visitor.WholeExpressonAntlrContext); compilationContext.PopParsingContext(); return(result); }
public static ExpressionTree Apply(CompilationContext compilationContext, ICodeHierarchyNode expressionParent, DoshikParser.ParExpressionContext antlrContext) { return(ApplyToParseTree(compilationContext, expressionParent, antlrContext)); }
public static ExpressionTree BuildDefaultOfType(CompilationContext compilationContext, ICodeHierarchyNode expressionParent, DataType type) { var tree = new ExpressionTree(expressionParent); tree.RootExpression = CreateDefaultOfTypeExpression(compilationContext, type); // Стадию трансформации пропускаем, т.к. тут заранее известно, что нечего трансформировать return(tree); }
public static TParent FindNearestParentOfType <TParent>(this ICodeHierarchyNode node) where TParent : ICodeHierarchyNode { if (node.Parent == null) { return(default);