2015-11-03 75 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