docs: public static SymbolTable unknownSharedSymbolTable(final String name,
                                                         final int version,
                                                         final int maxId)
      {
          return new AbstractSymbolTable(name, version)
          {
  
              public Iterator<String> iterateDeclaredSymbolNames()
              {
                  return new Iterator<String>()
                  {
                      int id = 1;
  
                      public boolean hasNext()
                      {
                          return id <= maxId;
                      }
  
                      public String next()
                      {
                          if (!hasNext())
                          {
                              throw new NoSuchElementException();
                          }
                          // all symbols are unknown
                          id++;
                          return null;
                      }
  
                      public void remove()
                      {
                          throw new UnsupportedOperationException();
                      }
                  };
              }
  
              public boolean isSystemTable()
              {
                  return false;
              }
  
              public boolean isSubstitute()
              {
                  return true;
              }
  
              public boolean isSharedTable()
              {
                  return true;
              }
  
              public boolean isReadOnly()
              {
                  return true;
              }
  
              public boolean isLocalTable()
              {
                  return false;
              }
  
              public SymbolToken intern(String text)
              {
                  throw new UnsupportedOperationException(
                      "Cannot intern into substitute unknown shared symbol table: "
                      + name + " version " + version
                  );
              }
  
              public SymbolTable getSystemSymbolTable()
              {
                  return systemSymbolTable();
              }
  
              public int getMaxId()
              {
                  return maxId;
              }
  
              public SymbolTable[] getImportedTables()
              {
                  return null;
              }
  
              public int getImportedMaxId()
              {
                  return 0;
              }
  
              public String findKnownSymbol(int id)
              {
                  return null;
              }
  
              public SymbolToken find(String text)
              {
                  return null;
              }
          };
      }