首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Parsec中的SourceName

理解Parsec中的SourceName
EN

Stack Overflow用户
提问于 2018-02-09 17:10:40
回答 1查看 237关注 0票数 4

关于SourceNameparse函数中在Parsec中的意义,我有一个问题。我读过的所有书籍/博客/教程似乎都跳过了它是什么,而使用了"stdin""(stdin)"或任意字符串(如"test parser" )。它对指定的SourceName有什么区别吗?

我试着阅读“源代码 of Parsec”,它似乎是用来创建一个职位的。但是为什么它的来源很重要(作为一个String )。听起来,在大多数情况下,我不需要担心。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 19:35:12

在Parsec中,SourceName是用于生成错误消息的String。在REPL中,这并不是很重要:

代码语言:javascript
复制
λ> parse expression "<stdin>" ")"
Left "<stdin>" (line 1, column 1):
unexpected ")"
expecting expression

如果我们使用的是"foo"而不是"<stdin>",那么如果是这样的话:

代码语言:javascript
复制
Left "foo" (line 1, column 1):
unexpected ")"
expecting expression

这在编写一个以多个文件作为输入的程序时非常有用,比如编译器或解释器。例如,在我的解释器中,我具有以下功能:

代码语言:javascript
复制
runFile :: FilePath -> IO ()
runFile path = do code  <- readFile path
                  start <- prelude
                  evalString path start code >>= putStrLn

这里,我将您正在运行的文件的path-the路径传递到解析表达式的函数中。这样,错误消息将告诉您哪个文件有解析错误,以及行号。

代码语言:javascript
复制
λ> runFile "/Users/tikhon/tmp/foo.tpl"
Error: "/Users/tikhon/tmp/foo.tpl" (line 1, column 1):
unexpected ')'
expecting expression or end of input!
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48710847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档