问题标签 [happy]

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 回答
345 浏览

haskell - 快乐语法中的移位/减少冲突

我有以下(严重剥离)快乐语法

它在模式中的标识符周围存在移位/减少冲突。默认情况下,Happy 选择转换,但在这种情况下,这不是我想要的:它会尝试将所有内容都硬塞进去constant expression,即使它可能是identifier pattern.

我读过优先级/关联性是解决此类问题的方法,但是我添加的任何内容都无法使语法朝着正确的方向发展(公平地说,我一直在黑暗中拍摄)。

使用一些明显的标记化,我想要:

  • x屈服identifier pattern
  • mut x屈服identifier pattern
  • std::pi屈服constant expression
  • point{..}屈服struct pattern
  • std::point{..}屈服struct pattern

基本上,除非有一个{::令牌等待被消费,否则一个标识符应该去identifier patterncase。


如果我的问题不清楚,我深表歉意 - 部分问题是我很难确定问题所在。:(

0 投票
1 回答
82 浏览

haskell - Specify to Stack which version of Happy to use

I'm running up against a bug in the latest version of Happy (1.19.5). How do I tell stack to go look for an even newer version of Happy (1.19.6) found only at the git repo? Right now, I'm letting stack manage everything; the only reference to Happy is in my cabal file. The relevant section is:

#xA;
0 投票
1 回答
213 浏览

parsing - Happy & Alex - 防止前瞻影响解析器-词法分析器通信

我目前正在使用 Happy & Alex 为玩具语言的编译器编写解析器。由于需要某种形式的可选布局,我必须在匹配block非终端之前更改 Alex 的状态。不幸的是,在我有机会更改 Alex 的状态之前,Happy 所需的前瞻令牌似乎已被读取。

这是一个演示问题的小片段:

有没有解决这个问题的通用方法?

0 投票
1 回答
88 浏览

parsing - 用括号和不同类型的表达式解析

我目前happy用来解析一种语言,但我认为解析器不相关,只是说它是一个 LALR 解析器。这是语法的一小段摘录:

问题是我遇到了减少减少冲突。我认为当我尝试解析以下内容时会出现问题:

只有一种方法可以解析这个表达式,但问题是我认为即使在第一个括号中解析器也开始出现问题。我认为是这种情况的原因是解析器不知道它在未来是面对 aArithExpr还是面对 a BoolExpr,并且由于它只有一个前瞻标记,它必须做出可能是错误的任意选择。

反正有没有重写语法来接受这种语言?或者我真的应该在类型检查期间将两者都解析ArithExprBoolExpr一个制服Expr并处理实际类型吗?

0 投票
0 回答
162 浏览

haskell - 从 Happy 生成“预期”样式的错误消息

当 Happy 生成一个状态机并在解析时运行它时,我认为当遇到解析错误时,它能够分辨出它所期望的令牌。

作为打印错误的一部分,有没有办法获取这些信息?目前我只是打印出失败令牌源中的位置以及失败的令牌类型,但最好告诉用户预期什么样的令牌。

我可以获取此类信息并将其输入到我的错误处理函数中吗?如果可以,如何获取?

0 投票
0 回答
262 浏览

parsing - 使用快乐和属性语法解析错误

我是 Haskell 和 Happy 的新手,我正在尝试使用 Haskell 和 Happy 制作一个带有属性语法的解析器。我为变量声明做了一些语法,给了 BNFC 和一切,因为这里工作正常。然后我开始在解析器中添加属性,此时我发现了我的第一个问题:当我添加%attributetype {MyAttribute a}

happy -gca Pargrammar.y工作正常,但在我添加后立即%attribute parseTree {a}

快乐给了我这个解析错误

快乐:解析错误

所以我保持只是%attributetype {MyAttribute a}并尝试先修改基本类型

这条线在这里

但是我的第二个问题出现了:当我启动 Makefile 时,我在这里遇到了这个错误

Pargrammar.hs:344:19: 错误: 变量不在范围内: ($$=) :: t1 -> String -> t

Pargrammar.hs:1066:19:错误:

实际上在 Pargrammar.hs 的第 344 行,我得到了这个

但那不$$=应该在那里。

我的 Makefile 就是这样做的

我真的不知道如何解决这个问题。如果你们中的任何人可以建议我一些想法,我将不胜感激。

0 投票
1 回答
382 浏览

haskell - Haskell、FreeBSD、Stack、happy:如果构建工具(在我的例子中是 `happy-1.19.5`)安装失败怎么办?

这些是我得到的链接器错误:

杂项

  • ghc-7.10.2
  • 虚拟机中的 FreeBSD 10.3-RELEASE-p18
  • 快乐-1.19.5
  • 堆栈版本 1.0.1,Git 修订版 e1c8e2c(3065 次提交)x86_64

我正在考虑的选项:

  1. 弄清楚链接器错误是关于什么的。也许它很容易修复。也许在 StackOverflow 上询问一下。;) 有什么想法吗?

  2. 尝试找出我的项目的哪个依赖项正在使用 Happy,看看我是否可以不用它。我试图通过这个来解决这个问题stack list-dependencies --depth=100stack dot --external 但不幸的是,这些都没有帮助我
    我怎样才能找出我的哪些直接依赖项依赖它(可能是间接依赖)?

  3. 尝试说服stack使用happy我能够通过pkg install hs-happy. 我该怎么办?

  4. 从 linux 交叉编译 FreeBSD。如果我有一个交叉编译器,我是否正确地怀疑这可能不是问题?无论哪种方式,设置 linux->FreeBSD 交叉编译器会很困难吗?我怎么能这样做呢?

  5. 尝试摆脱对 FreeBSD 的需求。不幸的是,我的托管服务提供商目前只支持 FreeBSD,而我真的很喜欢它们还有其他原因(物有所值及其相关理念)。也许,如果一切都失败了,你能告诉我你的 Haskell 项目最喜欢哪个 Linux 托管服务提供商吗?

我怀疑选项#1 或#3 可能是最轻松的。
或者你们还有其他想法吗?

0 投票
2 回答
509 浏览

haskell - 构建 GHC:尽管 cabal 安装成功,但配置仍然失败

我正在尝试从此页面之后的源代码构建 GHC 。安装依赖项时,我必须安装happyalex

但是在运行时configure我收到一条错误消息:

我在 Debian 上运行stretch

谁能提出一个明显的步骤,我可以尝试解决这个问题?

0 投票
2 回答
445 浏览

function - 如何将函数作为参数传递给生成的 Happy 解析器?

Happy 生成带有签名的解析器 ::[Token] -> a

我想生成一个参数化解析器,即一个需要函数作为参数来传递解析器的函数。所以我想要签名 :: (x->y) -> [Token] -> a。然而,我也可以使用签名 :: [Token] -> (x->y) -> a

当功能固定后,我可以通过导入和分配功能来解决。

当参数是Show的实例时,我可以如下解决

有关更多详细信息,请参见我的项目 TorXakis,特别是文件夹https://github.com/TorXakis/TorXakis/tree/develop/sys/front/src

但是,我无法传递作为函数的变量参数,因为函数不是从 Show 派生的!由于 Haskell 是一种函数式语言,我强烈怀疑我遗漏了一些微不足道的东西,但我没有看到它......任何人都可以提供一个将函数传递给快乐生成的解析器的示例吗?提前致谢!

皮埃尔

0 投票
0 回答
225 浏览

haskell - 在标准的“monad”包装下结合 Alex 和 Happy

我设法结合了 Alex 词法分析器和 Happy 解析器。但是,我对当前解决方案的某些方面不满意:

  1. 设置初始状态,
  2. 将状态传递给 Alex 时的样板代码,
  3. Alex我的ExpParser单子是分开的实体。

我在下面解释这些方面。

我的ExpParsermonad 如下所示:

顶层解析函数定义为:

第一个问题是我必须用一些我不确定的字段来设置初始状态。此外,我希望为 Alex 词法分析器定义一个标准的“初始状态”。

然后我通过以下方式使用词法分析器(使用“monad”包装器生成):

但是我正在写一些样板文件,并且还重复自己,因为上面的代码中嵌入了 state monad 的行为。如果Alex为 monad 定义了一个实例,State我可以避免这种情况,但我认为情况并非如此。

有没有办法在上述方面改进当前的解决方案?