【问题标题】:FParsec alternatives getting parser which parsed inputFParsec 替代方法获取解析输入的解析器
【发布时间】:2017-05-30 15:12:12
【问题描述】:

使用替代解析器时,是否可以选择获取哪个解析器匹配输入。

我的输入字符串可以是下面的格式

{firstPart_number} {secondPart_operator_symbol} {thirdPart}

这里 firstPart 始终是数字,第二部分是解析运算符的替代解析器,第三部分也是替代(数字,字符串列表)。

样本输入

 1 + 2 
 5 * 3 
 1 in {2,45,6}

由于我的可区分联合属于不同类型,我想知道哪个解析器匹配输入,以便基于该解析器创建可区分联合类型的实例?

如何在 FParsec 中处理这种情况,我的第一部分在解析器中是相同的,但第二和第三个解析器是不同的,并且基于使用 |>> 的实例化类型

【问题讨论】:

  • 您能否给我们看一段代码 sn-p(不是整个代码,只是一个相关的简短 sn-p),以便我们了解您如何连接您的替代解析器?仅从您给出的描述中很难描绘出您的代码。
  • 我的一个想法是,您可以将每个替代解析器包装在 |>> 运算符中。像let pOperator = (pstr "*" |>> OpTimes) <|> (pstr "+" |>> OpPlus) <|> (pstr "in" |>> OpIn) 这样的东西。但我想看看你的代码,这样我可以提供更好的建议。

标签: f# fparsec


【解决方案1】:

我目前的问题是使用带有替代方法的尝试解析器解决的。如果不匹配,尝试将回溯,下一个替代解析器将再次解析输入并匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多