Re: Web IDL parser for Guile (was: Re: [ANN] Hoot 0.6.1 released!)

"Ricardo G. Herdt" <[email protected]> Sat, 21 Jun 2025 15:48:12 +0000
Newsgroups gmane.lisp.guile.user
Message-ID <[email protected]>
Hi,

I've worked in the past weeks on a possible transformation of the parse 
tree into a model.

The model: 
https://codeberg.org/rgherdt/webidl-parser/src/branch/main/webidl/model.scm

An example call: https://codeberg.org/rgherdt/webidl-parser#example-call

I implemented the model mainly with records, but it should be trivial to 
adapt the code that traverses the parse-tree to generate any data 
structures we want. This is done
with `tree->model`:

https://codeberg.org/rgherdt/webidl-parser/src/branch/main/webidl/parse-to-model.scm

I also changed the API, so that `parse-webidl-file` and 
`parse-webidl-string` output the model instead of the tree by default. 
To get the previous behavior one can
call it with the keyword argument #:output-parse-tree set to #t.

Since I wrote this with hoot's needs in mind, I would be happy to make 
any changes needed. Let me know if you have any improvement suggestions 
or ideas of a possible target code
to be generated out of it. BTW I'm also reachable on libera: rgherdt


Regards,

Ricardo G. Herdt


Am 06.06.2025 22:23 schrieb Thompson, David:
> Hi Ricardo,
> 
> On Fri, Jun 6, 2025 at 3:36 PM Ricardo G. Herdt <[email protected]> 
> wrote:
>> 
>> Hi,
>> 
>> Motivated by this discussion I took the chance to have some fun 
>> writing
>> parsers and
>> wrote one for Web IDL files in Guile:
>> 
>> https://codeberg.org/rgherdt/webidl-parser
> 
> Wow, this is awesome!!!
> 
>> Actually there are two parsers involved. The first reads the
>> WebIDL-grammar and generates parts of
>> the main parser for IDL files. But that's an implementation detail :) 
>> .
>> See README.md.
>> 
>> For now the result is an s-expression based parse tree, with some
>> simplifications to make
>> working with it easier. I could develop it further to simplify even 
>> more
>> or help generating
>> bindings or something like that. If you have ideas of what target
>> bindings could look like let me know. Right
>> now I'm not sure what information of IDL-described APIs are relevant 
>> for
>> binding generation, so I will
>> postpone work on it until needed.
>> 
>> I did some tests with IDL references from
>> https://github.com/w3c/webref/tree/curated. Most of them
>> work, with two exceptions due a possible inconsistency in the spec, as
>> noted in my README.
>> Solving it should be trivial though. Some IDLs I got from Gecko are
>> problematic, since they have #ifdef
>> directives and stuff like that, which are not expected by the grammar.
>> Adapting the lexer shouldn't be difficult,
>> just let me know if that's needed.
> 
> I hope to find some time to take this library for a spin soon. Maybe
> sometime in the next couple of weeks. I'll let you know if I run into
> any trouble or have questions.
> 
> This is one huge step towards having Scheme libraries for a whole
> bunch of Web APIs!
> 
> Thanks again,
> 
> - Dave