[gambit-list] Reading S-expressions
feeley at iro.umontreal.ca
Sat May 2 23:23:05 EDT 2009
On 1-May-09, at 6:40 PM, Marc Feeley wrote:
> The API of that readtable functionality is imperative (it side-effects
> the readtable). I would prefer a functional API (I admit, not too
> hard to do). Anyway, the thing is that I view the "##" primitives as
> more fluid in their API as the non-## primitives. There are no
> guarantees that the ## primitives will maintain their API over future
> versions of Gambit. There are no guarantees for the non-## primitives
> either, but I would need a very good reason to change the API. So the
> user can rely on the non-## primitives much more than the non-## ones.
Of course I meant "... more than the ## ones".
In the case of the readtable procedure ##readtable-char-class-set! I
hesitate to make that particular API final. Currently the API is:
(##readtable-char-class-set! rt c delimiter? handler)
The readtable rt will classify the character c as a delimiter (iff
delimiter? is true) and when character c is encountered by the reader
as an initial character of a token, it will call the handler
procedure. The handler's API is
(handler re c)
Here re is the "read-environment", a structure which packages various
information useful for the reader (the input port, the readtable, the
location information, etc), and c is the character that caused this
handler to be called (multiple characters can have the same handler,
for example open parenthesis and open bracket).
All of this is "reasonable", but might change in the future. Moreover
documenting this stuff is a slippery slope cause it exposes the
reader's implementation, and the reader is a pretty complex beast.
More information about the Gambit-list