我正在尝试从快乐中生成 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 的依赖。有没有办法得到这个编译?