【问题标题】:Sprache: parse signed integerSprache:解析有符号整数
【发布时间】:2014-01-28 18:52:33
【问题描述】:

我想知道是否有更好的方法来使用 Sprache 解析器框架来解析有符号整数。

对于不带符号的整数有众所周知的解析器定义 Parse.Number.Select(int.Parse)

但我也想解析带有- 前缀的整数。

我现在得到的是Parse.Regex(@"\-?\d+").Select(int.Parse)

在不使用正则表达式的情况下,有没有更好的方法来做到这一点?

例如使用Parse.Char('-').Optional(),然后解析以下数字。

谢谢

【问题讨论】:

    标签: c# parsing integer sprache


    【解决方案1】:

    我这样做的方式类似于以下:

    from op in Parse.Optional(Parse.Char('-').Token())
    from num in Parse.Decimal
    from trailingSpaces in Parse.Char(' ').Many()
    select decimal.Parse(num) * (op.IsDefined ? -1 : 1);
    

    当然,根据您正在解析的上下文,省略 trailingSpaces 部分。

    【讨论】:

    • 谢谢@Geoff。那是(可能)我正在寻找的东西。但是......现在我正在冥想:) - 你给定的方法是否比我的“更好”......它要长得多,如果你不太了解 Sprache,我会说更难阅读。总之感谢。 +1
    • 当然——而且我知道如果您不经常使用 Sprache 会更难阅读是什么意思。另一方面,我不经常使用正则表达式,而且我发现 "\-?\d+" 很不直观!
    • 第二行为什么不用 Parse.Number.Select(int.Parse) 代替呢?另外,在?中添加“+”。
    • 另外,Geoff,您在那里解析空格有什么特别的原因吗?
    • @Gordon - Parse.Decimal 和空格处理都在那里,因为我从需要处理小数的解析器项目中提取了代码 - 但 Parse.Number 也可以。我将选择留到最后,因为很容易收集找到的部分并在一个块中处理它们;在实际代码中,我正在实例化一个类,即select new DecimalExpression(...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2011-04-28
    • 2016-08-13
    • 2019-08-11
    • 2022-12-19
    相关资源
    最近更新 更多