问题标签 [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.
haskell - Happy中可能出现的错误?
我正在使用 Happy/Alex 编写解析器,并且因为我正在解析的语法不是完全上下文无关的,所以我需要获取前瞻标记。Happy 文档建议使用线程词法分析器时,可以使用以下形式的规则来完成
所以我写了一个规则
然而,这会生成一个 ghc 无法解析的 .hs 文件。GHC 给出以下错误:
这是产生错误的haskell函数:
我离开了mkTypDef = undefined
,只是为了确保我没有犯任何类型错误。正常的单子制作(带有{% <expn> }
)工作正常。我正在使用快乐 1.19.4 和 GHC 7.8.3。
这可能是一个错误,还是我做错了什么?
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>
我尝试过的每种语法都发生了这个确切的错误。我不知道我可以对那些成功运行示例的人做些什么不同的事情。
parsing - 用 Happy 解析函数应用
我将如何解析类似
进入
使用快乐?现在我有一条规则说
但这会将上述内容解析为
haskell - 准引用 LLVM 中的参考变量
如何将变量传递到准引用部分?
我正在使用llvm-quote-general并想将 a 传递给Type
我正在使用 quasiquoter 构建的指令。
我可以仅从文本中构建指令:
我希望能够传入一个类型。这样做的语法是什么?
我已经尝试了以下所有方法,但都没有奏效。它们导致lexer error
s。
库中的准引用器是快乐生成的。查看源代码,我可以找到与反引号相关的标记最接近的东西是符号happy_dollar_dollar
,它似乎没有在任何地方定义。
编辑:我解决了Type
s 的问题;一个例子是[lli|alloc $type:t]
操作数
我用 s 解决了这个问题Type
,但仍然不知道如何反引号。我想使用Operand
s 构建指令。尝试这样做会导致错误。
预先快乐的消息来源建议以下所有内容,包括$opr:
应该做的事情
haskell - 指定快乐解析器中的替代顺序
我正在为具有以下类型的语言开发一个快乐的解析器,还有更多。
该语言的调用语法显然不明确。
type
当采用函数指针的类型时,第二条规则与第一条规则的含义不同。
可以通过为不是函数指针的类型添加特殊规则来消除歧义。除非这样做并复制所有类型定义以产生类似的东西
我如何指定仅当替代方案失败时替代方案type operand
才合法?type '(' types ')' '*' operand
关于堆栈溢出有很多关于为什么语法有歧义的问题(我发现至少有 7 个),还有一些关于如何消除歧义的问题,但没有关于如何指定如何解决歧义的问题。
不受欢迎的解决方案
我知道我可以将类型的语法重构为一个巨大的复杂混乱。
然后定义callable
为
haskell - Haskell Happy 实现分配给变量
我正在尝试用 x = 4 和 pritn x 实现一些语言,使用 haskell 构建快乐到目前为止,我已经定义了这样的语法
当我在类似的东西上运行它时
我明白了
现在我想做实际的实现,但我不知道如何实现“分配”
虽然我不擅长 haskell,但从快乐的文档中,我看到了“让”实现,并得到了一些环境 p 的想法,并在
我猜“分配”实现必须对这个环境做一些事情,但我找不到任何例子。如何实现分配和打印,或者在哪里可以找到相关信息或示例?
haskell - 快乐和亚历克斯是如何引导自己成为现实的?
contains的源代码树和containshappy
的源代码树。然而,据我所知,为了 compile ,我们需要使用 ...将文件转换为文件,并且为了编译,我们需要使用 ...将文件转换为文件。AttrGrammarParser.ly
Parser.ly
alex
Scan.x
happy
.ly
.lhs
happy
alex
.x
.hs
alex
因此,似乎这里必须进行一些引导才能编译任一工具。
每个项目的Setup.lhs
文件都包含一些模板扩展,但据我所知,不要做任何特别的事情来进行引导。
引导是如何以及在哪里完成的?
haskell - 在处理健壮的 AST 声明时如何正确格式化快乐?
我正在尝试为一种语言创建一个词法分析器和解析器,当涉及到一些更“健壮”的抽象语法树定义时,我很难理解确切的语法。
有问题的问题是:
M_fun的定义如下:
如您所见,$2 与字符串有关,$3 将返回 [(String,Int,M_Type)],$5 将返回 M_Type,但 $7 是问题所在。它返回一个 [M_decl], [M_stmt]。上面的语法正确吗?快乐的文件编译时没有任何抱怨,但是当我编译 .hs 文件后,它会出现大约 2000 行错误,我认为是这样的原因。
haskell - 我是否正确安装了 cabal?
嗨,我刚刚通过命令将 cabal 更新到了最新版本
和
然后它返回
我想用亚历克斯和快乐。对不起,我对它很陌生..当我试图通过线路在 ghci 中发出 alex 时
它返回
我在网上搜索了这个,我发现一个网页说我应该先检查它们的版本
但我得到了这条线
谁能帮我解决这个问题?
haskell - 如何重写语法以消除移位减少冲突(在 Haskell Happy 解析器中)
我正在尝试使用Happy LALR 解析器生成器为方法(类 java)定义语法
这里,
- MD:方法声明
- VD:变量声明
- S:声明
- T:类型
- 一:标识符
- E:表达
所有其他令牌都是终端。
在该方法中,变量声明在顶部和之后的语句中完成。
如您所见,VD 可以从 I 开始,因为可以有类型为标识符 (I) 的类型类的变量声明。语句也可以从 I 开始,因为分配给变量并且变量名称是 I
问题是 VD 和 S 都可以从 I 开始。因此,在第一个生产中,它会导致移位/减少冲突。
有没有办法重写语法或任何其他解析器生成器技巧来解决这个问题?
我已经为运算符指定了关联性和优先级。我只提到了解释问题的最少信息集。如果您需要更多信息,请与我们联系。
更新:
以下是语法文件
由 Happy 解析器生成的 .info 文件,其中包含 shift-reduce 冲突和状态的详细信息