/pr/ – programming


1e1d31e1d382218c2487b9a98db66208f0489 – ``Parser combinators''

@f4b7f258ab924b6aa16f4584b38985f5 Anonymous 2020-06-15 11:17:54
Парсер комбинаторы. Что это? Нахуй нужны? В чём плюсы/минусы? По каким примерам/языкам лучше изучать?
@7d8003fe2ac141749fb77bb614f32c8b Anonymous 2020-06-15 16:17:11
Можно ли контролировать уровень вложенности (рекурсию)? Например, я не хочу парсить, а хочу оставить оригинальный текст, если уровень вложенность начинает превышать n. В своём говнокоде я могу просто в рекурсивной функции это контролировать дополнительным параметром. А с парсер комбинаторами как этого достичь?
@ed5f4b57cfd04677b0bbeba726bbf9df Anonymous 2020-06-16 11:31:34
https://docs.rs/nom/5.1.2/nom/
> A parser in nom is a function which, for an input type I, an output type O and an optional error type E, will have the following signature:
> fn parser(input: I) -> IResult<I, O, E>;
Т.е. я так понял, можно в качестве I взять, например, тапл (&str, i32), где второе значение будет уровень вложенности.
@ddae58157abd49eaa87a31e7e1e30b01 Anonymous 2020-06-17 01:36:42
https://github.com/Geal/nom/blob/master/examples/s_expression.rs
Отличный пример, всё понятно сразу стало.