packages feed

hgom-0.5.1: README.markdown

# HGom #

An haskell clone of the original [java Gom](http://tom.loria.fr) code
generator.

## Compilation ##

To compile hgom, install 
[cabal-install](http://hackage.haskell.org/trac/hackage/wiki/CabalInstall)
and type the following.

    cabal configure
    cabal build

The `hgom` binary is generated in `dist/build/hgom`.

## Installation ##

    cabal install

## Generate developer documentation ##

By default, cabal generates no documentation since only the executable is
exported. Developers still can generate the modules' documentation as follows.

    cabal haddock --executables \
    --html-location='http://hackage.haskell.org/packages/archive/$pkg/latest/doc/html' \
    --hyperlink-source 

Only exported symbols are documented. Add `--internal` for unexported symbols
documentation.

The documentation index is then `dist/doc/html/hgom/hgom/index.html`.

## Running hgom ##

Run `hgom --help` to get some basic help. 
You can test the behaviour of `hgom` by running it as follows. Some examples
are valid files, other ones demonstrate `hgom` error messages.

    hgom examples/simple.gom
    hgom examples/big.gom
    hgom examples/many_errors.gom
    ...

## Test ##

The test suite is compiled only if the `test` flag is
set. For instance, run

    cabal configure -ftest
    cabal build
    ./dist/build/hgom/hgom --test "-a n"

or

    cabal install -ftest
    hgom --test "-a n"

where `n` is the number of generated random inputs for each test case.

For other arguments to the `--test` option, try `hgom --test "--help"`.

### Code Coverage ###

Code coverage can be tested as follows.

    cabal build --ghc-options "-fhpc -fforce-recomp"
    cd test/coverage
    ./coverage.sh

The documentation is generated in `test/coverage/html`.

### Benchmark ###

There is some benchmark in `test/bench` that generates bigger and bigger gom
files and runs `hgom` and `gom` on them, measuring the gom/hgom ratio
concerning the number of generated lines (using
[sloccount](http://www.dwheeler.com/sloccount)) and the elapsed time.

    cd test/bench
    make

It takes some time. The generated files can be plotted using
[gnuplot](http://www.gnuplot.info) for instance.

## Differences with gom ##

### Better ###

 * faster !
 * a far less permissive checker
 * smaller code, compiles much faster
 * almost 100% code coverage,
 * unit tests using QuickCheck, both on compiler 
   data structures and generated code
 * regression tests for parser and checker
 * more things optional: visitable, checker, ...
 * `toHaskell`, `makeRandom`, `depth` and `size`
    methods generation (optional)
 * smaller code for some generated 
   methods (string escaping factorized for instance)
 * faster code for some generated 
   methods (less function calls, more constants)
 * faster parser (`from*`) methods: don't use an
   intermediate ATerm representation
 * pretty-printed generated code, 
   optional compact (no indentation) option

### Worse ###

 * no hooks !
 * no ant task
 * imports only builtins
 * generates no comments

### Different ###

 * slightly different command-line arguments syntax