Пример #1
0
        public void Visit(DotNode node)
        {
            node.Root.Accept(this);
            node.Expression.Accept(this);
            node.Accept(_visitor);

            //var self = node;
            //var theMostInner = self;
            //while (!(self is null))
            //{
            //    theMostInner = self;
            //    self = self.Root as DotNode;
            //}

            //var ident = (IdentifierNode) theMostInner.Root;
            //if (node == theMostInner && Scope.ScopeSymbolTable.SymbolIsOfType<TableSymbol>(ident.Name))
            //{
            //    if (theMostInner.Expression is DotNode dotNode)
            //    {
            //        var col = (IdentifierNode) dotNode.Root;
            //        Visit(new AccessColumnNode(col.Name, ident.Name, TextSpan.Empty));
            //    }
            //    else
            //    {
            //        var col = (IdentifierNode) theMostInner.Expression;
            //        Visit(new AccessColumnNode(col.Name, ident.Name, TextSpan.Empty));
            //    }

            //    return;
            //}

            //self = node;

            //while (!(self is null))
            //{
            //    self.Root.Accept(this);
            //    self.Expression.Accept(this);
            //    self.Accept(_visitor);

            //    self = self.Expression as DotNode;
            //}
        }
        public void Visit(DotNode node)
        {
            var self = node;

            var theMostInner = self;

            while (!(self is null))
            {
                theMostInner = self;
                self         = self.Root as DotNode;
            }

            var ident = (IdentifierNode)theMostInner.Root;

            if (node == theMostInner && Scope.ScopeSymbolTable.SymbolIsOfType <TableSymbol>(ident.Name))
            {
                if (theMostInner.Expression is DotNode dotNode)
                {
                    var col = (IdentifierNode)dotNode.Root;
                    Visit(new AccessColumnNode(col.Name, ident.Name, TextSpan.Empty));
                }
                else
                {
                    var col = (IdentifierNode)theMostInner.Expression;
                    Visit(new AccessColumnNode(col.Name, ident.Name, TextSpan.Empty));
                }

                return;
            }

            self = node;

            while (!(self is null))
            {
                self.Root.Accept(this);
                self.Expression.Accept(this);
                self.Accept(_visitor);

                self = self.Expression as DotNode;
            }
        }
Пример #3
0
 public virtual void Visit(DotNode node)
 {
     node.Root.Accept(this);
     node.Expression.Accept(this);
     node.Accept(Visitor);
 }
 public void Visit(DotNode node)
 {
     //node.Root.Accept(this);
     //node.Expression.Accept(this);
     node.Accept(_visitor);
 }