问题标签 [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.
haskell - 抑制某些 Haskell Alex/Happy 编译消息
当使用 Alex lexer 生成器或 Happy 解析器生成器创建 aLexer.x
或解析器时,将它们编译成 Haskell 文件,并将它们编译成目标文件,默认情况下这将生成以下“警告”:Parser.y
这些行是由于生成的.hs
文件中嵌入了以下行而出现的:
为什么包括这些行,如果命令行显然没有用于生成的词法分析器和解析器中的任何内容,是否有办法抑制这些消息?
haskell - 有没有办法将 Haskell 代码放在 Alex 源文件中的令牌规则之前?
考虑以下有效的Alex源文件:
我很想把我的帮助代码放在文件顶部,在所有规则之前。我试过这样做:
但出现以下错误:
(第 11 行是我的帮助代码之后的右花括号)
有没有办法将我的帮助代码移近文件顶部?
我还尝试将帮助程序代码与“module Main”声明一起放在第一个块中,但这不起作用,因为“%wrapper”位会生成一些导入语句,这些语句需要在生成的文件中作为第一件事出现。
haskell - 如何在 Happy 中使用 Alex monadic 词法分析器?
我正在尝试学习使用 Alex + Happy 构建解析器,特别是我对学习使用monad
Alex 的包装器感兴趣。我已经查看了 Alex 和Happy的文档,但对我来说,他们都缺乏任何关于一起使用它们的有用信息。我设法让它们与basic
和posn
包装器一起工作,但我对monad
.
我已经看过关于 Alex、Happy 和 monadic 词法分析器的 SO 上的不同问题(包括:是否有关于使用 Alex + Happy 构建简单解释器的教程?但没有一个能够提供使用的简单示例monad
。
大多数在线代码使用 Happy 和自定义词法分析器函数,或使用basic
或posn
Alex 包装器。
这是一个类似 ini 语法的简单词法分析器:
这是相对的 Happy 解析器:
这引发了很多编译器错误:
我应该如何修改解析器来使用alexMonadScan
?Happy文档根本不清楚,并且努力不使用任何说明性示例(或者从我的角度来看,提供的示例无法说明)。
如果需要,我可以发布我posn
的同一个词法分析器+解析器的版本。
parsing - 与 Alex 和 Happy 一起管理职位信息
我正在学习使用 Alex 和 Happy 编写一个小型编译器。我想为我的 AST 节点维护行和列信息,以便向用户提供有意义的错误消息。为了说明我打算如何做,我写了一个小例子(见下面的代码),我想知道我解决问题的方式(将 AlexPosn 附加到令牌,将多态属性字段附加到 AST 节点, 使用 tkPos 和 astAttr) 是很好的风格,或者如果有更好的方法来处理位置信息。
词法分析器.x:
解析器.y:
主要.hs:
haskell - 使用另一个文件中的 Alex 宏
有没有办法在一个源文件中定义一个 Alex 宏并在其他源文件中使用?就我而言,我有$LowerCaseLetter
and的定义$UpperCaseLetter
(这些都是字母,除了e
and O
,因为它们在我的代码中具有特殊的作用)。如何从其他.x
文件中引用这些宏?
haskell - 如何将命令行选项传递给 Cabal 中的 Alex
在我当前的项目中,我有一个文件Tokens.x
需要Tokens.hs
由 Alex 编译。在我的.cabal
文件中,我已Tokens
在该other-modules
部分中列出并cabal build
愉快地创建了该文件。
但是,它在没有指示 Alex 创建文件的 GHC 优化版本的 -g 选项的情况下这样做。当与 GHC 一起使用时,此选项表示扫描速度提高了 10 倍,并且编译速度也提高了一个数量级。
使用 GHC 编译时,如何告诉 cabal 包含 -g 选项?
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 文件,该文件仍然存在建造。但我不确定这一点。
是我的错误还是其中一种工具行为不端?
haskell - 如何使用 Alex lexer 解析 C 风格的注释?
注意。我正在使用Simon Marlow 的这个 Alex 模板。
我想为 C 风格的注释创建词法分析器。我目前的方法为开始评论、结束、中间和单行创建单独的标记
- 如何减少中间令牌的数量?对于输入
/*blabla*/
,我将获得 8 个令牌而不是 1 个! - 如何
//
从单行注释标记中剥离部分? monad
是否可以在没有包装器的情况下使用 lex 评论?
haskell - 如何为 Alex lexer 指定制表符宽度?
Alex 文档(第 5 章)说:
您可能希望 Alex 跟踪输入文本中的行号和列号,或者您可能希望自己完成(例如,您可能使用与标准 8 列不同的制表符宽度)
但是在 Alex 位置跟踪器中将标签宽度从 8 更改为 4 并不容易。代码隐藏在 Alex 生成的例程中:
haskell - Haskell Alex:基本字节串词法分析器泄漏内存
我正在尝试编写一个简单的词法分析器,它将打印其输入中的所有单词,其中一个单词是最大字母序列a-zA-Z
。必须忽略所有其他字符。
我的 Alex 程序使用basic-bytestring
包装器使用与输入大小一样多的内存。我原以为它会在恒定内存中运行。
使用的堆配置文件-hc
仅显示单个固定内存块迅速上升到输入的大小,然后缓慢下降到 0。
有趣的是,当使用basic
包装器和普通字符串时,只使用常量内存。
亚历克斯输入文件是
当使用大小为 10M 的输入运行时,输出+RTS -s
为
对于我哪里出错或如何进一步调查此问题,我将不胜感激。