[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Simplifying command line parsing with Genparse
From: |
Jim Meyering |
Subject: |
Re: Simplifying command line parsing with Genparse |
Date: |
Thu, 07 Jun 2007 14:44:38 +0200 |
address@hidden (Michael Geng) wrote:
> would it be an option to use Genparse (http://genparse.sourceforge.net/)
> for command line parsing in the GNU Coreutils?
>
> I'm one of the developers of Genparse and I recently used some of the
> well known Coreutils as an exercise for testing Genparse (see
> http://genparse.sourceforge.net/examples.html). Using Genparse for
> generating the command line parsing code could reduce the amount of
> coreutils source code because the input to Genparse is a short config
> file only. The overhead of writing the parser code would be delegated
> to the tool then.
>
> The Genparse generated parsers call getopt() (or getopt_long()) exactly
> the same way the Coreutils's command line parsers do it today. This
> wouldn't be changed. So the code Genparse generates will be very similar
> to the existing hand written parsers of the individual Coreutils tools.
> But calling getopt() is only part of the work, preparing and evaluating
> the results of getopt() also causes coding work which could be delegated
> to Genparse. Genparse also automatically generates a help screen which
> would no longer have to be done manually.
Hi Michael,
Genparse looks promising.
I like the examples. But there are almost 100 programs in the
coreutils. If genparse can really handle all of those use cases
without causing any significant degradation in the tools, then
it will be hard to object.
How does it deal with internationalization?
However, before I even consider it seriously, it'll need
some improvements:
- it must detect any and all write failures[*]
- packaging so that I can run ./configure && make && make check, and
if I don't happen to have cppunit infrastructure, gcj or something
similar, it should tell me about it directly, rather than causing
harder-to-diagnose build failures.
- one of the generated .c files I looked at calls strdup but doesn't
check for a NULL return value or (less important) attempt to avoid
the leak when the corresponding --backup=S option appears twice or more.
- not exactly essential, but highly recommended: it should work
with the latest autoconf and automake
[*] with genparse-0.6.3, I get this:
$ strace -o log -e write ./genparse -o /full/tmp/foo ../examples/ls.gp \
&& echo exit status 0
creating /full/tmp/foo.h...done
creating /full/tmp/foo.c...done
exit status 0
$ tail -2 log
write(3, "/*******************************"..., 80) = -1 ENOSPC (No space
left on device)
write(1, "creating /full/tmp/foo.c...done\n", 32) = 32
The two files it claims to have created are both empty,
and genparse exited successfully.
This means genparse is not detecting write or close failures.
Note that in the example above, /full/tmp is a full file system that still
has free inodes, so open can create new files, but writes always fail.
- Simplifying command line parsing with Genparse, Michael Geng, 2007/06/07
- Re: Simplifying command line parsing with Genparse,
Jim Meyering <=
- Re: Simplifying command line parsing with Genparse, Andreas Schwab, 2007/06/07
- Re: Simplifying command line parsing with Genparse, Jim Meyering, 2007/06/07
- Re: Simplifying command line parsing with Genparse, Michael Geng, 2007/06/07
- Re: Simplifying command line parsing with Genparse, Bob Proulx, 2007/06/07
- Re: Simplifying command line parsing with Genparse, Michael Geng, 2007/06/08
- Re: Simplifying command line parsing with Genparse, Bob Proulx, 2007/06/08
Re: Simplifying command line parsing with Genparse, Michael Geng, 2007/06/07
Re: Simplifying command line parsing with Genparse, Michael Geng, 2007/06/17