private void readFile(final String fileName) {
        BufferedReader reader = null;
        log.info("Start reading file " + fileName);
        try {
            try {
                reader = new BufferedReader(new FileReader(fileName));
                
                int instructionNumber = 0;
                int sourceLineNumber = 0;
                while (reader.ready()) {
                    String line = reader.readLine().trim();
                    sourceLineNumber++;
                    // ignore empty lines and comment lines
                    if (line.length() > 0 && !line.startsWith(";")) {
                        try {
                            Instruction c = 
                                new Instruction(line, sourceLineNumber);
                            if (c.getCommandWord().equals(CommandWord.LAB)) {
                                // Add labels also to label -> pc map
                                this.labelMap.put
                                    (c.getCommandParameter(0), 
                                     new Integer(instructionNumber));
                            }
                            this.program.add(c);
                            instructionNumber++;
                        } catch (IllegalInstructionException e) {
                            log.severe(e.getMessage());
                            this.program.clear();
                            return;
                        }
                    }
                }
            } finally {
                if (reader != null) {
                    reader.close();
                }
            }
        } catch (FileNotFoundException e) {
            log.severe("File '" + fileName + "' not found!");
        } catch (IOException e) {
            log.severe("Unknown IO exception");
            e.printStackTrace();			
        }
        log.info("Reading done. Success? " + !this.program.isEmpty());
    }