class_docstr: A visitor that checks a parsed ASDL tree for correctness.
  
  Errors are printed and accumulated.
class_docstr_tok: ["A","visitor","that","checks","a","parsed","ASDL","tree","for","correctness",".","Errors","are","printed","and","accumulated","."]
code: def visitConstructor(self, cons, name):
      key = str(cons.name)
      conflict = self.cons.get(key)
      if conflict is None:
          self.cons[key] = name
      else:
          print("Redefinition of constructor {}".format(key))
          print("Defined in {} and {}".format(conflict, name))
          self.errors += 1
      for f in cons.fields:
          self.visit(f, key)
  
imports: from collections import namedtuple
  import re
label_desc: Use image node_id 5 for calling the Check obj's underlying member method code with example usage: obj.visitConstructor(cons, name) without return types