19得票1回答
使用Alex和Happy管理位置信息

我正在学习使用Alex和Happy编写一个小型编译器。我希望为我的AST节点维护行列信息,以便向用户提供有意义的错误消息。为了说明我计划如何做到这一点,我写了一个小例子(请参见下面的代码),我想知道我解决问题的方式(将AlexPosn附加到标记上,将多态属性字段附加到AST节点上,使用tkPo...

15得票2回答
使用Cabal时,与Alex/Happy配合使用。

我正在为一门课程编写一个编译器。这门课程并不是专门讲授Haskell,但我选择使用Haskell来编写我的编译器和解释器。我已经设置了一个Cabal包,希望能够方便我的教授运行和编译。 在"build-tools"字段中,我已经添加了Happy和Alex两个可执行文件,但是Cabal忽略了这...

13得票1回答
如何在Happy中使用Alex单子词分析器?

我正在尝试使用Alex + Happy构建解析器,特别是我有兴趣学习如何使用Alex的monad包装器。我已经查看了Alex和Happy的文档,但它们对于我来说都缺乏有用的关于如何将它们一起使用的信息。我已经成功地将它们与basic和posn包装器一起使用,但是对于monad我感到不知所措。 ...

12得票2回答
有没有一个用于编写词法分析器的 Haskell EDSL?

将词法分析和解析阶段合并成一个阶段有时会使Parsec解析器变得不太易读,并且会减慢它们的速度。一种解决方案是使用Alex作为分词器,然后在token流上使用Parsec作为解析器。 这样是可以的,但更好的方法是摆脱Alex,因为它增加了编译流程中的预处理阶段,与Haskell "IDE"集...

10得票1回答
Happy和Alex如何自给自足?

happy的源代码树中包含AttrGrammarParser.ly和Parser.ly,而alex的源代码树中则包含Scan.x。但是,据我所知,为了编译happy,我们需要使用happy将.ly文件转换为.lhs文件,而为了编译alex,我们需要使用alex将.x文件转换为.hs文件。因此,...

8得票1回答
抑制某些Haskell Alex/Happy编译消息

在使用Alex词法分析器生成器或Happy解析器生成器创建Lexer.x或Parser.y解析器时,将其编译为Haskell文件并编译为对象文件,默认情况下会生成以下“警告”: $ ghc Lexer line-map.c: file "<command-line>" left ...

7得票1回答
Haskell中是否有现成的词法分析解决方案,可以允许动态运行时词汇表?

我正在开发一个小的Haskell项目,需要将一个非常简单的、严格格式化的英语子集转换为用于语义分析的标记。它是一个非常天真的自然语言接口,可以向具有许多不同末端效应器的系统发出命令。我目前正在使用Alex来实现这一点,但Alex依赖于其词典被静态编译。由于系统的性质是在编译之后可以增加或减少世...