code: def display(self):
          
          #Finding the maximum length for each column
          sym_name = "Symbol name"
          sym_len = max(max(len(i.name) for i in self.table),len(sym_name))
          kind_name = "Kind"
          kind_len = max(max(len(SharedData.KINDS[i.kind]) for i in self.table),len(kind_name))
          type_name = "Type"
          type_len = max(max(len(SharedData.TYPES[i.type]) for i in self.table),len(type_name))
          attr_name = "Attribute"
          attr_len = max(max(len(i.attribute_str()) for i in self.table),len(attr_name))
          #print table header
          print("{0:3s} | {1:^{2}s} | {3:^{4}s} | {5:^{6}s} | {7:^{8}} | {9:s}".format(" No", sym_name, sym_len, kind_name, kind_len, type_name, type_len, attr_name, attr_len, "Parameters"))
          print("-----------------------------" + "-" * (sym_len + kind_len + type_len + attr_len))
          #print symbol table
          for i,sym in enumerate(self.table):
              parameters = ""
              for p in sym.param_types:
                  if parameters == "":
                      parameters = "{0}".format(SharedData.TYPES[p])
                  else:
                      parameters += ", {0}".format(SharedData.TYPES[p])
              print("{0:3d} | {1:^{2}s} | {3:^{4}s} | {5:^{6}s} | {7:^{8}} | ({9})".format(i, sym.name, sym_len, SharedData.KINDS[sym.kind], kind_len, SharedData.TYPES[sym.type], type_len, sym.attribute_str(), attr_len, parameters))
docs: Displays the symbol table content