我需要在使用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
如何在该特定位置产生错误?
答案 0 :(得分:2)
没有直接支持在操作员的映射功能中触发错误。
在OPP reference的“更多使用后字符串解析器”部分中,您可以找到有关如何获取二元运算符的精确文本位置的示例。您还可以让术语解析器在其结果值中包含文本位置。获得位置后,可以在AST中构建“错误节点”,然后在以后手动生成错误。