我正在学习使用Alex和Happy编写一个小型编译器。我希望为我的AST节点维护行列信息,以便向用户提供有意义的错误消息。为了说明我计划如何做到这一点,我写了一个小例子(请参见下面的代码),我想知道我解决问题的方式(将AlexPosn附加到标记上,将多态属性字段附加到AST节点上,使用tkPo...
我正在开发一个小的Haskell项目,需要将一个非常简单的、严格格式化的英语子集转换为用于语义分析的标记。它是一个非常天真的自然语言接口,可以向具有许多不同末端效应器的系统发出命令。我目前正在使用Alex来实现这一点,但Alex依赖于其词典被静态编译。由于系统的性质是在编译之后可以增加或减少世...
我正在尝试使用Alex + Happy构建解析器,特别是我有兴趣学习如何使用Alex的monad包装器。我已经查看了Alex和Happy的文档,但它们对于我来说都缺乏有用的关于如何将它们一起使用的信息。我已经成功地将它们与basic和posn包装器一起使用,但是对于monad我感到不知所措。 ...
我正在为一门课程编写一个编译器。这门课程并不是专门讲授Haskell,但我选择使用Haskell来编写我的编译器和解释器。我已经设置了一个Cabal包,希望能够方便我的教授运行和编译。 在"build-tools"字段中,我已经添加了Happy和Alex两个可执行文件,但是Cabal忽略了这...
将词法分析和解析阶段合并成一个阶段有时会使Parsec解析器变得不太易读,并且会减慢它们的速度。一种解决方案是使用Alex作为分词器,然后在token流上使用Parsec作为解析器。 这样是可以的,但更好的方法是摆脱Alex,因为它增加了编译流程中的预处理阶段,与Haskell "IDE"集...
在使用Alex词法分析器生成器或Happy解析器生成器创建Lexer.x或Parser.y解析器时,将其编译为Haskell文件并编译为对象文件,默认情况下会生成以下“警告”: $ ghc Lexer line-map.c: file "<command-line>" left ...
happy的源代码树中包含AttrGrammarParser.ly和Parser.ly,而alex的源代码树中则包含Scan.x。但是,据我所知,为了编译happy,我们需要使用happy将.ly文件转换为.lhs文件,而为了编译alex,我们需要使用alex将.x文件转换为.hs文件。因此,...