private void analyseWithAssemblyOpTree(String assemblyLine) throws AssemblerException {

		AssemblyOpTree assemblyOpTree = data.getAssemblyOpTree();
		String rootNode = assemblyOpTree.getRootToken();		
		ArrayList<String> roots = assemblyOpTree.getAssemblyOpTreeHash().get(rootNode);
		ArrayList<ArrayList<String>> paths = new ArrayList<ArrayList<String>>();
		ArrayList<String> currentPath = new ArrayList<String>();
		ArrayList<String> assemblyTokens = new ArrayList<String>();
		String[] assemblySplit = assemblyLine.split("\\s+"); // space

		for (String str : assemblySplit) {
			if (!str.matches(",+")) {
				str = str.replaceAll("^,+", "");
				str = str.replaceAll(",+$", "");
				assemblyTokens.add(str);
			}
		}

		for(String rootTokens: roots){
			ArrayList<String> rootTerm = new ArrayList<String>();
			rootTerm.add(rootTokens);
			
			try{
				if(analyseOperands(rootTerm, assemblyTokens, rootTerm, rootTerm, paths,
						currentPath))
						break;
			} catch(StackOverflowError e){
				throw new AssemblerException("StackOverflow: Check tree has no infinite loops.");
			}
		}
	}