public override void Visit(GraphNode node)
 {
     // GraphNodes are magic, and have a lot of complex scope rules.
     //
     SymbolTable.SetCurrentNode(node);
     if (CheckAlreadyDeclared(node.Name))
     {
         SymbolTable.EnterSymbol(node.Name, AllType.GRAPH);
         SymbolTable.SetAssigned(node.Name);
         // Visits all the different vertex declarations in the graph declaration
         foreach (var Vertex in node.Vertices)
         {
             Vertex.Accept(this);
         }
         // Visits all the different Edge declarations in the graph declaration
         foreach (var Edge in node.Edges)
         {
             Edge.Accept(this);
         }
         // Now the last children of the graph node will be visited, this is stuff like the set Directed
         // This also includes extended attributes on the graph.
         VisitChildren(node);
     }
 }