我正在尝试解析一组项目,使用 C# 的 Sprache 库我有一个像这样的工作代码。
public static Parser<string> Array =
from open in OpenBrackets.Named("open bracket")
from items in Literal.Or(Identifier).Or(Array).DelimitedBy(Comma).Optional()
from close in CloseBrackets.Named("close bracket")
select open + (items.IsDefined ? string.Join(", ", items.Get()) : " ") + close;
其中“Literal”是数字或字符串的解析器,“Identifier”是变量标识符的解析器,“Comma”是逗号标记的解析器。但是,如果我希望数组允许为空“[]”,我需要添加 Optional() 属性并验证是否定义了“items”:
select open + (items.IsDefined ? string.Join(", ", items.Get()) : " ") + close;
是否有更好的清洁方法来解析由分隔符分隔的项目列表,该列表可以为空(列表)。我可以在其他项目列表中重复使用。
输入数据结构示例:
[Literal/Identifier/Array] => Value;
[Value] [,Value]* => Array
[public/private] [identifier]; => Declaration;
[public/private] [identifier] [[=] [Value]] => Initialization;