Alex lex.x 编译:不在范围内 'begin'
Alex lex.x compilation : Not in scope 'begin'
我在 Lex.x 中有以下语句来解析块注释。
<0> "//".* { tokWValue LTokComment }
<0> "/*" { begin blockcomment }
<blockcomment> "*/" { begin 0 }
<blockcomment> . { tokWValue LTokComment }
但是如果我使用 Alex 生成 Lex.hs,它不会添加 'begin' 函数。
这导致以下编译错误。
src/Lex.x:367:18: Not in scope: ‘begin’
src/Lex.x:368:18: Not in scope: ‘begin’
知道哪里出了问题吗?
我正在使用包装器'posn'
起始代码仅在使用任何 monad-...
包装器时可用。
如果您阅读 monad 包装器的文档 -- Section 5.3.3 - The "monad" wrapper -- 您会发现它是第一个跟踪起始代码的包装器。
您还可以通过查找 alex 包装文件来验证这一点——查找包含文件 AlexWrapper-basic
、AlexWrapper-posn
等的目录。在 OS X 上安装 Haskell 平台它们位于 /Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4
这样的目录中。函数 begin
和 andBegin
仅出现在与 monad 相关的包装器中。
我在 Lex.x 中有以下语句来解析块注释。
<0> "//".* { tokWValue LTokComment }
<0> "/*" { begin blockcomment }
<blockcomment> "*/" { begin 0 }
<blockcomment> . { tokWValue LTokComment }
但是如果我使用 Alex 生成 Lex.hs,它不会添加 'begin' 函数。 这导致以下编译错误。
src/Lex.x:367:18: Not in scope: ‘begin’
src/Lex.x:368:18: Not in scope: ‘begin’
知道哪里出了问题吗?
我正在使用包装器'posn'
起始代码仅在使用任何 monad-...
包装器时可用。
如果您阅读 monad 包装器的文档 -- Section 5.3.3 - The "monad" wrapper -- 您会发现它是第一个跟踪起始代码的包装器。
您还可以通过查找 alex 包装文件来验证这一点——查找包含文件 AlexWrapper-basic
、AlexWrapper-posn
等的目录。在 OS X 上安装 Haskell 平台它们位于 /Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4
这样的目录中。函数 begin
和 andBegin
仅出现在与 monad 相关的包装器中。