Re: Should binding section be rewritten more algorithmically?

Marcos Caceres:
> The binding part… the syntax part is a different matter. The syntax
> part is much more clear (though it would have been nice if it would
> have been written for a parser), but the only proper parser I've seen
> has issues in that it's machine generated:
>
> https://github.com/darobin/webidl.js

I'm not sure what you mean about being written for a parser.  A grammar
is a perfect basis for a parser, no? :)  (And you can't get much simpler
than an LL(1) grammar for a language like this, in terms of writing a
parser.)

> I agree that for specification writing, the first half of the spec
> works great. I've used it for the last year on an almost daily basis
> and it's just gotten better and better… but now, implementing the
> bottom part… not so good for me at least.

To be honest, I would find it a bit strange for the spec to have 
algorithmic requirements on how to set up the ECMAScript environment.  I 
mean I guess it could, something like:

   To *set up an ECMAScript environment* for a given set of IDL
   fragments, run the following algorithm:

     1. For each IDL interface:
         1. Let intf be a new object.
         2. Let proto be a new object.
         3. For each IDL operation on the interface:
             1. Let F be a Function object that implements the
                operation.
             2. Let desc be a property descriptor.
             3. Set desc.[[Value]] to F.
             5. Call [[DefineOwnProperty]] on proto with the
                identifier of the IDL operation as the identifier,
                desc as the property descriptor, and false for the Throw
                argument.
         4. For each IDL attribute on the interface:
             ...
         5. Let desc be a property descriptor.
         6. Set desc.[[Value]] to proto.
         7. Call [[DefineOwnProperty]] on intf with identifier
            "prototype", desc as the property descriptor, and false for
            the Throw argument.
         8. Set desc.[[Value]] to intf.
         9. Call [[DefineOwnProperty]] on the global object with
            the identifier of the IDL interface as the identifier,
            desc as the property descriptor, and false for the Throw
            argument.
     2. For each IDL exception:
          ...

but I am not sure if it is worth it.

Received on Saturday, 24 March 2012 01:11:14 UTC