FParsec默认错误消息

时间:2011-08-27 02:25:51

标签: .net f# combinations parser-combinators fparsec

假设我正在定义以下解析器:

let identifier = many1Satisfy isLetter //match an identifier
let parser = identifier //our parser is only to match identifiers
test parser " abc" //the text to parse contains a leading space which should yield us an error

解析时,会出现错误,如预期的那样:

Failure: Error in Ln: 1 Col: 1
 abc
^
Unknown Error(s)

我很好奇为什么它不能决定问题是他期待一封信并且找不到一封信。我是否希望自己以某种方式将这些信息添加到解析器中?

2 个答案:

答案 0 :(得分:2)

为什么它不能告诉你什么是错的: 我想这是由于“many1Satisfy” - 你看到这个组合器包装另一个解析器,我猜它只是不知道“many1”出现错误的状态而不是错误 - 所以它说“未知错误(s) )“

这应该有效:

let ws = spaces
let identifier = ws >>. (many1Satisfy isLetter) //match an identifier, ignore whitespaces infront
let parser = identifier //our parser is only to match identifiers
test parser " abc"

答案 1 :(得分:0)

空格不是常规字符。在您的情况下,您需要忽略空格,因此您需要使用解析器组合您的解析器,该解析器忽略空格并使用这个新的组合解析器来解析标识符。

检查 4.6 Handling whitespace