1

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

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

语法文件在哪里

%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 deriving (Eq,Ord,Show) 
parseError _ = error "bad"
}

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

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

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

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

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

4

1 回答 1

1

GLR_Lib模板中存在缩进错误。这就是我为使其工作所做的工作:

  1. 创建ABCMain.hs文件。
  2. 为已编辑的模板创建一个新目录./templates
  3. 查找原件 - 例如使用locate GLR_Lib。在带有 Haskell 平台的 OSX 上,我在 /Library/Haskell/current/share/happy-1.19.4/ 中找到了它们
  4. 将所有模板复制到./templates
  5. 对 进行以下编辑./templates/GLR_Lib
    • 第 44 行:注释掉import System
    • 第 161 行:用制表符替换前导空格:case new_stks of
    • 第 190 行:用制表符替换前导空格:stks' <- foldM (pack i) stks reds
  6. 跑:happy --glr --template=./templates ABC.y
  7. 编译:ghc --make ABCMain

您可能只需要GLR_LibGLR_Base模板。

于 2014-11-26T19:08:27.340 回答