protected void generateSyntaxNodesFromItems(List syntaxNodes, Syntax syntax, Hashtable kernels)	{
		for (Enumeration e = entries.elements(); e.hasMoreElements(); )	{
			RuleStateItem item = (RuleStateItem)e.nextElement();
			String pending = item.getPendingSymbol();

			if (item.followNodeIndex < 0 && pending != null)	{	// further states are possible
				// create a kernel item
				SLRSyntaxNode node = createSyntaxNode();
				List tmp = node.addShiftedItems(pending, entries);	// get entries that have been taken

				// look if it is already in list
				Integer kernelIndex = (Integer)kernels.get(node);
				int index = kernelIndex != null ? kernelIndex.intValue() : -1;

				// if not in list, add it, compute closure
				if (index < 0)	{
					index = syntaxNodes.size();
					kernels.put(node, new Integer(index));
					syntaxNodes.add(node);
					node.closure(syntax);
				}

				// link originator entries to new or found node
				for (int i = 0; i < tmp.size(); i++)	{
					Tuple t = (Tuple)tmp.get(i);
					linkParentItemToChild(t.o1, index, syntaxNodes, t.o2);
				}
			}
		}
	}