It is now available here: https://racket.discourse.group/t/extending-the-reader-to-support-kawa-like-treatment-of-colons/3676
sobota, 5 kwietnia 2025 o 11:55:55 UTC+2 [email protected] napisał(a): > I just read that this is no longer a place for Racket discussions, so I'm > moving the question to https://racket.discourse.group/ > > sobota, 5 kwietnia 2025 o 11:53:06 UTC+2 [email protected] napisał(a): > >> I've had an idea to implement a #lang that would provide some syntactic >> extensions akin to those provided by the Kawa Scheme, particularly with >> regard to the usage of a colon. >> >> In particular, in Kawa: >> - the sequence "x:" will be read as a keyword equivalent to #:x >> - the sequence "a:b" will be read as ($lookup$ a `b) >> - likewise, the sequence "a:b:c" will be read as ($lookup$ ($lookup$ a >> `b) `c) and so on >> - if two colons appear in a row, as in, say "a::b", they will be treated >> as a separate token, i.e. >> >> (call-with-input-string "a::b" read) >> will return the symbol a >> >> and >> (call-with-input-string "(a::b)" read) >> will return the list of three tokens, (a :: b) >> >> Kawa treats each pair of colons as a separate token, so >> >> (call-with-input-string "(:::::::)" read) >> returns the list (:: :: :: :) >> but I would actually prefer to treat a sequence of two or more colons as >> a single token. >> >> In either case, I wonder if someone could guide me how to do this, >> preferably using Racket's internal machinery that's already out there. >> >> I found that atoms in Racket are being read by the >> "read-symbol-or-number?" procedure from expander/read/symbol-or-number.rkt, >> but I don't think it is sufficiently tweakable - in particular because if I >> read a colon, I might have to unread it if I can peek another colon. >> >> Is there any simple way out of this situation, or do I have to actually >> implement a Lisp reader from scratch? (I'd be OK with that, because I >> already wrote a reader in Kawa that I think I could adapt, but then I'd >> probably have some questions about dealing with syntax objects. The >> alternative would be to modify Racket's sources to make the reader API more >> flexible, e.g. allowing to parameterize expander's "read" with the >> "read-symbol-or-number" function, which I think would be more in the spirit >> of Racket, but it would probably also take more time to downstream) >> >> Thanks in advance, >> Panicz >> > -- This group is deprecated and retained as an archive. Racket discussions have moved to the Racket Discourse at https://racket.discourse.group/ . --- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. --- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/racket-users/bb163934-0bbe-42c7-8776-f9d60f8ac4ecn%40googlegroups.com.

