用于解析Bash脚本的Haskell库?

7
有没有Haskell库可以解析任意Bash脚本?在Hackage上的初步搜索表明有一个名为“bash”的包用于编写脚本,但我没有看到任何用于解析脚本的东西。基本上,我刚刚接手了大量的Bash脚本,并希望对其进行一些代码分析。但第一阶段显然是能够解析这些内容。我个人不太了解Bash。 我想我可以坐下来浏览繁琐的man页以获取完整的BNF语法。(考虑到shell的漫长和向后兼容的历史,我想它非常复杂。)我只是想知道是否已经有别人替我完成了这项工作...

4
祝你好运。如果你要自己编写解析器的话,你会需要运气的。 - Satvik
我认为你最好尝试查看bash代码并从那里的解析器开始工作。存在Haskell bash解析器的可能性似乎很小。有可能使用本地Haskell库来获取AST。可能性:[libbash](http://dev.gentoo.org/~qiaomuf/libbash.html); [jBash](http://code.google.com/p/jbash/); [其他人想编写解析器](https://bbs.archlinux.org/viewtopic.php?id=101893),等等。 - Orbling
3
在Bash源代码中,yacc文件有6000行,似乎有相当多的技巧性。但我认为BNF本身并不那么糟糕。 - Rafael Caetano
1
@MathematicalOrchid sh 通常不是指向 bash 的符号链接,尽管我相信在 OSX 和其他一些系统上是这样的。Debian 有一个名为 checkbashisms 的工具非常好用。最常用的扩展是 [[ - singpolyma
1
@singpolyma,我所拥有的脚本中确实大量使用了“[[”。所以,是的,我猜它确实是Bash... - MathematicalOrchid
显示剩余2条评论
1个回答

4
也许可以扩展language-sh

Language.Sh是一组用于解析和操作shell语法表达式的模块。这是一个更大项目shsh的一部分。请注意,API在我们达到1.0版本之前可能会有些不稳定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接