gpt4 book ai didi

parsing - Parsec:获取表达式的开始和结束源位置?

转载 作者:行者123 更新时间:2023-12-04 03:57:13 24 4
gpt4 key购买 nike

我正在编写一种使用 Parsec 进行解析的编程语言。为了报告错误消息,我使用 getPosition 将语法树的每个元素都标记了其源位置。函数来自 the Pos module 秒差距。

但是,它只给出了我解析的每个表达式的开头位置,我想要开头和结尾,这样我就可以在源代码中突出显示它们的整个位置。

使用秒差可以做到这一点吗?有没有一种标准的方法来获取我正在解析的表达式的端点,以便我可以将它包含在我的 AST 中?

最佳答案

您可以使用 getPosition在你解析之后。

import Text.Parsec
import Text.Parsec.String

spanned :: Parser a -> Parser (SourcePos, SourcePos, a)
spanned p = do
pos1 <- getPosition
a <- p
pos2 <- getPosition
pure (pos1, pos2, a)

测试:
> parseTest (spanned (many1 (char 'a'))) "aaaaafff"
((line 1, column 1),(line 1, column 6),"aaaaa")

关于parsing - Parsec:获取表达式的开始和结束源位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36078405/

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