import java.io.InputStreamReader; import java.io.IOException; import java.io.FileReader; import java.io.Reader; import java.util.TreeMap; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; public class Xref { private Tokenizer tok; public Xref( Reader inStream ) { tok = new Tokenizer( inStream ); } public void generateCrossReference( ) { Map theIdentifiers = new TreeMap( ); String current; while( ( current = tok.getNextID( ) ) != "" ) { List lines = (List) theIdentifiers.get( current ); if( lines == null ) { lines = new ArrayList( ); theIdentifiers.put( current, lines ); } lines.add( new Integer( tok.getLineNumber( ) ) ); } Iterator itr = theIdentifiers.keySet( ).iterator( ); while( itr.hasNext( ) ) { Object key = itr.next( ); Iterator lineItr = ((List) theIdentifiers.get(key) ).iterator( ); System.out.print( key + ": " ); System.out.print( lineItr.next( ) ); while( lineItr.hasNext( ) ) System.out.print( ", " + lineItr.next( ) ); System.out.println( ); } } public static void main( String [ ] args ) { Xref p; if( args.length == 0 ) { p = new Xref( new InputStreamReader( System.in ) ); p.generateCrossReference( ); return; } for( int i = 0; i < args.length; i++ ) { FileReader f = null; try { f = new FileReader( args[ i ] ); System.out.println( args[ i ] + ": " ); p = new Xref( f ); p.generateCrossReference( ); f.close( ); } catch( IOException e ) { System.err.println( e + args[ i ] ); } finally { try { if( f != null ) f.close( ); } catch( IOException e ) { } } } } }