public LLParseTableDerivationPane(GrammarEnvironment environment) {
		super(new BorderLayout());
		Grammar g = environment.getGrammar();
		JPanel right = new JPanel(new BorderLayout());

		JLabel description = new JLabel();
		right.add(description, BorderLayout.NORTH);

		// FirstFollowModel ffmodel = new FirstFollowModel(g);
		FirstFollowTable fftable = new FirstFollowTable(g);
		fftable.getColumnModel().getColumn(0).setPreferredWidth(30);
		fftable.getFFModel().setCanEditFirst(true);
		fftable.getFFModel().setCanEditFollow(true);

		LLParseTable parseTableModel = new LLParseTable(g) {
			public boolean isCellEditable(int r, int c) {
				return controller.step != LLParseDerivationController.FINISHED
						&& super.isCellEditable(r, c);
			}
		};
		parseTable = new LLParseTablePane(parseTableModel);
		parseTable.getColumnModel().getColumn(0).setPreferredWidth(30);

		JSplitPane rightSplit = SplitPaneFactory.createSplit(environment,
				false, 0.5, new JScrollPane(fftable), new JScrollPane(
						parseTable));
		right.add(rightSplit, BorderLayout.CENTER);

		controller = new LLParseDerivationController(g, environment, fftable,
				parseTable, description);

		GrammarTable table = new GrammarTable(
				new gui.grammar.GrammarTableModel(g) {
					public boolean isCellEditable(int r, int c) {
						return false;
					}
				});
		JSplitPane pane = SplitPaneFactory.createSplit(environment, true, 0.3,
				table, right);
		this.add(pane, BorderLayout.CENTER);

		// Make the tool bar.
		JToolBar toolbar = new JToolBar();
		toolbar.add(controller.doSelectedAction);
		toolbar.add(controller.doStepAction);
		toolbar.add(controller.doAllAction);
		toolbar.addSeparator();
		toolbar.add(controller.nextAction);
		toolbar.addSeparator();
		toolbar.add(controller.parseAction);
		this.add(toolbar, BorderLayout.NORTH);
	}