问题标签 [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 选择转换,但在这种情况下,这不是我想要的:它会尝试将所有内容都硬塞进去constant expression
,即使它可能是identifier pattern
.
我读过优先级/关联性是解决此类问题的方法,但是我添加的任何内容都无法使语法朝着正确的方向发展(公平地说,我一直在黑暗中拍摄)。
使用一些明显的标记化,我想要:
x
屈服identifier pattern
mut x
屈服identifier pattern
std::pi
屈服constant expression
point{..}
屈服struct pattern
std::point{..}
屈服struct pattern
基本上,除非有一个{
或::
令牌等待被消费,否则一个标识符应该去identifier pattern
case。
如果我的问题不清楚,我深表歉意 - 部分问题是我很难确定问题所在。:(
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;parsing - Happy & Alex - 防止前瞻影响解析器-词法分析器通信
我目前正在使用 Happy & Alex 为玩具语言的编译器编写解析器。由于需要某种形式的可选布局,我必须在匹配block
非终端之前更改 Alex 的状态。不幸的是,在我有机会更改 Alex 的状态之前,Happy 所需的前瞻令牌似乎已被读取。
这是一个演示问题的小片段:
有没有解决这个问题的通用方法?
parsing - 用括号和不同类型的表达式解析
我目前happy
用来解析一种语言,但我认为解析器不相关,只是说它是一个 LALR 解析器。这是语法的一小段摘录:
问题是我遇到了减少减少冲突。我认为当我尝试解析以下内容时会出现问题:
只有一种方法可以解析这个表达式,但问题是我认为即使在第一个括号中解析器也开始出现问题。我认为是这种情况的原因是解析器不知道它在未来是面对 aArithExpr
还是面对 a BoolExpr
,并且由于它只有一个前瞻标记,它必须做出可能是错误的任意选择。
反正有没有重写语法来接受这种语言?或者我真的应该在类型检查期间将两者都解析ArithExpr
为BoolExpr
一个制服Expr
并处理实际类型吗?
haskell - 从 Happy 生成“预期”样式的错误消息
当 Happy 生成一个状态机并在解析时运行它时,我认为当遇到解析错误时,它能够分辨出它所期望的令牌。
作为打印错误的一部分,有没有办法获取这些信息?目前我只是打印出失败令牌源中的位置以及失败的令牌类型,但最好告诉用户预期什么样的令牌。
我可以获取此类信息并将其输入到我的错误处理函数中吗?如果可以,如何获取?
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 就是这样做的
我真的不知道如何解决这个问题。如果你们中的任何人可以建议我一些想法,我将不胜感激。
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
我正在考虑的选项:
弄清楚链接器错误是关于什么的。也许它很容易修复。也许在 StackOverflow 上询问一下。;) 有什么想法吗?
尝试找出我的项目的哪个依赖项正在使用 Happy,看看我是否可以不用它。我试图通过这个来解决这个问题
stack list-dependencies --depth=100
,stack dot --external
但不幸的是,这些都没有帮助我。
我怎样才能找出我的哪些直接依赖项依赖它(可能是间接依赖)?尝试说服
stack
使用happy
我能够通过pkg install hs-happy
. 我该怎么办?从 linux 交叉编译 FreeBSD。如果我有一个交叉编译器,我是否正确地怀疑这可能不是问题?无论哪种方式,设置 linux->FreeBSD 交叉编译器会很困难吗?我怎么能这样做呢?
尝试摆脱对 FreeBSD 的需求。不幸的是,我的托管服务提供商目前只支持 FreeBSD,而我真的很喜欢它们还有其他原因(物有所值及其相关理念)。也许,如果一切都失败了,你能告诉我你的 Haskell 项目最喜欢哪个 Linux 托管服务提供商吗?
我怀疑选项#1 或#3 可能是最轻松的。
或者你们还有其他想法吗?
haskell - 构建 GHC:尽管 cabal 安装成功,但配置仍然失败
我正在尝试从此页面之后的源代码构建 GHC 。安装依赖项时,我必须安装happy
和alex
:
但是在运行时configure
我收到一条错误消息:
我在 Debian 上运行stretch
:
谁能提出一个明显的步骤,我可以尝试解决这个问题?
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 是一种函数式语言,我强烈怀疑我遗漏了一些微不足道的东西,但我没有看到它......任何人都可以提供一个将函数传递给快乐生成的解析器的示例吗?提前致谢!
皮埃尔
haskell - 在标准的“monad”包装下结合 Alex 和 Happy
我设法结合了 Alex 词法分析器和 Happy 解析器。但是,我对当前解决方案的某些方面不满意:
- 设置初始状态,
- 将状态传递给 Alex 时的样板代码,
Alex
我的ExpParser
单子是分开的实体。
我在下面解释这些方面。
我的ExpParser
monad 如下所示:
顶层解析函数定义为:
第一个问题是我必须用一些我不确定的字段来设置初始状态。此外,我希望为 Alex 词法分析器定义一个标准的“初始状态”。
然后我通过以下方式使用词法分析器(使用“monad”包装器生成):
但是我正在写一些样板文件,并且还重复自己,因为上面的代码中嵌入了 state monad 的行为。如果Alex
为 monad 定义了一个实例,State
我可以避免这种情况,但我认为情况并非如此。
有没有办法在上述方面改进当前的解决方案?