【发布时间】:2014-03-29 20:23:57
【问题描述】:
我正在尝试从 happy 生成 GLR 解析器,但在生成文件后出现错误。
这是一个例子, ABC.y ,所以很清楚我在尝试什么:
{
module Main where
}
%name ps1 s1
%tokentype { ABC }
%error { parseError }
%token
a { A }
b { B }
c { C }
%%
s1: a a a b {} | b s2 a {}
s2: b a b s2 {} | c {}
{
data ABC = A | B | C
parseError _ = error "bad"
main = getContents >>= print . ps1 . lexer
lexer ('a':xs) = A : lexer xs
ETC
}
这个例子和
配合得很好happy ABC.y
但是,对 --glr 很满意,我无法构建结果。我想知道我是否做错了。准确地说,happy --glr 产生两个输出,ABC.hs。然而,ABCData.hs,
ghc --make ABC.hs ABCData.hs
现在失败了。我得到的错误是找不到模块'System',它是haskell-98的隐藏成员......我尝试添加包haskell98,并得到了模棱两可的前奏问题。我还尝试将语法编码到 BNFC 中并使用他们的 -glr 选项,但我仍然遇到其他错误,例如对显然已弃用的 Data.FiniteMap 的依赖。有没有办法得到这个编译?
【问题讨论】:
-
我想添加一条评论。我正在自动生成 .y 文件,我很乐意使用任何 glr 解析器——即使代码生成不会产生 Haskell 代码。因此,如果有人可以推荐一个好的 glr 解析器;就像野牛 glr 方法是否完整且开发良好,我可以轻松切换到该方法。