Gauche > Archives > 2021/03/11

2021/03/11 21:20:47 UTCshiro
#
PEGで、「ある分岐のこの時点までの失敗ならバックトラックするけどそこを過ぎたらバックトラックしない」ってどう書くのがいいのかな。つまり

A = B / C
B = a b x y
C = a (b / c) z

ってのがあったとして、a c が来た場合、BはcでfailするけどCがマッチする可能性があるからバックトラック必要。だけどa c x qときた場合、xを過ぎてたらCにはマッチする可能性が無いからCを試さずにBから直接failしたい。
#
普通に書いておいてもどうせCはfailするんだから文法だけ考えればそれでいいんだけど、
適切なエラーメッセージを出すには「Bでのfailure」というのを明示したい。
2021/03/11 22:08:49 UTCshiro
#
失敗にラベルをつけてordered choiceでcatchしてよしなにする、というアイディアがあるな https://arxiv.org/abs/1405.6646