часто бывает удобно выражать грамматические постановки в BNF какПредставляющие эпсилон производств с FParsec парсеров комбинаторов
A ::= "car"
| "bike"
| ε
где ε представляет собой пустое правило производства; т. е. нетерминал «А» может расширяться до терминалов «автомобиль», «велосипед» или ничего. Однако, если я не реорганизую свою грамматику, мне непонятно, как я буду представлять такую грамматику в FParsec. Я знаю комбинатор «выбор», <|>
, но насколько я знаю, нет «пустого» комбинатора. I.e., комбинатор, который возвращает true и не потребляет вход.
Я искал документацию FParsec высоко и низко, но я не нашел ничего, что делает это, что меня удивляет, потому что это похоже на общий сценарий. Я довольно новичок в FParsec (и вообще в комбинаторах), поэтому, возможно, я просто не использую правильные слова. Любые намеки?
Спасибо, что упомянул об этом, Томас. В самом деле, я впоследствии нашел и использовал 'preturn' после публикации вышеупомянутого вопроса. –
Я только что заметил [это] (http://www.quanttec.com/fparsec/reference/primitives.html#members.:60::124::62::37 :) в документах fparsec - вы можете оптимизировать '<|> презерватив Другое' как' <|>% Другие'. –