public ControlflowGraph parse() throws FormatException{
		String trimmedInput = this.input.replaceAll("\\s","");
		String edgeInput = extractEdgeInput(trimmedInput);
		
		StringTokenizer tokens = new StringTokenizer(edgeInput, ";");
		Pattern edgePattern = Pattern.compile("^([0-9]+)->([0-9]+)(\\[label=\"(true|false)\"\\])?");
		
		Pattern nodePattern = Pattern.compile("^([0-9]+)\\[label=\"([0-9]+:)?([^\"]+)\"\\]");
		while(tokens.hasMoreElements()){
			String token = tokens.nextToken();
			Matcher edgeMatcher = edgePattern.matcher(token);
			Matcher nodeMatcher = nodePattern.matcher(token);
			if(nodeMatcher.find()){
				int nodeId = Integer.parseInt(nodeMatcher.group(1));
				String expression = nodeMatcher.group(3);
				createNode(nodeId, expression);
			} else if(edgeMatcher.find()){
				int nodeFromId = Integer.parseInt(edgeMatcher.group(1));
				int nodeToId = Integer.parseInt(edgeMatcher.group(2));
				createEdge(nodeFromId, nodeToId);
			} else {
				//If format not recognize don't consider it for
				//controlflow graph but don't throw an execption
				//because only a subset of DOT language is supported
				//(unrecognized tokens can still be valid DOT)
			}
		}
		return this.graph;
	}