问题标签 [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.
parsing - 解析时我需要添加什么才能将 monadUserState 与 alex 一起使用?
我正在尝试编写一个程序来理解允许嵌入注释的语言。如:
这应该被识别为评论(因此不会在它看到的第一个 */ 处停止,除非它之前只看到 1 条评论打开)。
这将是一个在 C 中很容易解决的问题,我可以简单地设置一个计数器,当它看到评论打开时递增,当看到评论关闭时递减。如果计数器为 0,我们就在“代码部分”。
然而,在 Haskell 中没有状态,它更具挑战性。
我已经阅读了 monadUserState ,据说它允许跟踪这种确切类型的解析的状态。但是,除了alex 上的教程页面之外,我找不到太多关于它的阅读材料。
当我尝试编译时,它给出了错误
需要注意的是,我直接从“基本”包装器更改为“monadUserState”,而没有更改我的代码(我不知道要添加什么才能使用它)。它说这必须在用户代码中初始化:
我有点像 lexxing 菜鸟,我完全不确定我应该在这里添加什么以使其至少可以编译......然后我可以担心事情的逻辑。
haskell - 快乐和亚历克斯是如何引导自己成为现实的?
contains的源代码树和containshappy
的源代码树。然而,据我所知,为了 compile ,我们需要使用 ...将文件转换为文件,并且为了编译,我们需要使用 ...将文件转换为文件。AttrGrammarParser.ly
Parser.ly
alex
Scan.x
happy
.ly
.lhs
happy
alex
.x
.hs
alex
因此,似乎这里必须进行一些引导才能编译任一工具。
每个项目的Setup.lhs
文件都包含一些模板扩展,但据我所知,不要做任何特别的事情来进行引导。
引导是如何以及在哪里完成的?
haskell - 我是否正确安装了 cabal?
嗨,我刚刚通过命令将 cabal 更新到了最新版本
和
然后它返回
我想用亚历克斯和快乐。对不起,我对它很陌生..当我试图通过线路在 ghci 中发出 alex 时
它返回
我在网上搜索了这个,我发现一个网页说我应该先检查它们的版本
但我得到了这条线
谁能帮我解决这个问题?
haskell - Haskell/Alex:警告:制表符
我正在用haskell写一种玩具语言。我正在使用 Alex 生成扫描仪。每次我使用 cabal 构建项目时,都会收到以下警告:
似乎 alex 生成的扫描程序使用制表符而不是空格,而 ghc 的默认行为是警告用户这一点。
有没有人知道强制 alex 使用空格或抑制来自 ghc(通过 cabal)的警告的方法?
parsing - 使用 Parsec 解析复杂文件
我想用 Haskell 解析具有多个数据序列(相同的列数,相同的内容,...)的文件。我的数据序列将由前后的关键字分隔。
我的问题是,在使用 Parsec 进行了几次测试后,我的印象是 Parsec 宁可逐行解析文件,而不是整个文件。
Parsec是制作我想要的东西的正确方法,还是我应该考虑使用其他工具,如Happy或Alex?
是否有网站(或其他资源)提供使用Parsec解析复杂文本文件的示例?
注意:我给出的例子是一个非常简单的例子。在我的文件中有更多关键字和组合时,事情会更加棘手。
parsing - 在 Happy 项目中,“templates/wrappers.hs”在哪里?
我正在尝试使用 Alex 和 Happy 制作解析器。我正在按照这篇文章的说明进行操作,但遇到了麻烦。我正在尝试追查以下类型错误的来源:
我的词法分析器位于 src/AnsiParser/FrontEnd/Lex.x 中。所以我查看了 dist/build/AnsiParser/FrontEnd/Lex.hs,我能找到的只有:
但是我在我的系统上找不到任何名为“wrapper.hs”的文件。如何追踪此错误的原因?
如果它有用,这是我的 Parse.y 的简化版本:
和 Lex.x:
parsing - 是什么导致 Happy 抛出解析错误?
我已经用 Alex 编写了一个词法分析器,并且正在尝试将它连接到一个用 Happy 编写的解析器。我会尽力总结我的问题而不粘贴大量代码。
我从我的词法分析器的单元测试中知道该字符串"\x7"
被用于:
我的令牌类型(由词法分析器吐出)是Token
. 我已经定义lexWrap
并如此处alexEOF
所述,它为我提供了以下标头和令牌声明:
我使用以下命令调用 parser+lexer 组合:
这是我的前几部作品:
我将省略 和 的数据类型声明,Expr
因为NonPrint
它们很长,而且这里只有构造函数Cmd
和NonPrint
问题。该函数parseNonPrint
在 Parse.y 的底部定义为:
此外,我的错误处理函数如下所示:
像这样写,我希望通过以下 hspec 测试:
但相反,我看到"exprs 30"
print一次(即使我正在运行 5 个不同的单元测试)和我所有的parseExpr
return测试Right []
。我不明白为什么会这样,但我改变了exprs
生产以防止它:
现在我所有的测试在他们命中的第一个令牌上都失败了——parseExpr "\x7"
失败了:
而且我非常困惑,因为我希望解析器能够走上这条路exprs -> expr -> nonprint -> NONPRINT
并成功。我不明白为什么这个输入会使解析器处于错误状态。没有任何trace
语句被命中(优化掉了?)。
我究竟做错了什么?
haskell - Alex lex.x 编译:不在“开始”范围内
我在 Lex.x 中有以下语句来解析块注释。
但是如果我使用 Alex 生成 Lex.hs,它不会添加“开始”功能。这会导致以下编译错误。
知道可能出了什么问题吗?
我正在使用包装器'posn'
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
haskell - 在语义分析阶段获取行号信息(使用 Alex,Happy)
我正在为一种实验语言进行语义分析。我正在使用 Alex 和 Happy 来生成词法分析器和解析器(实际上我正在使用 BNFC 工具来生成 Alex 和 Happy 文件)。每当出现语义错误(例如类型错误)时,我都想收到带有行号和列号的错误消息。
似乎我必须在构建符号表或 AST 时存储行号信息。如果我能以某种方式访问 Happy 文件的规则部分中的位置信息,我的问题就会得到解决。
在这方面的任何建议将不胜感激。
我尝试实施下面建议的答案,但不幸的是没有取得任何成功。让我们考虑一个非常简单的语法:-
我的词法分析器如下所示。
我的 Yacc 文件如下,这就是我苦苦挣扎的地方。如何在我的语法树中嵌入位置信息。
尝试编译生成的 Haskell 文件时出现以下类型错误。
你们能建议我如何让这个东西工作吗?