2010-12-16 3 views
12

Я пишу компилятор для класса, который я беру. Класс не специально Haskell, но я использую Haskell для написания моего компилятора и интерпретатора. У меня есть установка пакета для кэба, чтобы, надеюсь, облегчить запуск/компиляцию моего профессора. У меня есть счастливый и alex в поле build-tools для обоих исполняемых файлов, но Cabal игнорирует это, а затем жалуется, что он не может найти модули, которые Happy и Alex должны генерировать. Если я вручную запустил:Использование alex/happy with Cabal

alex LimpScanner.x 
happy LimpParser.y 

затем кабалка отлично работает.

Я думал, что у меня была автоматическая подзарядка, но, возможно, я помню несовершенство.

limp.cabal:

-- limp.cabal auto-generated by cabal init. For additional options, 
-- see 
-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr. 
-- The name of the package. 
Name:    limp 

-- The package version. See the Haskell package versioning policy 
-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for 
-- standards guiding when and how versions should be incremented. 
Version:    0.1 

-- A short (one-line) description of the package. 
Synopsis:   LIMP Compiler (Compiler Construction course project) 

-- A longer description of the package. 
-- Description:   

-- URL for the project homepage or repository. 
Homepage:   http://www.cs.rit.edu/~eca7215/limp/ 

-- The license under which the package is released. 
License:    AllRightsReserved 

-- The file containing the license text. 
License-file:  LICENSE 

-- The package author(s). 
Author:    Edward Amsden 

-- An email address to which users can send suggestions, bug reports, 
-- and patches. 
Maintainer:   [email protected] 

-- A copyright notice. 
-- Copyright:   

Category:   Language 

Build-type:   Simple 

-- Extra files to be distributed with the package, such as examples or 
-- a README. 
-- Extra-source-files: 

-- Constraint on the version of Cabal needed to build this package. 
Cabal-version:  >=1.2 


Executable limp 
    -- .hs or .lhs file containing the Main module. 
    Main-is: Limp.hs 

    hs-source-dirs: src  

    -- Packages needed in order to build this package. 
    Build-depends: base, array, haskell98  

    -- Modules not exported by this package. 
    -- Other-modules:  

    -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source. 
    Build-tools:   alex, happy 
Executable limpi 
    Main-is: LimpInterpreter.hs 
    hs-source-dirs: src 
    Build-depends: base, array, haskell98 
    Build-tools: alex, happy 

Каталог раскладка:

limp/ 
├── Setup.hs 
├── limp.cabal 
└── src/ 
    ├── Limp.hs 
    ├── LimpInterpreter.hs 
    ├── LimpParser.ly 
    ├── LimpScanner.x 
    └── LimpToken.hs 
+0

Пока вы заявляете, что вы используете модули `` LimpParser` и LimpScanner`, есть файлы с именем `LimpParser.x` и` LimpScanner.ly`, а также установить Alex и Happy, то любая версия Cabal с прошлого года или около того должна автоматически запускать `alex` и` happy`. Хм. – ephemient 2010-12-16 22:01:25

+0

Нам нужно больше деталей. Какова структура вашего каталога? Каков ваш файл в кэше? – 2010-12-16 23:40:01

ответ

10

Видимо, что я пропускал был на самом деле другие-модули: поле. Как только это было добавлено, счастливая кабала (простите за каламбур) построила моего переводчика.

14

Для Уоррен Харрис и других подобных ему (и мне), которые могут появиться позже, другие модули должны быть настроены на список имен модулей, которые (я предполагаю?), Как ожидается, будут созданы с помощью инструментов, перечисленных в встроенные инструменты.

Итак, в моем случае, соответствующие разделы моего .cabal файл закончился выглядеть так:

build-tools:   alex, happy 
other-modules:  Language.Heidi.Parser, 
        Language.Heidi.Lexer