问题标签 [alex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
627 浏览

haskell - 抑制某些 Haskell Alex/Happy 编译消息

当使用 Alex lexer 生成器或 Happy 解析器生成器创建 aLexer.x或解析器时,将它们编译成 Haskell 文件,并将它们编译成目标文件,默认情况下这将生成以下“警告”:Parser.y

这些行是由于生成的.hs文件中嵌入了以下行而出现的:

为什么包括这些行,如果命令行显然没有用于生成的词法分析器和解析器中的任何内容,是否有办法抑制这些消息?

0 投票
1 回答
174 浏览

haskell - 有没有办法将 Haskell 代码放在 Alex 源文件中的令牌规则之前?

考虑以下有效的Alex源文件:

我很想把我的帮助代码放在文件顶部,在所有规则之前。我试过这样做:

但出现以下错误:

(第 11 行是我的帮助代码之后的右花括号)

有没有办法将我的帮助代码移近文件顶部?

我还尝试将帮助程序代码与“module Main”声明一起放在第一个块中,但这不起作用,因为“%wrapper”位会生成一些导入语句,这些语句需要在生成的文件中作为第一件事出现。

0 投票
1 回答
4996 浏览

haskell - 如何在 Happy 中使用 Alex monadic 词法分析器?

我正在尝试学习使用 Alex + Happy 构建解析器,特别是我对学习使用monadAlex 的包装器感兴趣。我已经查看了 Alex 和Happy的文档,但对我来说,他们都缺乏任何关于一起使用它们的有用信息。我设法让它们与basicposn包装器一起工作,但我对monad.

我已经看过关于 Alex、Happy 和 monadic 词法分析器的 SO 上的不同问题(包括:是否有关于使用 Alex + Happy 构建简单解释器的教程?但没有一个能够提供使用的简单示例monad

大多数在线代码使用 Happy 和自定义词法分析器函数,或使用basicposnAlex 包装器。

这是一个类似 ini 语法的简单词法分析器:

这是相对的 Happy 解析器:

这引发了很多编译器错误:

我应该如何修改解析器来使用alexMonadScanHappy文档根本不清楚,并且努力不使用任何说明性示例(或者从我的角度来看,提供的示例无法说明)。

如果需要,我可以发布我posn的同一个词法分析器+解析器的版本。

0 投票
1 回答
1883 浏览

parsing - 与 Alex 和 Happy 一起管理职位信息

我正在学习使用 Alex 和 Happy 编写一个小型编译器。我想为我的 AST 节点维护行和列信息,以便向用户提供有意义的错误消息。为了说明我打算如何做,我写了一个小例子(见下面的代码),我想知道我解决问题的方式(将 AlexPosn 附加到令牌,将多态属性字段附加到 AST 节点, 使用 tkPos 和 astAttr) 是很好的风格,或者如果有更好的方法来处理位置信息。

词法分析器.x:

解析器.y:

主要.hs:

0 投票
1 回答
104 浏览

haskell - 使用另一个文件中的 Alex 宏

有没有办法在一个源文件中定义一个 Alex 宏并在其他源文件中使用?就我而言,我有$LowerCaseLetterand的定义$UpperCaseLetter(这些都是字母,除了eand O,因为它们在我的代码中具有特殊的作用)。如何从其他.x文件中引用这些宏?

0 投票
1 回答
414 浏览

haskell - 如何将命令行选项传递给 Cabal 中的 Alex

在我当前的项目中,我有一个文件Tokens.x需要Tokens.hs由 Alex 编译。在我的.cabal文件中,我已Tokens在该other-modules部分中列出并cabal build愉快地创建了该文件。

但是,它在没有指示 Alex 创建文件的 GHC 优化版本的 -g 选项的情况下这样做。当与 GHC 一起使用时,此选项表示扫描速度提高了 10 倍,并且编译速度也提高了一个数量级。

使用 GHC 编译时,如何告诉 cabal 包含 -g 选项?

0 投票
1 回答
458 浏览

haskell - Alex、Happy、Cabal 和重新预处理

我正在使用 Alex 3.0.5、Happy 1.18.10、Cabal 1.16.0.2

我有一个使用 Cabal 构建的小型编译器项目。我将编译器的内部作为库公开,所以我在公开的模块部分有 MyLangLex 和 MyLangPar。如果我删除 Alex 和 Happy 生成的 .hs 文件,然后运行 ​​cabal configure,然后 cabal build 将首先运行 Alex 和 Happy,生成文件,然后继续构建,一切正常。但是,如果我不删除这些文件,Alex 和 Happy 要么不构建文件,要么没有将它们放在正确的位置。我觉得Happy跑了,因为我看到了Happy发来的信息;但是,当我查看应该生成的 .hs 文件时,它是不正确的(其中没有变化),我可以确定 .hs 文件的版本。Cabal 在构建中使用的 hs 文件是错误的,因为应该改变的行为没有。即对 .y 文件的更改没有合并到构建的程序中,所以我怀疑在运行 Happy 时,Cabal 将此文件放在某个临时目录中,然后使用旧的 .hs 文件,该文件仍然存在建造。但我不确定这一点。

是我的错误还是其中一种工具行为不端?

0 投票
1 回答
1317 浏览

haskell - 如何使用 Alex lexer 解析 C 风格的注释?

注意。我正在使用Simon Marlow 的这个 Alex 模板

我想为 C 风格的注释创建词法分析器。我目前的方法为开始评论、结束、中间和单行创建单独的标记

  • 如何减少中间令牌的数量?对于输入/*blabla*/,我将获得 8 个令牌而不是 1 个!
  • 如何//从单行注释标记中剥离部分?
  • monad是否可以在没有包装器的情况下使用 lex 评论?
0 投票
1 回答
92 浏览

haskell - 如何为 Alex lexer 指定制表符宽度?

Alex 文档(第 5 章)说:

您可能希望 Alex 跟踪输入文本中的行号和列号,或者您可能希望自己完成(例如,您可能使用与标准 8 列不同的制表符宽度)

但是在 Alex 位置跟踪器中将标签宽度从 8 更改为 4 并不容易。代码隐藏在 Alex 生成的例程中:

0 投票
0 回答
138 浏览

haskell - Haskell Alex:基本字节串词法分析器泄漏内存

我正在尝试编写一个简单的词法分析器,它将打印其输入中的所有单词,其中一个单词是最大字母序列a-zA-Z。必须忽略所有其他字符。

我的 Alex 程序使用basic-bytestring包装器使用与输入大小一样多的内存。我原以为它会在恒定内存中运行。

使用的堆配置文件-hc仅显示单个固定内存块迅速上升到输入的大小,然后缓慢下降到 0。

有趣的是,当使用basic包装器和普通字符串时,只使用常量内存。

亚历克斯输入文件是

当使用大小为 10M 的输入运行时,输出+RTS -s

对于我哪里出错或如何进一步调查此问题,我将不胜感激。