diff --git a/Doc/tools/findcsyms b/Doc/tools/findcsyms
new file mode 100755
index 0000000..cffc237
--- /dev/null
+++ b/Doc/tools/findcsyms
@@ -0,0 +1,107 @@
+#! /usr/bin/env python
+
+import errno
+import os
+import sys
+
+if __name__ == "__main__":
+    _base = sys.argv[0]
+else:
+    _base = __file__
+
+_script_home = os.path.abspath(os.path.dirname(_base))
+
+srcdir = os.path.dirname(os.path.dirname(_script_home))
+
+EXCLUDES = ["bitset.h", "cStringIO.h", "graminit.h", "grammar.h",
+            "longintrepr.h", "metagrammar.h",
+            "node.h", "opcode.h", "osdefs.h", "pgenheaders.h",
+            "py_curses.h", "parsetok.h", "symtable.h", "token.h"]
+
+
+def list_headers():
+    """Return a list of headers."""
+    incdir = os.path.join(srcdir, "Include")
+    return [fn for fn in os.listdir(incdir)
+            if fn.endswith(".h") and fn not in EXCLUDES]
+
+def list_documented_items():
+    """Return a list of everything that's already documented."""
+    docdir = os.path.join(srcdir, "Doc")
+    return []
+
+def split_documented(all, documented):
+    """Split the list of all symbols into documented and undocumented
+    categories."""
+    doc = []
+    undoc = []
+    for t in all:
+        if t[0] in documented:
+            doc.append(t)
+        else:
+            undoc.append(t)
+    return doc, undoc
+
+def print_list(L, title=None):
+    """Dump a list to stdout."""
+    if title:
+        print title + ":"
+        print "-" * (len(title) + 1)
+    w = 0
+    for sym, filename in L:
+        w = max(w, len(sym))
+    if w % 4 == 0:
+        w += 4
+    else:
+        w += (4 - (w % 4))
+    for sym, filename in L:
+        print "%-*s%s" % (w, sym, filename)
+
+
+_spcjoin = ' '.join
+
+def main():
+    args = sys.argv[1:]
+    if args:
+        headers = args
+        documented = []
+    else:
+        os.chdir(os.path.join(srcdir, "Include"))
+        headers = list_headers()
+        documented = list_documented_items()
+
+    cmd = ("ctags -f - --file-scope=no --c-types=-mv "
+           "-Istaticforward -Istatichere "
+           + _spcjoin(headers))
+    fp = os.popen(cmd)
+    L = []
+    prevsym = None
+    while 1:
+        line = fp.readline()
+        if not line:
+            break
+        sym, filename = line.split()[:2]
+        if sym == prevsym:
+            continue
+        if not sym.endswith("_H"):
+            L.append((sym, filename))
+            prevsym = sym
+    L.sort()
+    fp.close()
+
+    try:
+        if documented:
+            documented, undocumented = split_documented(L, documented)
+            print_list(documented, "Documented symbols")
+            if undocumented:
+                print
+                print_list(undocumented, "Undocumented symbols")
+        else:
+            print_list(L)
+    except IOError, e:
+        if e.errno != errno.EPIPE:
+            raise
+
+
+if __name__ == "__main__":
+    main()
