JavaCC と LOOKAHEAD

基本的に、JavaCC のコンフリクトは 『LL(1) で判断できない分岐』 と 『shift-reduce confrict』 の2つ。

前者は

"a" "b"
| "a" "c"

みたいなのが該当。この例の場合は LL(2) で判断できるから

LOOKAHEAD(2) "a" "b"
| "a" "c"

みたいに修正。

後者は、例えば if-then-else みたいなのが該当する。こいつは

"if" "(" Expression() ")" Statement() [LOOKAHEAD(1) "else" Statement()]

ってすると解決。