NYACC, for Not Yet Another Compiler Compiler, is set of guile modules for
generating parsers and lexical analyzers. It also provides sample parsers
and pretty-printers using SXML trees as an intermediate representation.
It provides a decent C parser and a `FFI Helper' tool to help create
Guile Scheme bindings for C-based libraries.
It provides (partially implemented) compilers based on above mentioned
parsers to allow execution with Guile as extension languages.
The following are changes in 4.0.0 wrt 3.04.6:
* Adopt semantic versioning.
* Remove (nyacc foreign {arch-info,cdata}): use external (foreign ...).
Seehttps://github.com/mwette/guile-cdata.
* c99/parser,ffi-help: Convert cpp-define dict from alist to vhash,
resulting in 75% reduction in compile-ffi time on gtk2.ffi and deps.
* Remove c99 "inc-help" which would was originally used for
short-cutting include files. Not needed anymore since nyacc c99
can now parse /usr/include with good reliability.
* ffi-help #:pkg-config now takes string or list of strings.
* all Makefile.in: add target `uninstall'
* ffi-help.scm: Fix missing stdint types (e.g. int64_t), which are not
intrinsic to C but in the backends, so call (be-base 'int64_t).
* Eliminate use of (nyacc lang c99 fh-utils); merged into ffi-help.
* Add FFI bstructs and bytestructure backends from guile-fhbe.
code in module/nyacc/ffi-bkend now provides:
+ ccode->bstructs-sexp
+ ccode->bytestructures-sexp
and the ffi compiler supports theses backends. example:
$ guild compile-ffi -b nyacc/ffi-bkend/bytestructures foo.ffi
Note that bstructs and bytestructures do not provide complete
support for C types: e.g., function pointers.
* ffi-help.scm(udecl->sexp): Track function decl's in defined list.
* ffi-help.scm(udecl->sexp): Replace define-public with define+export.
* ffi-help.scm(udecl->sexp,mtail->be-type): for struct foo *v include
the (w/struct-* "foo"), and unions too, in `defined' and use them
* c99: instead of return-defs, pass a parameter for defs
* c99: move move-attributes from util.scm to parser.scm
* c99: reworked attribute handling
* Update ffi-helper user guide.
NYACC maturity is production/stable level.
NYACC is free software; the full source distribution is available through
* the tarball repository:
https://github.com/mwette/nyacc/releases
pre 3.00:
https://download.savannah.gnu.org/releases/nyacc
* the git repository:
git://github.com:mwette/nyacc.git
pre 3.00:
git://git.savannah.nongnu.org/nyacc.git
home page, project page and user's guides:
https://github.com/mwette/nyacc/wiki
Report bugs:
https://github.com/mwette/nyacc/issues