language-c: Analysis and generation of C code

[ bsd3, language, library ] [ Propose Tags ]

Language C is a haskell library for the analysis and generation of C code. It features a complete, well tested parser and pretty printer for all of C99 and a large set of C11 and clang/GNU extensions.

[Skip to Readme]
Versions [RSS] [faq] 0.3.0, 0.3.1,, 0.3.2,, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7, 0.5.0, 0.6, 0.6.1, 0.7.0, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2, 0.8.3, 0.9,
Change log ChangeLog
Dependencies array, base (>=4.7 && <5), bytestring (>=0.9.0), containers (>=0.3), deepseq (>= && <1.5), directory, filepath, ghc-prim (==0.2.*), mtl, pretty (<1.2.0), process, syb [details]
License BSD-3-Clause
Copyright LICENSE
Category Language
Home page
Bug tracker
Source repo head: git clone
Uploaded by jophish at 2020-09-04T14:31:40Z
Distributions Arch:, Debian:0.8.1, Fedora:, FreeBSD:0.4.7, LTSHaskell:, NixOS:, Stackage:, openSUSE:0.9
Downloads 51965 total (419 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]


[Index] [Quick Jump]

Manual Flags

Automatic Flags

Use ByteString as InputStream datatype


Data.Generics available in separate package.


Turn on all warnings for building (development)


Support IEC 60559 floating point extension (defines _Float128)


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees


Readme for language-c-0.9

[back to package description]
= Language.C =

Language.C is a parser and pretty-printer framework for C11 and the extensions of gcc.


== Build and Install ==

cabal install

-- or --

runhaskell Setup.hs configure FLAGS
runhaskell Setup.hs build
runhaskell Setup.hs install

Provide the set of flags passing
to configure.

== Compatibility ==

Tested with GHC 8.0, 8.2, 8.4, 8.6, 8.8 and 8.10

It is recommended to use the most recent platform release:

== C Language Compatibility ==

Currently unsupported C11 constructs:
 - static assertion 6.7.10 (_Static_assert)
 - generic selection (_Generic)
 - _Atomic, _Alignas, _Thread_local
 - Universal character names

Currently unsupported GNU C extensions:
 - __auto_type
 - __builtin_offsetof
   char a[__builtin_offsetof (struct S, sa->f)
 - _Decimal32
 - Extended assembler
   __asm__ __volatile__ ("" : : : );
   __asm__ goto ("" : : : : label);
 - __attribute__((packed)): types featuring this attribute may have an
   incorrect size or alignment calculated.

IEC 60559:
  Since language-c-0.8, extended floating point types are supported (gcc 7 feature). Package maintainers may decide to disable these types (flag iecFpExtension) to work around the fact that the _Float128 type is redefined by glibc >= 2.26 if gcc < 7 is used for preprocessing:
  /* The type _Float128 exists only since GCC 7.0.  */
  # if !__GNUC_PREREQ (7, 0) || defined __cplusplus
  typedef __float128 _Float128;
  # endif

== Sources ==

see src/README

== Examples ==

A couple of small examples are available in /examples

== Testing ==

A couple of regression tests can be run via
> cd test/harness; make

For more tests, see test/README.