在FParsec的OperatorPrecedenceParser

时间:2017-08-27 18:30:24

标签: parsing f# parser-combinators fparsec

我需要在使用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

如何在该特定位置产生错误?

1 个答案:

答案 0 :(得分:2)

没有直接支持在操作员的映射功能中触发错误。

OPP reference的“更多使用后字符串解析器”部分中,您可以找到有关如何获取二元运算符的精确文本位置的示例。您还可以让术语解析器在其结果值中包含文本位置。获得位置后,可以在AST中构建“错误节点”,然后在以后手动生成错误。