Alex lex.x编译:不在范围'开始'

时间:2015-11-03 05:29:16

标签: haskell alex

我在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'

1 个答案:

答案 0 :(得分:4)

启动代码仅在使用任何else-clause包装器时可用。

如果您阅读monad包装器的文档 - Section 5.3.3 - The "monad" wrapper - 您会看到它是第一个跟踪起始代码的包装器。

您还可以通过查找alex包装器文件来验证这一点 - 查找包含文件monad-...AlexWrapper-basic等的目录。在OS X上安装Haskell平台时,它们位于像AlexWrapper-posn这样的目录。函数/Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4begin仅出现在与monad相关的包装器中。