2015-11-03 6 views
2

У меня есть следующие инструкции в Lex.x для разбора комментариев блока.Alex lex.x компиляция: не в области 'begin'

<0> "//".*     { tokWValue LTokComment }    
<0> "/*"     { begin blockcomment  }    
<blockcomment> "*/"   { begin 0     }    
<blockcomment> .   { tokWValue LTokComment } 

Но если я сгенерирую Lex.hs с помощью Alex, он не добавит функцию «begin». Это приводит к следующей ошибке компиляции.

src/Lex.x:367:18: Not in scope: ‘begin’ 
src/Lex.x:368:18: Not in scope: ‘begin’ 

Любая идея, что может быть неправильным?

Я использую обертку «POSN»

ответ

4

Начало коды доступны только при использовании любого из monad-... оберток.

Если вы прочитали документы для оболочки монады - Section 5.3.3 - The "monad" wrapper - вы увидите, что это первая оболочка, которая отслеживает начальный код.

Вы также можете проверить это, найдя файлы оболочки AleX - искать каталог, содержащий файлы AlexWrapper-basic, AlexWrapper-posn и т.д. На OS X при установке Haskell Platform они находятся в каталоге как /Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4. Функции begin и andBegin встречаются только в оболочках, связанных с монадами.

+1

В документации Alex не упоминается какая-либо зависимость от оберток. [alex documentation] (https://www.haskell.org/alex/doc/html/alex-files.html). В любом случае спасибо за ваш ответ! – dfordivam

 Смежные вопросы

  • Нет связанных вопросов^_^