private void semanticPop(int popIndex, int countOfPops)	{
		if (semantic != null)	{
			// the value pop
			inputTokens.add(0, valueStack.pop());
			
			// the range pop
			Token.Range currentRange = (Token.Range) rangeStack.pop();
			rangeList.add(0, currentRange);
			
			if (popIndex == 0)	// first pop of right side holds last token value
				this.range = new Token.Range(null, currentRange.end);	// helper to remember end address
				
			if (popIndex == countOfPops - 1)	// if it is the last pop, make a valid range for next push()
				this.range = new Token.Range(currentRange.start, this.range.end);
		}
	}