jmi*_*ite 8 parsing haskell parsec ghc parser-combinators
我正在编写一种使用Parsec进行解析的编程语言.为了报告错误消息,我使用Parsec 的Pos模块中的getPosition
函数将语法树的每个元素标记为其源位置.
但是,它只给出了我解析的每个表达式的开头的位置,我想要开头和结尾,这样我就可以在源代码中突出显示它们的整个位置.
用parsec这样的事情可能吗?是否有一种标准的方法来获取我正在解析的表达式的终点,以便我可以将它包含在我的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)
Run Code Online (Sandbox Code Playgroud)
测试:
> parseTest (spanned (many1 (char 'a'))) "aaaaafff"
((line 1, column 1),(line 1, column 6),"aaaaa")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
263 次 |
最近记录: |