I've noticed the mistake of my last mail.
If we make curly-braces a delimiter, it's easier to read infix exp.
And I think we may add an new option to read-options for curly-braces since
there *is* an option for square-brackets.
Considering such a patch for curly-braces could be delay applied. I think
it's better to not touch modern-reader now. I'll look forward to patching
curly-braces as delimiter first.

On Tue, Mar 13, 2012 at 10:01 AM, Nala Ginrut <nalagin...@gmail.com> wrote:

> Thanks Mark! And another question:
> I think there isn't an easy way to use Guile inner reader directly.
> In simpler case, we can read the exp with it, say:
> {2 * 3 - 6}
> We may use inner reader to read the exp within {} or [] or ()
> But the nested exp is not so easy:
> {2 * {3 - 6}}
> This CFG is easy to handle with calling modern-reader recursively. If not,
> the original modern-reader should be rewritten to use Guile inner reader.
> And the modern-reader must prognosis whether there's nested exp within. In
> this way, Guile inner reader works when there's simple exp left only. Most
> of the nested exp will be handled by modern-reader itself.
> So I think it maybe not worthy to use Guile inner reader instead. What do
> you think?
>
> Regards.
>
> On Tue, Mar 13, 2012 at 3:05 AM, Mark H Weaver <m...@netris.org> wrote:
>
>> Nala Ginrut <nalagin...@gmail.com> writes:
>>
>> > On Tue, Mar 6, 2012 at 12:35 PM, Mark H Weaver <m...@netris.org> wrote:
>> >> Guile's reader is of no help at all with source properties.
>>
>> To clarify, the above quotation was taken out of context.  I was only
>> talking about one particular example, not making a general statement.
>>
>> >> Fortunately, Guile provides all of the interfaces you need to do
>> > this
>> >> job from Scheme: 'set-source-properties!', 'port-filename',
>> > 'port-line'
>> >> and 'port-column'.  This will have to be implemented in the sweet
>> >> expression reader.
>> >
>> > So, is there any standard for Guile what error messages should I
>> > provide?
>>
>> Yes, the format of error messages should be:
>>
>>  <FILENAME>:<LINE>:<COLUMN>: <MESSAGE>
>>
>> You must take into account the fact the the filename might be #f, in
>> which case you should print "#<unknown port>" instead.  Also, the
>> printed line number should be 1+ the line number returned by
>> 'port-line', and _maybe_ the same should be done with the column number,
>> I'm not sure.  Internally, the first line is line 0, but for most people
>> expect that to be printed as 1.
>>
>> See 'scm_i_input_error' in read.c or 'syntax-error-printer' in
>> boot-9.scm for examples.
>>
>> > And how about the format should I throw with them?
>> > What about this:
>> > ------------------------------cut--------------------------------------
>> > (error "invalid syntax!" port-filename port-line port-column)
>> > ------------------------------end--------------------------------------
>>
>> 'port-filename', 'port-line', and 'port-column' are procedures that must
>> be applied to a port.  See the manual for details.
>>
>> However, these remarks concern only error messages generated by your
>> sweet expression reader itself.  Your other responsibility is to add
>> source properties to every datum that you read, so that if an error is
>> detected later in compilation, the resulting error message will include
>> the filename, line number, and column number.
>>
>> If you are able to use Guile's internal 'read' procedure, then you may
>> rely on it to apply the source properties for anything that it reads.
>> However, you will still need to use 'set-source-properties!' on anything
>> that isn't taken care of by the internal 'read', such as lists that are
>> written in a non-standard way.
>>
>>   Regards,
>>     Mark
>>
>
>

Reply via email to