private void analyseDataFirstPass(String assemblyLine) throws AssemblerException {

		boolean legitIntDataLine = Pattern.matches(
				"[A-Za-z0-9]+\\s+[0-9]+MAU\\s+[^\\s]+", assemblyLine);

		boolean legitAsciiDataLine = Pattern.matches(
				"[A-Za-z0-9]+\\s+.ascii\\s+\".+\"", assemblyLine);

		boolean legitUninitializedDataLine = Pattern.matches(
				"[A-Za-z0-9]+\\s+[0-9]+MAU", assemblyLine);

		if (!legitIntDataLine && !legitAsciiDataLine && !legitUninitializedDataLine)
			throw new AssemblerException(".data line incorrect syntax.");
		
		String[] splitDataLine = assemblyLine.split("\\s+");
		String label = splitDataLine[0];
		int noOfMinAdrUnits = 0;

		if (legitAsciiDataLine) {
			String[] splitByQuotation = assemblyLine.split("\"", 2);
			String asciiData = splitByQuotation[1].substring(0,	splitByQuotation[1].length() - 1);
			int noOfBits = 0;
			for (int i = 0; i < asciiData.length(); i++)
				noOfBits += 8;
			int minAdrUnit = data.getMinAdrUnit();
			noOfMinAdrUnits = noOfBits / minAdrUnit;
		}

		else if (legitIntDataLine || legitUninitializedDataLine) {
			String[] splitDataTerm = assemblyLine.split("\\s+");
			String minUnitTerm = splitDataTerm[1];
			String[] splitMinUnitTerm = minUnitTerm.split("MAU");
			String noOfMinAdrUnitsStr = splitMinUnitTerm[0];
			noOfMinAdrUnits = Integer.parseInt(noOfMinAdrUnitsStr);
		}

		if (symbolTable.get(label) == null && dataTable.get(label) == null)
			dataTable.put(label, locationCounter);

		else
			throw new AssemblerException("\"" + label
					+ "\" already exists in symbol table.");

		insNumber++;
		insAdrTable.put(insNumber, locationCounter);
		locationCounter += noOfMinAdrUnits;
	}