问题标签 [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 回答
440 浏览

parsing - 解析时我需要添加什么才能将 monadUserState 与 alex 一起使用?

我正在尝试编写一个程序来理解允许嵌入注释的语言。如:

这应该被识别为评论(因此不会在它看到的第一个 */ 处停止,除非它之前只看到 1 条评论打开)。

这将是一个在 C 中很容易解决的问题,我可以简单地设置一个计数器,当它看到评论打开时递增,当看到评论关闭时递减。如果计数器为 0,我们就在“代码部分”。

然而,在 Haskell 中没有状态,它更具挑战性。

我已经阅读了 monadUserState ,据说它允许跟踪这种确切类型的解析的状态。但是,除了alex 上的教程页面之外,我找不到太多关于它的阅读材料。

当我尝试编译时,它给出了错误

需要注意的是,我直接从“基本”包装器更改为“monadUserState”,而没有更改我的代码(我不知道要添加什么才能使用它)。它说这必须在用户代码中初始化:

我有点像 lexxing 菜鸟,我完全不确定我应该在这里添加什么以使其至少可以编译......然后我可以担心事情的逻辑。

0 投票
1 回答
223 浏览

haskell - 快乐和亚历克斯是如何引导自己成为现实的?

contains的源代码树和containshappy的源代码树。然而,据我所知,为了 compile ,我们需要使用 ...将文件转换为文件,并且为了编译,我们需要使用 ...将文件转换为文件。AttrGrammarParser.lyParser.lyalexScan.xhappy.ly.lhshappyalex.x.hsalex

因此,似乎这里必须进行一些引导才能编译任一工具。

每个项目的Setup.lhs文件都包含一些模板扩展,但据我所知,不要做任何特别的事情来进行引导。

引导是如何以及在哪里完成的?

0 投票
1 回答
107 浏览

haskell - 我是否正确安装了 cabal?

嗨,我刚刚通过命令将 cabal 更新到了最新版本

然后它返回

我想用亚历克斯和快乐。对不起,我对它很陌生..当我试图通过线路在 ghci 中发出 alex 时

它返回

我在网上搜索了这个,我发现一个网页说我应该先检查它们的版本

但我得到了这条线

谁能帮我解决这个问题?

0 投票
1 回答
8386 浏览

haskell - Haskell/Alex:警告:制表符

我正在用haskell写一种玩具语言。我正在使用 Alex 生成扫描仪。每次我使用 cabal 构建项目时,都会收到以下警告:

似乎 alex 生成的扫描程序使用制表符而不是空格,而 ghc 的默认行为是警告用户这一点。

有没有人知道强制 alex 使用空格或抑制来自 ghc(通过 cabal)的警告的方法?

0 投票
1 回答
187 浏览

parsing - 使用 Parsec 解析复杂文件

我想用 Haskell 解析具有多个数据序列(相同的列数,相同的内容,...)的文件。我的数据序列将由前后的关键字分隔。

我的问题是,在使用 Parsec 进行了几次测试后,我的印象是 Parsec 宁可逐行解析文件,而不是整个文件

Parsec是制作我想要的东西的正确方法,还是我应该考虑使用其他工具,如HappyAlex

是否有网站(或其他资源)提供使用Parsec解析复杂文本文件的示例?


注意:我给出的例子是一个非常简单的例子。在我的文件中有更多关键字和组合时,事情会更加棘手。

0 投票
1 回答
221 浏览

parsing - 在 Happy 项目中,“templates/wrappers.hs”在哪里?

我正在尝试使用 Alex 和 Happy 制作解析器。我正在按照这篇文章的说明进行操作,但遇到了麻烦。我正在尝试追查以下类型错误的来源:

我的词法分析器位于 src/AnsiParser/FrontEnd/Lex.x 中。所以我查看了 dist/build/AnsiParser/FrontEnd/Lex.hs,我能找到的只有:

但是我在我的系统上找不到任何名为“wrapper.hs”的文件。如何追踪此错误的原因?

如果它有用,这是我的 Parse.y 的简化版本:

和 Lex.x:

0 投票
1 回答
835 浏览

parsing - 是什么导致 Happy 抛出解析错误?

我已经用 Alex 编写了一个词法分析器,并且正在尝试将它连接到一个用 Happy 编写的解析器。我会尽力总结我的问题而不粘贴大量代码。

我从我的词法分析器的单元测试中知道该字符串"\x7"被用于:

我的令牌类型(由词法分析器吐出)是Token. 我已经定义lexWrap并如此alexEOF所述,它为我提供了以下标头和令牌声明:

我使用以下命令调用 parser+lexer 组合:

这是我的前几部作品:

我将省略 和 的数据类型声明,Expr因为NonPrint它们很长,而且这里只有构造函数CmdNonPrint问题。该函数parseNonPrint在 Parse.y 的底部定义为:

此外,我的错误处理函数如下所示:

像这样写,我希望通过以下 hspec 测试:

但相反,我看到"exprs 30"print一次(即使我正在运行 5 个不同的单元测试)和我所有的parseExprreturn测试Right []。我不明白为什么会这样,但我改变了exprs生产以防止它:

现在我所有的测试在他们命中的第一个令牌上都失败了——parseExpr "\x7"失败了:

而且我非常困惑,因为我希望解析器能够走上这条路exprs -> expr -> nonprint -> NONPRINT并成功。我不明白为什么这个输入会使解析器处于错误状态。没有任何trace语句被命中(优化掉了?)。

我究竟做错了什么?

0 投票
1 回答
140 浏览

haskell - Alex lex.x 编译:不在“开始”范围内

我在 Lex.x 中有以下语句来解析块注释。

但是如果我使用 Alex 生成 Lex.hs,它不会添加“开始”功能。这会导致以下编译错误。

知道可能出了什么问题吗?

我正在使用包装器'posn'

0 投票
1 回答
98 浏览

haskell - Alex wrappers.hs 没有 Applicative 的实例

我正在尝试使用 ghc 7.10.2 和 alex 3.1.4 编译 lex.x,但它给出了以下错误。我检查了 Lex.hs,确实那里没有“Alex”的应用实例。

注意:在我从包装器 'monad' 移动到 'monad-bytestring' 后,此错误开始出现

我在 alex 3.1.4 中看到这是固定的http://hackage.haskell.org/package/alex

下面的提交介绍了应用实例,但它不在我生成的 Lex.hs 中。我可以手动使用下面的包装器来生成 Lex.hs 吗?

https://github.com/simonmar/alex/commit/b1472bfbb7b95bcd6c66558197e2603997d9ce0b

0 投票
1 回答
1071 浏览

haskell - 在语义分析阶段获取行号信息(使用 Alex,Happy)

我正在为一种实验语言进行语义分析。我正在使用 Alex 和 Happy 来生成词法分析器和解析器(实际上我正在使用 BNFC 工具来生成 Alex 和 Happy 文件)。每当出现语义错误(例如类型错误)时,我都想收到带有行号和列号的错误消息。

似乎我必须在构建符号表或 AST 时存储行号信息。如果我能以某种方式访问​​ Happy 文件的规则部分中的位置信息,我的问题就会得到解决。

在这方面的任何建议将不胜感激。

我尝试实施下面建议的答案,但不幸的是没有取得任何成功。让我们考虑一个非常简单的语法:-

我的词法分析器如下所示。

我的 Yacc 文件如下,这就是我苦苦挣扎的地方。如何在我的语法树中嵌入位置信息。

尝试编译生成的 Haskell 文件时出现以下类型错误。

你们能建议我如何让这个东西工作吗?