private void analyseOperandFormatData(String line) throws AssemblerException {

		if (atOperandFieldEncodings) {			
			line = line.trim();	
			
			// If line is "--" then there are no operand field encodings
			if (!line.equals("--"))
				currentMnemFormat.setOperandFieldEncodings(line);
			
			if(duplicateFieldDefined(line))
				throw new AssemblerException("Duplicate field defined.");
			
			atOperandFieldEncodings = false;
			atLocalFieldEncodings = true;
		}

		else if (atLocalFieldEncodings) {
			line = line.trim();
			
			// If line is "--" then there are no local encodings
			if (!line.equals("--")) {

				// Legit local encoding expression:
				// (!(space|equals|comma))+ space* equals space*
				// (!(space|equals|comma))+
				// (space* comma space* (!(space|equals|comma))+ space* equals
				// space* (!(space|equals|comma))+)*
				boolean legitLocalEncodings = Pattern.matches(
								"[A-Za-z0-9]+\\s*=\\s*[A-Za-z0-9]+(\\s*,\\s*[A-Za-z0-9]+\\s*=\\s*[A-Za-z0-9]+)*",
								line);

				if (!legitLocalEncodings) {
					abortMnem = true;					
					throw new AssemblerException(
							"MnemonicData error: Local encodings syntax error,"
									+ "\n<fieldName>=<value><B/H/I> or \"--\" (if no local encodings) expected.");
				}

				// Legit local field encodings so omit unnecessary spaces
				line = line.replaceAll("\\s+", "");
				String[] tokens = line.split(",");

				for (String token : tokens) {
					String[] elements = token.split("=");					
					String field = elements[0];					
					String valueAndBase = elements[1];
					String binary = getBinaryFromBase(valueAndBase);					
					currentMnemFormat.getFieldBitHash().put(field, binary);
				}
			}
			atLocalFieldEncodings = false;
			atInsFormat = true;
		}

		else if (atInsFormat) {
			line = line.trim();
			String[] tokens = line.split("\\s+");
			for (String ins : tokens)
				currentMnemFormat.getInstructionFormat().add(ins);
			endOfOperandFormatBlockErrorCheck();
			atInsFormat = false;
		}
	}