解析器的组合

本文关键字:组合 | 更新日期: 2023-09-27 18:12:48

使用Sprache,我有解析器A,B,C,D,它们与不同的输入部分匹配,并选择(返回)不同的类实例。在我的输入中有很多随机顺序的部分,方程。"abaabccbdbabddba"。我需要选择所有的"a"-s和"b"-s等等-顺序无关:

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

不能这样工作。我该如何用英语描述这种情况(最好的方式)?

解析器的组合

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

试试