エラーリカバリで無限ループしてました。
こんな感じの文法があったとして。
start := x e
x ::= w x
x ::= x y
x ::= z
最初にwを与えるとこうなります。(startはスタック)
x ::= w * x | * w x
x ::= * x y
x ::= * z
そこへ、eが来ると、エラーリカバリによって現在の状態で待っている記号のいずれかが補われます。
wまたはyが選ばれてしまうと無限ループ。
wが選ばれないための修正として、coreに含まれないルールはリカバリの対象から外しました。
yが選ばれないための修正として、左再帰はリカバリの対象から外しました。