【发布时间】:2019-01-02 16:17:23
【问题描述】:
我使用一个函数:
let identifier kind =
(many1Satisfy2L isLetter
(fun c -> isLetter c || isDigit c) "identifier"
>>= fun s -> preturn s) >>= fun s -> identifierKind s kind
kind 参数属于这种类型:
type KindOfIdentifier =
| Data
| Type
| Module
这是我分析 kind 参数的函数:
let private identifierKind (id: string) kind =
match kind with
| KindOfIdentifier.Data ->
if id.ToUpper() = id && id.Length > 1 then preturn id
elif System.Char.IsUpper id.[0] = false then preturn id
else failwith "Error 1"
| KindOfIdentifier.Module ->
if System.Char.IsUpper id.[0] then preturn id
else failwith "Error 2"
| KindOfIdentifier.Type ->
preturn id
因此,我想分析一个标识符以验证它是否符合标识符类型的标准。如果识别它不符合标准,我返回一个错误failwith。
但是,当我在要分析的文本中使用此解析器(识别)时故意出现错误,以检查一切是否正常时,我得到一个很长的错误:
(对不起,我是法国人,所以错误信息中有一点法语^^。)
如何防止这一切,只用 FParsec 的经典方式显示错误信息?
【问题讨论】: