[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SEUL: Parsely announcements: Draft 1



Nick,

Here are some comments; I hope you find them useful. Unquoted (>) text
indicates either modifications or questions. I hope to write more in the
next day or so.

Very neat project, by the way. :)

Pete

nickm@seul.org wrote:
> 
> Hello, all.  Here are the first drafts of some announcements I want to
> send out about my project, Parsely.  (See http://parsely.seul.org/).
> 
> If you have time, I'd like feedback about the announcements.  I'm
> aiming and hackers and developers here -- I want them as interested as
> possible.
> 
> I've also got some specific questions about specific parts of the
> announcements.  I've marked them with "***", and put them on separate
> lines.
> 
> Many thanks,
>                         Nick
> 
> ================================================================1 Line
> 
> Parsely: A tool for writing configuration tools
> 
> Parsely: A cross-language tool for parsing and file manipulation
> 
> Parsely: A cross-language tool for configuration file parsing and
> manipulation
> 
> ***Which, if any, is best?

Parsely: A programmer's tool for parsing and manipulating configuration
         files  ?



> =============================================================Freshmeat

Parsely is a general framework for writing configuration tools. 
It exposes programmer-friendly interfaces to nearly any text-based file
format, so workable applications can be rapidly made by providing the
front-ends.  Parsely manipulates configuration files without disturbing
whitespace or formatting.

Python/pcre/SPARK support is complete, alpha-tested and ready for a
public beta. C/flex/Bison support is 50% done, and should be available
for testing by the end of May.

Although Parsely is not a complete configuration tool by itself, it makes
the development of effective general configuration programs a real
possibility. Current configuration format grammars include C, flex and
Bison, although many others are possible. 



>          Finally, I want to mention that it's cross-language and
>          cross-scanner, and cross-parser.  This also eludes me.]

     [I am unclear as to what "cross-scanner" and "cross-parser" mean.]

> 
> ***Which details are gratuitous?  [Perhaps the pcre/SPARK/flex/Bison
>          stuff... but I want people to know it isn't a new parser, but
>          an interface to all the old parsers.]
> 
> ***How can I make the right people want to hack this?
> 
> ======================================================================
> 
> ANNOUNCEMENT: Parsely 0.1.0
> 
Parsely is a general framework for programmers writing configuration
tools.  It exposes programmer-friendly interfaces to various file
formats, so that all you need to write are the front-end.
> 
> Here's how it works:
> 
>     1. You, the programmer, decide you want to write a tool that
>        manipulates a given file format.
> 
>     2. You write a grammar file describing the file format. For a set
>        of extremely simple examples, look in tests/*.ply.
> 
>     3. Parsely reads the grammar file, and writes a scanner/parser for
>        you in the language of your choice.  (Python support is
>        complete; C support is about 50% done.  C++ and perl are down
>        the pipe.)
> 
>     4. Later, your program can use the generated scanner to parse
>        files into an easily-manipulated tree structure. It can examine
>        and modify the tree structure, and later write its changes back
>        out to disk, preserving all comments and formatting.
> 
> Parsely doesn't try to reinvent the wheel; it interfaces with scanner-
> and parser- generators like flex and bison, rather than trying to
> generate efficient C scanners and parsers itself.
> 
> STATUS:
> 
> Parsely is written and documented.  You can download Parsely or browse
> its documentation at http://parsely.seul.org
> 
> Please be aware that this is a hackers-only release: you'll probably
> need to know a fair amount about Python to get it to work.
> 
> FEATURES:
> 
> ***I should write a feature list here.  Which features from the web page/
>    documentation seem most interesting to you?
> 
> EXAMPLE:
> 
> ***Should this section be here?  Is it enabling or intimidating?

     Examples are good, IMO./

> Suppose you want to write an interface to files that look like this:
> 
>         # (save this file as 'kvl.example')
>         [SectionName]
>         Key1=Val1
>         # Comment
>         Key2 =  "A string"
> 
>         [AnotherSectionName]
>         Key3= val2
>         # and so on....
> 
> You start by writing a file description.  (The format is explained
> more fully in the documentation.)
> 
>        # (save this file as 'kvl.ply')
>        ##
>        # First, you list all the tokens you care about.
>        ##
>        token '[';
>        token ']';
>        token '\n';
>        token '=';
>        token Word   = m/\w+/; # We proudly support Perl's regular expressions!
>        token String = m/"([^"]|\\")*"/;
> 
>        ##
>        # Next, you list the kinds of space that appear in the file.
>        ##
>        space /\s+/;
>        space /#.*$/; # Comments  count as space too.
>        default space ''; # By default, don't insert space.
> 
>        ##
>        # Last, you write a grammar for the file as a whole:
>        ##
>        start File;
>        File        = Section *;
>        Section     = OptNewlines '[' Word:name ']' Newlines Lines:body ;
>        Lines       = Line * ;
>        Line        = Word:key '=' Word:val   Newlines |
>                      Word:key '=' String:val Newlines ;
>        Newlines    = '\n' +;
>        OptNewlines = '\n' *;
> 
> Once you've written the file description, you can use Python to parse
> and manipulate this kind of files.  In reality, you'd want to do this
> behind a GUI, but we'll do a small example below:
> 
>        import parsely
> 
>        # Load the file format.
>        kvl_format = parsely.loadFormat('kvl')
> 
>        # Read the example file
>        file = kvl_format.parseFile('kvl.example')
> 
>        # Change the name of the second section
>        file[1].name = 'NewName'
> 
>        # Insert a new entry into the first section
>        file[0].body.append(
>                    kvl_format.newNode('Line',
>                                       ('NewKey', '=', 'NewVal', '\n'), ''))

    Is this staggered spacing intended?

> 
>        # Change the value of the first entry
>        file[0].body[0].val = 'modifiedvalue'
> 
>        # Write the file back to disk
>        file.flush()
> 
> Once you're done, the new file will reflect your changes, but be
> otherwise identical:
> 
>        [SectionName]
>        Key1=modifiedvalue
>        # Comment
>        Key2 =  "A string"
> 
>        NewKey=NewVal
>        [NewName]
>        Key3= val2
>        # and so on....
> 
> PENDING TASKS and CALL FOR HACKERS:
> 
> Parsely is alpha software! I'm trying to finish my Master's thesis
> now, but I should have a few hours here and there to hack on
> Parsely. These are the tasks I hope to accomplish first.
> 
>     * There needs to be a real build and install process. Right now,
>       this tool is hackers-only.
>     * The documentation could use fleshing out.
>     * We need more examples.
>     * File includes need to work properly.
>     * There needs to be C support.
>     * I need testers to help push me towards a stable release.
> 
> Most of all, I need good GUI hackers to help write graphical frontends
> for the backends Parsely provides. Give Parsely a try in your own
> configuration project! If you can't get it working yourself, drop me a
> line, and I'll help you write the .ply files and the the syntax
> manipulation code.
> 
> Parsely has the flexibility to handle everything from simple Key-value
> files to XF86Config to bash and tcsh configurations. It can probably
> help with your project too.
> 
> (In fact, it wouldn't be too hard to write a module to parse
> sendmail.cf, if only I knew what to do with it...)
> 
> FOR MORE INFORMATION:
> 
> Please feel free to email me at nickm@mit.edu, or see the Parsely web
> page at <http://www.parsely.org/> for screenshots, documentation, and
> a mailinglist.
> 
> *** What else do I need to say?
> ===========================================================================


-- 
Pete St. Onge
pete@seul.org