private void initialize() {
    agenda = new LinkedList<Edge>();
    chart = new Chart();
    edges = new HashMap<Edge,Edge>();
    for (int wordI = 0; wordI < sentence.size(); wordI++) {
      String word = (String) sentence.get(wordI);
      List<String> tagList = lexicon.getTags(word);
      if (tagList == null || tagList.isEmpty()) {
        System.err.println("Error: unknown word "+word);
        System.exit(0);
      }
      for (String tag : tagList) {
        Edge tagEdge = makeEdge(tag, wordI, wordI+1);
        if (verbose) System.err.println("Adding tagging of "+tagEdge+" for "+word);
        discoverEdge(tagEdge);
        tagEdge.addBacktrace(word);
      }
    }
    for (int wordI = 0; wordI <= sentence.size(); wordI++) {
      Edge emptyEdge = makeEdge("*e*", wordI, wordI);
      if (verbose) System.err.println("Adding empty edge of "+emptyEdge);
      discoverEdge(emptyEdge);
      emptyEdge.addBacktrace("*e*");
    }
  }