先読み
規則上、'+' の前には E しかないため。
shift - 入力 '+' を Rule1 が適用されることを予測しつつスタックに退避する。
shift - 入力 '2' を Rule3 が適用されることを予測しつつスタックに退避する。
reduce - '*' を先読みして、スタック上の '2' を Rule3 に基づいて E に reduce する。規則上、'*' の前には E しかないため。
ここまでで、スタック上には E + E があり、現在の入力は '*' である。従って、Rule1 を適用する reduce を行うという選択肢と、Rule2 に基づいて shift を行うという選択肢がある。Rule4 によれば '*' の方が優先順位が高いので、Rule2 を予測して '*' を shift する。
shift - 入力 '3' を Rule3 が適用されることを予測しつつスタックに退避する。
reduce - 先読みすると入力が終了しているので、スタック上の '3' を Rule3 に基づいて E に reduce する。
reduce - スタック上の E * E を Rule2 に基づき E に reduce
reduce - スタック上の E + E を Rule1 に基づき E に reduce
これによって生成される構文木は正しく、先読みしない場合よりも効率的に得られる。以上の方式はLALR法に基づいている。