2015-11-03 81 views
2

我在Lex.x中有以下语句来分析块注释。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处”使用任何monad-...包装时

回答

4

开始码才可用。

如果您阅读monad包装文档 - Section 5.3.3 - The "monad" wrapper - 您会发现它是第一个跟踪启动代码的包装。

您也可以通过寻找亚历克斯封装文件验证这一点 - 查找包含文件AlexWrapper-basicAlexWrapper-posn等在OS X上安装Haskell的平台时,他们都位于像/Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4一个目录的目录。函数beginandBegin只出现在monad相关的包装中。

+1

Alex文档没有提及对包装的依赖。 [alex文档](https://www.haskell.org/alex/doc/html/alex-files.html)。无论如何感谢您的回复! – dfordivam