Happy和Alex如何引导自己成为自己?
happy
的源代码树包含AttrGrammarParser.ly
和Parser.ly
, alex
的源代码树包含Scan.x
然而,据我所知,为了编译happy
,我们需要使用... happy
地将.ly
文件转换成.lhs
文件,为了编译alex
我们需要将.x
文件转换成.hs
文件使用... alex
。
因此,为了编译任何工具,似乎必须有一些引导进行。
每个项目的Setup.lhs
文件都包含一些模板扩展,但据我所知,不要执行任何特别的操作来执行引导。
引导程序如何以及在哪里完成?
我看到您正在darcs.haskell.org上查看这些软件包的darcs存储库的源代码树。 如果你看看Hackage上的实际tarball,你会看到一些不同的东西:
https://hackage.haskell.org/package/alex-3.1.4/src/dist/build/alex/alex-tmp/
https://hackage.haskell.org/package/happy-1.19.5/src/dist/build/happy/happy-tmp/
所以基本上所需的构建工件随Hackage tarball一起发货。 然后Cabal只是在构建过程中使用构建工件,从而避免了在本地引导的需要。 当你为自己的软件包运行cabal sdist
时,Cabal也知道如何保留这样的构建工件,而不想依赖于开发人员或alex,但是最后我检查了它与sandboxes,fwiw没有良好的互操作性。
顺便说一句,亚历克斯和快乐的发展已经转移到github:
https://github.com/simonmar/alex/
https://github.com/simonmar/happy/
链接地址: http://www.djcxy.com/p/65635.html