gpt4 book ai didi

haskell - 使用 parsec 获取已解析源中的当前位置

转载 作者:行者123 更新时间:2023-12-02 15:41:14 24 4
gpt4 key购买 nike

假设我有以下解析器和 token 类型:

data Token = TokInt SourcePos Int

parseInt :: Parser Token
parseInt = do
numStr <- many1 digit
return $ TokInt (???) (read numStr)

如何用当前的SourcePos填写缺失的部分(???)

我在下一步中需要此信息。

我当前的流程是在第一次运行时对完整输入进行标记,然后根据生成的标记列表构建我的 AST。因此标记化可以成功,但是在构建 AST 时可能会出现错误,我想将用户指向文件中发生错误的实际位置,因此我需要保存源代码中标记的位置。

最佳答案

此函数返回 ParsecT 中的当前源位置:

import Text.Parsec.Prim

sourcePos :: Monad m => ParsecT s u m SourcePos
sourcePos = statePos `liftM` getParserState

然后你可以这样做:

parseInt :: Parser Token
parseInt = do
numStr <- many1 digit
pos <- sourcePos
return $ TokInt pos (read numStr)

关于haskell - 使用 parsec 获取已解析源中的当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com