我将这些解析器作为语法的一部分:
public static readonly Parser<string> SpaceOrTab =
Parse.Char(' ').Or(Parse.Char('\t')).Many().Text().Named("SpaceOrTab");
public static readonly Parser<string> NewLine = Parse.LineEnd;
public static readonly Parser<string> NewLineToken = Parse.LineEnd.Contained(SpaceOrTab, SpaceOrTab);
public static readonly Parser<string> NewLineSeparator = NewLineToken.AtLeastOnce().Select(x => string.Join("", x));
public static readonly Parser<string> CommaSeparator = Parse.String(",").Token().Text();
public static readonly Parser<string> Separator = NewLineSeparator.Or(CommaSeparator).Named("Separator");
我想要一个分隔符解析器,它要么是“至少一个 LineEnd”,要么是一个逗号。
这样我就可以解析以下内容:
1, 2 , 3 , 4
或者
1
2
3
4
我已经尝试了很多不同的选项来定义 NewLineSeparator 但我显然做错了。用逗号分隔工作正常,换行符解析器似乎没有得到任何匹配。
如果有人想偷看,可以在这里找到完整的源代码:https ://github.com/rogeralsing/SpracheHocon/blob/master/SpracheHocon/Program.cs