FIXED -
Your id reduction method isn't correct. You need to account for your nextToken variable to be null as in you just have ID. You're gonna want to take that into account for all reductions involving look-ahead. Also for look-ahead you want to be looking at the next token on the programStack and not the holdStack since you haven't processed the L_BRACKET yet. Don't forget to put the nextToken variable back on the programStack when you're done looking at it.
Diff:
Diff: