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