【问题标题】:Errors when compiling GLR parsers from Happy - 'parse error on input ‘case’'从 Happy 编译 GLR 解析器时出错 - “输入‘case’时出现解析错误”
【发布时间】:2014-11-26 13:09:04
【问题描述】:

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

例如,我完全按照这个问题的解决方案 - GLR_Lib.hs: Could not find module 'System'

语法文件在哪里

%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”时出现解析错误

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

【问题讨论】:

    标签: haskell happy glr


    【解决方案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-08-12
      • 2015-06-05
      • 1970-01-01
      • 2012-09-21
      • 2012-11-23
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多