在 FParsec 的 OperatorPrecedenceParser 中生成错误

Generating errors in FParsec's OperatorPrecedenceParser

我需要在使用 FParsec 的 OperatorPrecedenceParsers 解析运算符时产生错​​误,特别是在映射阶段。假设我有以下代码:

let pOperatorExpr : ExpressionParser =
    let opp = new OperatorPrecedenceParser<MyType, unit, unit>()
    let arithmeticOperator a b ->
        if someOperation a b then
            // Fatal error! Abort!
        else foobar a b

    opp.AddOperator(InfixOperator("+", spaces, 1, Associativity.Left, arithmeticOperator)
    opp.ExpressionParser

我应该怎么做才能在那个特定位置产生错误?

运算符的映射函数不直接支持触发错误。

OPP reference 的 "More uses of the after‐string‐parser" 部分中,您可以找到有关如何获取二进制运算符的精确文本位置的示例。您还可以让您的术语解析器在其结果值中包含文本位置。一旦你有了这些位置,你就可以在你的 AST 中构建一个 "error node",然后稍后手动生成一个错误。