我正在使用Megaparsec来获取代码的树表示形式,这些代码后来通过分离的函数进行评估。我想在树的节点中添加带有当前上下文的parsec函数来格式化错误。
为什么?例如:语法可能没有问题,但代码中的一些变量可能不存在,只有在以后处理树的分隔函数中才能找到这些变量。函数将不得不抛出错误,该变量不存在,如果我可以使用Megaparsec很好地格式化错误(带有行号、上下文、.),我会很高兴。
请问有什么办法吗?
谢谢。
发布于 2022-02-15 20:01:19
我相信你可以通过getSourcePos获得目前的职位。例如,在树生成的开放递归样式中,您可以编写
data Annotated f = Annotated
{ start :: SourcePos
, term :: f (Annotated f)
, end :: SourcePos
}
annotated :: (MonadParser e s m, TraversableStream s) =>
m (f (Annotated f)) -> m (Annotated f)
annotated p = liftA3 Annotated getSourcePos p getSourcePos(注:我还没试过,甚至还没有做过类型检查;我只是尽力用专家的眼光来解释兆赫秒的文档。(请注意。)。
https://stackoverflow.com/questions/71130998
复制相似问题