conflictの原因が全く分からない。とりあえずトークンthenの省略を付加にしたら出なくなった。
rule
target: stmt
| /* none */ { result = nil }
stmt : if_stmt
| expr
if_stmt:IF expr then else END
{ result = (val[1]!=0?val[2]:val[3]) }
then : THEN stmt { result = val[1] }
else : ELSE stmt { result = val[1] }
| /* none */ { result = nil }
追記(09/08/19)
分かったような気がする。
if 1 then -1 else -99 end
のような文の場合にthenが省略されてしまうと、-1が条件の一部なのかthen節の一部なのか判別出来なくなってしまうってことで良いのかな?
実際thenなしだとエラーになりました。