@Override
	protected int tryFix(int Index, int column, int line)
	{
		int I = -1;
		final NTerminalStack nTerminalStackClone = this.nTerminalStack.clone();
		final GGLLStack ggLLStackClone = this.ggLLStack.clone();
		final ParseStack parseStackClone = this.parseStack.clone();

		do
		{
			if (Index > 0)
			{
				if (ggLLTable.getGraphNode(Index).IsTerminal())
				{
					final TableNode terminalNode = ggLLTable.getTermial(ggLLTable.getGraphNode(Index).getNodeReference());
					I = InnerLoop(ggLLTable.getGraphNode(Index).getSucessorIndex(), terminalNode, column, nTerminalStackClone, ggLLStackClone, parseStackClone);

					if (I < 0)
					{
						Index = parser.getParseAlternative().find(Index, nTerminalStackClone, ggLLStackClone);
					}

				}
				else
				{
					ggLLStackClone.push(new GGLLNode(Index, parseStackClone.size()));
					nTerminalStackClone.push(Index);
					Index = ggLLTable.getNTerminal(ggLLTable.getGraphNode(Index).getNodeReference()).getFirstNode();
				}
			}

			while (Index == 0 && !ggLLStackClone.empty())
			{
				final GGLLNode grViewStackNode = ggLLStackClone.pop();
				ParseNode auxParseSNode = null;

				while (parseStackClone.size() > grViewStackNode.size)
				{
					auxParseSNode = parseStackClone.pop();
				}

				if (auxParseSNode != null)
				{
					final TableNode currentNTerminal = ggLLTable.getNTerminal(ggLLTable.getGraphNode(grViewStackNode.index).getNodeReference());
					parseStackClone.push(new ParseNode(currentNTerminal.getFlag(), currentNTerminal.getName(), auxParseSNode.getSemanticSymbol()));
				}
				Index = ggLLTable.getGraphNode(grViewStackNode.index).getSucessorIndex();
			}

		}
		while (Index != 0 && I < 0);

		return I;
	}