public String toString()
	{
		StringBuffer rv = new StringBuffer();
		if(!isResolved()) rv.append("P");
		else rv.append("Unresolvable p");
		rv.append("arse table conflict at ").append("parser state ").append(conflict.getState()).append(", on terminal ").append(symbolTable.get(conflict.getSymbol()).getDisplayName()).append(":\n");
		String[] actions = new String[(conflict.shift != -1 ? 1 : 0) + conflict.reduce.cardinality()];
		int i = 0;
		if(conflict.shift != -1) actions[i++] = LRParseTablePrinter.printAction(symbolTable, spec, conflict.getState(), conflict.getSymbol(), LRParseTable.SHIFT, conflict.shift);
		for(int k = conflict.reduce.nextSetBit(0);k >= 0;k = conflict.reduce.nextSetBit(k+1)) actions[i++] = LRParseTablePrinter.printAction(symbolTable, spec, conflict.getState(), conflict.getSymbol(), LRParseTable.REDUCE, k);
		BitSet allActions = new BitSet();
		allActions.set(0,actions.length);
		rv.append(PrettyPrinter.bitSetPrettyPrint(allActions, actions, "  ", 1));
		if(resolvedActionType == LRParseTable.ERROR)
		{
			rv.append("\n  Resolved in favor of an error action.");
		}
		else if(resolvedActionType != LRParseTable.CONFLICT)
		{
			rv.append("\n  Resolved in favor of " + LRParseTablePrinter.printAction(symbolTable, spec, conflict.getState(), conflict.getSymbol(),resolvedActionType,resolvedActionParameter));
		}
		return rv.toString();
	}