Re: Lexical syntax for boxes
Per Bothner 22 May 2013 16:53 UTC
On 05/22/2013 08:12 AM, John Cowan wrote:
> Alex Shinn scripsit:
>> SRFI-108 is pretty huge and scares me somewhat.
It's basically Scribble with a slightly different syntax, meant to
share syntax with SRFI-109 quasi-strings. The major non-syntax
issue is that a tag &foo maps to $construct$:foo rather than plain foo,
to allow different bindings for &foo and foo.
> I think the core is pretty simple. For objects you want to initialize
> from a literal string, you write:
>
> &name{string}
>
> which is lexed as
>
> ($construct$:name "string")
>
> If you want expressions instead, you write:
>
> &name[expr expr expr]
Actually, at your request, the specification
requires a following {}. I.e.
&name[expr expr expr]{}
This is because of concerns about ambiguity with &foo
as a name, for example for an exception-type.
Kawa does not require the '{}'. Personally, I don't
think the ambiguity is a real problem: &foo immediately
followed by '[' with no intervening spaces can be read
pretty unambiguously a SRFI-108 form.
>
> which is lexed as
>
> ($construct$:name $<< expr expr expr $>>$)
>
> where $<<$ and $>>$ are variables defined by the implementation as
> distinct objects, typically empty strings.
Actually,
&name[expr expr expr]{}
is lexed as:
($construct$:name expr expr expr $>>$)
i.e. without the initial $<<$. This is to allow disambiguating
&name{&[expr expr expr]}
which is lexed as:
($construct$:name $<<$ expr expr expr $>>$)
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/