【问题标题】:Haskell; Parse error on input 'module'哈斯克尔;输入“模块”上的解析错误
【发布时间】:2017-12-01 00:25:29
【问题描述】:

我正在尝试在 Haskell 中编写解析器,但在编译时遇到了问题。错误是“输入'模块'上的解析错误。我可以通过去掉括号来修复这个错误,但是错误只是切换到“输入“%”上的解析错误。我也尝试删除 module Main where 行,但这仍然给我输入“%”的错误。

{
module Main where
}

%name parser
%tokentype { Token }
%error { parseError }

%token
...

【问题讨论】:

  • 您正在运行的命令的确切顺序是什么?
  • @DanielWagner 我正在使用命令:l Main.hs
  • 这是一个快乐的语法——它应该有一个.y 后缀,你需要在将它加载到 GHCi 之前使用happy 编译它。请注意,如果这是更大项目的一部分,Cabal 可以为您处理第二部分(只需确保在 build-tools 中包含 happy)。
  • 好的。这不是 Haskell 代码,不能被 ghc(i) 直接使用。大概您是从教程或类似教程中获得此代码的;您应该查阅教程以确定构建此代码的正确方法。它需要通过某种工具(可能是 alex 或 happy?)进行预处理以生成 Haskell 代码。

标签: haskell


【解决方案1】:

你所拥有的不是 Haskell 文件。它看起来像是一个解析器生成器的语法文件,(可能是Happy)。

您应该首先重命名您的语法文件以使用 .y 文件扩展名,因为它是一个语法文件而不是 Haskell 源代码文件。然后,调用解析器生成器从您拥有的Main.y 生成Main.hs

happy Main.y

最后,您可以获取这个生成的Main.hs 文件并使用 ghc 运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多