public void Traverse(ASTNode node, Action <ASTNode> visitor) { visitor(node); foreach (ASTNode descendant in node.Descendants) { Traverse(descendant, visitor); } if (node.Parent != null && node.Parent.Token.Kind == TokenKind.Block && node == node.Parent.Descendants.Last()) { Symbols.AscendScope(); } else if (node.Token.Kind == TokenKind.Block && node.Descendants.Count == 0) { Symbols.AscendScope(); } }