我正在尝试用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);
可能仍然可以将其清理干净,但是概念仍然存在。
答案 0 :(得分: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);