public static ArrayList<ArrayList<String>> parse(String circuitData) throws FileNotFoundException{
		ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
		File file = new File(circuitData);
		Scanner scan = new Scanner(file);	//scanner is life, scanner is love
		String line;
		int count = 0;	//using a while loop instead of for, have to keep count the ol' fashioned way

		while(scan.hasNextLine()){
			line = scan.nextLine();
			IOMatch = IO.matcher(line);
			labelMatch = IOLabels.matcher(line);
			gateMatch = gate.matcher(line);
			connectionMatch = connection.matcher(line);
			inputMatch = input.matcher(line);
			outputMatch = output.matcher(line);
			cellMatch = cell.matcher(line);

			//for each, remove all the punctuation and add an identifier to the front
			if(IOMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "IOMATCH");
			}
			else if(labelMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "LABELMATCH");
			}
			else if(gateMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "GATEMATCH");
			}
			else if(connectionMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "CONNECTIONMATCH");
			}
			else if(inputMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "INPUTMATCH");
			}
			else if(outputMatch.find()){
				data.add( parseLine(line));
				data.get(count).add(0, "OUTPUTMATCH");
			}
			else if (cellMatch.find()){
				data.add(parseLine(line));
				data.get(count).add(0, "CELLMATCH");
			}
			else{
				System.err.println("Syntax Error on line " + count + " while parsing circuit data");
				System.exit(1);
			}
			count++;
		}
		scan.close();	//goodnight 
		data.trimToSize();	//I should really eat healthier
		return data;
	}