private ChordToken lexChord() {
	    if(currentLine.charAt(0) != '[') {
	        throw new RuntimeException("Cannot call lexChord() without '['");
	    }
	    currentLine = currentLine.substring(1);
        boolean notDone = true;
        ChordToken chord = null; // This wants to be initialized, but will never pass a null. If it doesn't reach ']' before the end of the line and return a valid chord,
                                 //it will throw an exception
        ArrayList<NoteOrRestToken> toks = new ArrayList<NoteOrRestToken>();
        while (notDone) {
            NoteOrRestToken tok = lexNote();
            toks.add(tok);
            if (currentLine.length() > 0) {
                if (currentLine.charAt(0) == ']') {
                    currentLine = currentLine.substring(1);
                    NoteOrRestToken[] tokens = new NoteToken[toks
                            .size()];
                    for (int o = 0; o < toks.size(); o++) {
                        tokens[o] = toks.get(o);
                    }
                    notDone = false;
                    Double len = tokens[0].getLength();
                    for (NoteOrRestToken e : tokens) {
                        if(e.getLength() != len) {
                            throw new RuntimeException("All lengths in a chord must be equal.");
                        }
                    }
                    chord = new ChordToken(Token.Type.chord,
                            tokens, len);
                }
            } else {
                throw new RuntimeException("unbalanced chord");
            }
        }
        return chord;
	}