2

我将这些解析器作为语法的一部分:

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

4

1 回答 1

0

尝试 .DelimitedBy(Parse.Chars("\r\t,"))

于 2016-06-23T23:50:37.200 回答