boolean calculateLookahead(List newLookahead, Nullable nullable, FirstSets firstSets)	{
			// consider all nullable symbols after the one past the dot
			// and add their first symbols to lookahead set.
			
			for (int i = pointerPosition; i < rule.rightSize(); i++)	{	// when pointer at start, it has value 1
				String symbol = rule.getRightSymbol(i);
				
				if (Token.isTerminal(symbol))	{
					newLookahead.add(symbol);
					return false;	// originator lookahead not visible
				}
				else	{
					List firstSet = (List) firstSets.get(symbol);
					
					for (int j = 0; j < firstSet.size(); j++)	{
						String la = (String) firstSet.get(j);
						newLookahead.add(la);
					}
					
					if (nullable.isNullable(symbol) == false)
						return false;
				}
			}
			
			// if we get here everything was nullable, add all lookaheads of this item
			for (Enumeration e = lookahead.keys(); e.hasMoreElements(); )
				newLookahead.add((String)e.nextElement());
			
			return true;	// originator lookahead is visible
		}