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

haskell - Happy中可能出现的错误?

我正在使用 Happy/Alex 编写解析器,并且因为我正在解析的语法不是完全上下文无关的,所以我需要获取前瞻标记。Happy 文档建议使用线程词法分析器时,可以使用以下形式的规则来完成

所以我写了一个规则

然而,这会生成一个 ghc 无法解析的 .hs 文件。GHC 给出以下错误:

这是产生错误的haskell函数:

我离开了mkTypDef = undefined,只是为了确保我没有犯任何类型错误。正常的单子制作(带有{% <expn> })工作正常。我正在使用快乐 1.19.4 和 GHC 7.8.3。

这可能是一个错误,还是我做错了什么?

0 投票
1 回答
251 浏览

haskell - 从 Happy 编译 GLR 解析器时出错 - '输入 'case' 上的解析错误'

当我尝试编译生成的文件时,我尝试了多个示例语法并得到相同的错误。

例如,我完全按照这个问题的解决方案 - GLR_Lib.hs:找不到模块“系统”

语法文件在哪里

但是当我编译时,我得到:

[1 of 2] 编译 ABCData ( ABCData.hs, ABCData.o )

[2 of 2] 编译 ABC ( ABC.hs, ANC.o )

GLR_Lib.hs:164:2:输入“case”时解析错误</p>

我尝试过的每种语法都发生了这个确切的错误。我不知道我可以对那些成功运行示例的人做些什么不同的事情。

0 投票
2 回答
1552 浏览

parsing - 用 Happy 解析函数应用

我将如何解析类似

进入

使用快乐?现在我有一条规则说

但这会将上述内容解析为

0 投票
1 回答
56 浏览

haskell - 准引用 LLVM 中的参考变量

如何将变量传递到准引用部分?

我正在使用llvm-quote-general并想将 a 传递给Type我正在使用 quasiquoter 构建的指令。

我可以仅从文本中构建指令:

我希望能够传入一个类型。这样做的语法是什么?

我已经尝试了以下所有方法,但都没有奏效。它们导致lexer errors。

库中的准引用器是快乐生成的。查看源代码,我可以找到与反引号相关的标记最接近的东西是符号happy_dollar_dollar,它似乎没有在任何地方定义。

编辑:我解决了Types 的问题;一个例子是[lli|alloc $type:t]

操作数

我用 s 解决了这个问题Type,但仍然不知道如何反引号。我想使用Operands 构建指令。尝试这样做会导致错误。

预先快乐的消息来源建议以下所有内容,包括$opr:应该做的事情

0 投票
1 回答
105 浏览

haskell - 指定快乐解析器中的替代顺序

我正在为具有以下类型的语言开发一个快乐的解析器,还有更多。

该语言的调用语法显然不明确。

type当采用函数指针的类型时,第二条规则与第一条规则的含义不同。

可以通过为不是函数指针的类型添加特殊规则来消除歧义。除非这样做并复制所有类型定义以产生类似的东西

我如何指定仅当替代方案失败时替代方案type operand才合法?type '(' types ')' '*' operand

关于堆栈溢出有很多关于为什么语法有歧义的问题(我发现至少有 7 个),还有一些关于如何消除歧义的问题,但没有关于如何指定如何解决歧义的问题。

不受欢迎的解决方案

我知道我可以将类型的语法重构为一个巨大的复杂混乱。

然后定义callable

0 投票
1 回答
460 浏览

haskell - Haskell Happy 实现分配给变量

我正在尝试用 x = 4 和 pritn x 实现一些语言,使用 haskell 构建快乐到目前为止,我已经定义了这样的语法

当我在类似的东西上运行它时

我明白了

现在我想做实际的实现,但我不知道如何实现“分配”

虽然我不擅长 haskell,但从快乐的文档中,我看到了“让”实现,并得到了一些环境 p 的想法,并在

我猜“分配”实现必须对这个环境做一些事情,但我找不到任何例子。如何实现分配和打印,或者在哪里可以找到相关信息或示例?

0 投票
1 回答
223 浏览

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

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

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

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

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

0 投票
1 回答
71 浏览

haskell - 在处理健壮的 AST 声明时如何正确格式化快乐?

我正在尝试为一种语言创建一个词法分析器和解析器,当涉及到一些更“健壮”的抽象语法树定义时,我很难理解确切的语法。

有问题的问题是:

M_fun的定义如下:

如您所见,$2 与字符串有关,$3 将返回 [(String,Int,M_Type)],$5 将返回 M_Type,但 $7 是问题所在。它返回一个 [M_decl], [M_stmt]。上面的语法正确吗?快乐的文件编译时没有任何抱怨,但是当我编译 .hs 文件后,它会出现大约 2000 行错误,我认为是这样的原因。

0 投票
1 回答
107 浏览

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

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

然后它返回

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

它返回

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

但我得到了这条线

谁能帮我解决这个问题?

0 投票
2 回答
615 浏览

haskell - 如何重写语法以消除移位减少冲突(在 Haskell Happy 解析器中)

我正在尝试使用Happy LALR 解析器生成器为方法(类 java)定义语法

这里,

  • MD:方法声明
  • VD:变量声明
  • S:声明
  • T:类型
  • 一:标识符
  • E:表达

所有其他令牌都是终端。

在该方法中,变量声明在顶部和之后的语句中完成。

如您所见,VD 可以从 I 开始,因为可以有类型为标识符 (I) 的类型类的变量声明。语句也可以从 I 开始,因为分配给变量并且变量名称是 I
问题是 VD 和 S 都可以从 I 开始。因此,在第一个生产中,它会导致移位/减少冲突。

有没有办法重写语法或任何其他解析器生成器技巧来解决这个问题?

我已经为运算符指定了关联性和优先级。我只提到了解释问题的最少信息集。如果您需要更多信息,请与我们联系。


更新:

以下是语法文件

由 Happy 解析器生成的 .info 文件,其中包含 shift-reduce 冲突和状态的详细信息