【问题标题】:FParsec list of string between special charFParsec 特殊字符之间的字符串列表
【发布时间】:2017-01-16 04:32:57
【问题描述】:

当尝试解析 {asdc,456,ghji,abc} 时,我运行

run specialListParser "{asdc,456,ghji,abc}"

解析器失败

错误发生在输入流的末尾。
期望:任何不在“,”、“,”或“}”中的字符

我基于这个answer定义了我的解析器:

let str : Parser<_> = many1Chars (noneOf ",")
let comma = pstring ","
let listParser = sepBy str comma

let specialListParser = between (pstring "{") (pstring "}") listParser

我错过了什么?

【问题讨论】:

  • “不工作”并不是一个很好的问题描述。
  • 请比“不工作”更具体。你得到什么错误信息?尝试从this section of the FParsec tutorial 实现test 函数并运行test specialListParser "{def,ghi,jkl}"。它输出什么?
  • 基本上,您还没有提供minimal, complete and verifiable example 来证明您的确切问题,在您告诉我们更多信息之前很难给您有用的答案。
  • 现在我看到了您的错误信息,我能够自己重现问题并修复它。

标签: f# fparsec


【解决方案1】:

看起来您的str 解析器正在使用最终的},因此between 永远无法看到它。将您的 str 解析器更改为 many1Chars (noneOf ",}"),它应该可以工作。

或者,noneOf [','; '}'] 也可以使用,并且可能更明确地表达您的意图。

【讨论】:

  • @rumnn 感谢您的回复。你的建议解决了成功的场景,但它没有给出负面的场景(解析器应该抛出错误)。
  • 我不明白您所说的“它不为负面情况而付出”是什么意思。你能改写一下吗?或者给出一个解析器应该抛出错误但没有抛出错误的输入示例?
  • @rumn 请忽略我之前的评论。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2017-07-16
  • 2016-05-05
  • 1970-01-01
相关资源
最近更新 更多