我正在尝试在 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);
可能仍然可以清理一下,但这个概念就在那里。