Sprache - комбинация парсеров

Используя Sprache, у меня есть парсеры A,B,C,D, которые совпадают с разными входными частями и выбирают (возвращают) разные экземпляры классов. В моем входе есть много частей в случайном порядке, экв. "Abaabccbdbabddba". Мне нужно выбрать все "а" и "б" и т. Д. - порядок не имеет значения:

  from a_list in A.Many()
  from b_list in B.Many()
  from c_list in C.Many()
  from d_list in D.Many()

не будет работать таким образом. Как я могу описать эту ситуацию (лучший способ) в Sprache?

1 ответ

Старые вопросы с 6 лет без ответа. Следующий код может кому-то помочь:

        var segment=
                from start in Parse.Letter.Once()
                let a =start.First()
                from rest in Parse.Chars(a).Many()
                select start.Concat(rest);            
            var allSegments = segment.Many();
        
        //test
            var text = "abaabccbdbabddba";         
            var result=allSegments.Parse(text);  

выход:

      aa
cc
dd

Попытайся

Другие вопросы по тегам