Alex lex.x сборник: не входит в сферу 'begin'
У меня есть следующие утверждения в Lex.x для анализа комментариев блока.
<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
1 ответ
Стартовые коды доступны только при использовании любого из monad-...
оберток.
Если вы читаете документы по оболочке монады - Раздел 5.3.3 - Оболочка "монады" - вы увидите, что это первая оболочка, которая отслеживает начальный код.
Вы также можете убедиться в этом, найдя файлы обертки alex - найдите каталог, содержащий файлы AlexWrapper-basic
, AlexWrapper-posn
и т. д. На OS X при установке платформы Haskell они расположены в каталоге, таком как /Library/Haskell/ghc-7.10.2-x86_64/share/alex-3.1.4
, Функции begin
а также andBegin
встречаются только в обертках, связанных с монадой.