Another option, which probably has a lot of terrible consequences, is to 
transform "a.b" into "3-d syntax" (a struct embedded in syntax) that can 
now be interpreted differently by forms that are interested. For instance a 
custom "define" could grab the 3d-syntax in the name and use it to make a 
decision on what to actually define (or raise an error). In an expression 
context, #%datum could see this syntax and transform it into some sort of 
binding looking or other syntax (e.g. (#%dot a b)), which could then be 
resolved in the typical way.

This approach probably wouldn't work very well because a lot of syntax 
transformers don't expect to see 3-d syntax. In fact sometimes 3-d syntax 
is rejected before being made into a syntax object. If you can get this to 
work I will be pretty impressed.


On Tuesday, December 11, 2018 at 11:15:10 PM UTC-8, Ryan Kramer wrote:
>
> Thanks for your response Alexis. You are right: once I figured out the 
> correct way to customize the reader, the rest fell into place much more 
> easily. Now, when my reader sees a dot it asks the base reader to read 
> another piece of syntax, which must be an identifier.
>
> So (define a.b 3) becomes (define a .b 3) and the default error message is 
> good enough for now, especially since Racket prints out the 2nd version 
> with the error message.
>
> Also, I realized what a bad idea rewriting "a+b" to (+ a b) is. Because 
> then I should do the same for subtraction. And then, for example, 
> "struct-info" becomes (- struct info) which is a death sentence for a 
> language based on Racket. So now infix notation requires whitespace around 
> the operator.
>
> For those curious "what are you really trying to do anyway?" I really like 
> how at-exp can attach a convenient syntax onto racket without interfering 
> with your ability to write standard racket. I am trying to do something 
> similar. In my language, curly braces will get treated differently than the 
> other paren-shapes. For example {if 10 .add1 {.equal? 11} 'yep 'nope} will 
> get rewritten to (if (equal? (add1 10) 11) 'yep 'nope). My hope is that 
> experienced Racketeers will find it convenient when they want to use it, 
> and unintrusive when they don't. And that beginners who would be scared off 
> by raw s-expressions will find it familiar enough to be pleasant.
>

-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to