Discussion:
[ANN] Nyacc version 0.83.0 released
Matt Wette
2018-01-21 18:19:11 UTC
Permalink
Nyacc version 0.83.0 has been released.   Nyacc is a set of Guile
modules for generating parsers,
parsing C code, and converting C headers to Guile Scheme.

Version 0.83.0 includes the following changes over version 0.82.4:
1) changes to nyacc/lex.scm to read octal constants
2) change in C99 parser to allow lone `;' in structs and unions
3) fixed but in C99 parser which was truncating long CPP defines
4) change in C99 parser to make get-gcc-inc-dirs more accurate
5) updated C99 pretty printer to handle initializer lists
6) many changes to the ffi-helper

Some FFI Helper changes:
1) many code updates, api changes, etc
2) updates to the documentation (see examples/nyacc/lang/c99/ffi-help.texi)
3) added procedure "load-include-file", which is feature Ludo asked for:
     guile> (load-include-file "cairo.h" #:pkg-config "cairo")
   This will load FFIs for all C declarations in cairo.h into the
current module.
   Not flushed out.
4) added procedure "fh-cnvt-cdecl" for playing around with the FH.
     guile> (use-modules (nyacc lang c99 ffi-help))
     guile> (use-modules (bytestructures guile))
     guile> (use-modules (system ffi-help-rt))
     guile> (use-modules ((system foreign) #:prefix ffi:))
     guile> (define fh-llibs '())
     guile> (define fexp (fh-cnvt-cdecl "fmod" "double fmod(double
x,double y);")
     guile> ,pp exp
     $1 = (begin
       (define ~fmod
         (delay (fh-link-proc
                  ffi:double
                  "fmod"
                  (list ffi:double ffi:double)
                  fh-llibs)))
       (define (fmod x y)
         (let ((~x (unwrap~float x)) (~y (unwrap~float y)))
           ((force ~fmod) ~x ~y)))
       (export fmod))
     guile> (eval exp (current-module))
     guile> (fmod 2.3 0.5)
     $2 = 0.2999999999999998


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.

NYACC maturity is beta level.

NYACC is free software; the full source distribution is available through

* the tarball repository:
    https://download.savannah.gnu.org/releases/nyacc/

* the git repository:
    git://git.savannah.nongnu.org/nyacc.git

home page, project page and user's guide:
* http://www.nongnu.org/nyacc
* https://savannah.nongnu.org/projects/nyacc
* http://www.nongnu.org/nyacc/nyacc-ug.html

For support see:
    https://savannah.nongnu.org/support/?group=nyacc
mwette$
Jan Nieuwenhuizen
2018-04-06 12:38:28 UTC
Permalink
Matt Wette writes:

Hey Matt,
Nyacc version 0.83.0 has been released.   Nyacc is a set of Guile
modules for generating parsers, parsing C code, and converting C
headers to Guile Scheme.
Very nice work.

I've not really been working on MesCC for months now, concentrating on
Mes itself to support running Nyacc and MesCC. I postponed updating
Nyacc and even reverted to using 0.80.40 (or actually my slightly
modified 0.80.42).

I finally got round to looking at it and delighted that everything
works! Two patches attached: cond-expands need to grok `mes' (or use
else instead of `guile'). Also, parsing can be still a bit slow when
running Nyacc on Mes (tcc.c now parses in ~1h); so I added some tracing
to stderr. Possibly you have a better way to do this, esp. the
NYACC_TRACE environment variable kludge...

Saw your headsup about changing struct definitions, shall I wait with my
upcomping Mes 0.12 release for that; do you already have a branch where
I can test it and change MesCC?

Greetings,
janneke
Matt Wette
2018-04-07 00:16:53 UTC
Permalink
Post by Jan Nieuwenhuizen
Hey Matt,
I finally got round to looking at it and delighted that everything
works! Two patches attached: cond-expands need to grok `mes' (or use
else instead of `guile'). Also, parsing can be still a bit slow when
running Nyacc on Mes (tcc.c now parses in ~1h); so I added some tracing
to stderr. Possibly you have a better way to do this, esp. the
NYACC_TRACE environment variable kludge...
I will check out your patches.
Post by Jan Nieuwenhuizen
Saw your headsup about changing struct definitions, shall I wait with my
upcomping Mes 0.12 release for that; do you already have a branch where
I can test it and change MesCC?
I think it will take me a while to make a release.  I am in the process of
banging on this for a while.  When I get to a good point I will push on
c99dev branch.  I will think about creating another branch for ffi-help dev.

Matt
Matt Wette
2018-04-07 00:20:01 UTC
Permalink
Post by Jan Nieuwenhuizen
Hey Matt,
I added some tracing
to stderr. Possibly you have a better way to do this, esp. the
NYACC_TRACE environment variable kludge...
There is a #:debug option to the parser that provide a trace through the
parsing.
And if you look in examples/nyacc/lang/c99/Tmach.scm there is code to
show how
to generate a file with parser states.

Matt
Jan Nieuwenhuizen
2018-04-07 12:21:38 UTC
Permalink
Post by Matt Wette
I think it will take me a while to make a release.
That's fine. Although all my tests pass, I found that to compile mes.c
I need string-fold-right. So I added that to Mes.

After that, tcc.c hangs while parsing. Will have to investigate later,
for now I'm reverting to 0.80.42.
Post by Matt Wette
Post by Jan Nieuwenhuizen
I added some tracing
to stderr. Possibly you have a better way to do this, esp. the
NYACC_TRACE environment variable kludge...
There is a #:debug option to the parser that provide a trace through
the parsing.
Yes, I'm using that; great.
Post by Matt Wette
And if you look in examples/nyacc/lang/c99/Tmach.scm there is code to
show how
to generate a file with parser states.
OK.

The NYACC_TRACE=1 feature is meant for users. Parsing tcc with
Mes+MesCC currently takes ~1h (with Guile+MesCC only 40s), so printing
some minimal feedback to the user (e.g., al functions and global
variables) is helpful.

I'll try to change my patch to use something like

#:trace '(function global)

similar to #debug.

Greetings,
janneke
--
Jan Nieuwenhuizen <***@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
Loading...