raccを試す その2.1
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なしだとエラーになりました。