gpt4 book ai didi

c# - 使用 Sprache 从标识符解析枚举?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:41 25 4
gpt4 key购买 nike

我开始使用 Sprache 来解析数学表达式的领域特定语言。我知道我可以使用如下方法解析标识符:

    static readonly Parser<string> Identifier = 
from leading in Parse.WhiteSpace.Many()
from first in Parse.Letter.Once()
from rest in Parse.LetterOrDigit.Many()
from trailing in Parse.WhiteSpace.Many()
select new string(first.Concat(rest).ToArray());

据此,我想构建一个解析器,它只有在标识符标记是枚举的文本值之一时才会成功。假设我有一个名为 Dimension 的枚举,其值为 Dimension.Location 和 Dimension.Time。我要制作

    static readonly Parser<Dimension> DimensionIdentifier = ...

只有当被解析的是标识符并且标识符的标记字符串是枚举名称之一(“Location”或“Time”)时才会成功,并且返回枚举值、Dimension.Location 或 Dimension .时间分别。有人可以帮助解决一个可能很简单的问题吗?谢谢!

最佳答案

我使用以下方法:

public static Parser<TEnum> ParseEnum()
{
return Enum.GetValues(typeof(TEnum))
.Cast<TEnum>()
.Select(value => Parse.IgnoreCase(Enum.GetName(typeof(TEnum), value)).Return(value))
.Aggregate((x, y) => x.Or(y));
}

类似于dbugger's answer ,因为它仍然基于 Parse.Or,但以更实用的风格编写。

关于c# - 使用 Sprache 从标识符解析枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32699833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com