0

我正在尝试在 Sprache 中编写一个解析器来解析一个短语

基本规则是它应该包含由单个空格分隔的单词,字符串的第一个和最后一个字符都是一个空格。

我希望调用如下内容:

string phrase = PhraseParser.Parse("         I want to return up to this point        ");

并让结果字符串为“我想回到这一点”。

我已经尝试了许多实现,但没有一个完全适合我。

更新 感谢@PanagiotisKanavos,诀窍是使用 .Then() 运算符。下面的话:

public static Parser<string> WordParser =
        Parse.Letter.Many().Text().Token();

public static Parser<string> PhraseParser =
        from leading in Parse.LetterOrDigit.Many().Text()
        from rest in Parse.Char(' ').Then(_ => WordParser).Many()
        select leading + " " + String.Join(" ", rest);

可能仍然可以清理一下,但这个概念就在那里。

4

1 回答 1

2

感谢@PanagiotisKanavos,诀窍是使用 .Then() 运算符。以下作品:

public static Parser<string> WordParser =
    Parse.Letter.Many().Text().Token();

public static Parser<string> PhraseParser =
    from leading in Parse.LetterOrDigit.Many().Text()
    from rest in Parse.Char(' ').Then(_ => WordParser).Many()
    select leading + " " + String.Join(" ", rest);
于 2019-05-13T13:34:04.310 回答