Esempio n. 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 static IScopeOwner FindNearestScopeOwner(this ICodeHierarchyNode node)
        {
            if (node is IScopeOwner nodeScopeOwner)
            {
                return(nodeScopeOwner);
            }

            if (node.Parent == null)
            {
                return(null);
            }

            return(node.Parent.FindNearestScopeOwner());
        }
Esempio n. 3
0
 public WhileStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
Esempio n. 4
0
 public Statement(ICodeHierarchyNode parent)
 {
     Parent = parent;
 }
Esempio n. 5
0
 public ExpressionStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
Esempio n. 6
0
 public LocalVariableDeclarationStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
Esempio n. 7
0
 public BlockOfStatements(ICodeHierarchyNode parent, Scope parentScope)
     : base(parent)
 {
     Scope = new Scope(this, parentScope);
 }
Esempio n. 8
0
 public EmptyStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
Esempio n. 9
0
 public ContinueStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
Esempio n. 10
0
 public BreakStatement(ICodeHierarchyNode parent)
     : base(parent)
 {
 }
 public MethodBlockCreationVisitor(CompilationContext compilationContext, ICodeHierarchyNode currentNode, Scope currentScope)
     : base(compilationContext)
 {
     _currentNode  = currentNode;
     _currentScope = currentScope;
 }
Esempio n. 12
0
 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));
 }
Esempio n. 15
0
        public static ExpressionTree BuildDefaultOfType(CompilationContext compilationContext, ICodeHierarchyNode expressionParent, DataType type)
        {
            var tree = new ExpressionTree(expressionParent);

            tree.RootExpression = CreateDefaultOfTypeExpression(compilationContext, type);

            // Стадию трансформации пропускаем, т.к. тут заранее известно, что нечего трансформировать

            return(tree);
        }
Esempio n. 16
0
 public static TParent FindNearestParentOfType <TParent>(this ICodeHierarchyNode node)
     where TParent : ICodeHierarchyNode
 {
     if (node.Parent == null)
     {
         return(default);