The user/caller decides what it expects from the input and how to deal with 
exceptions.

For example, here is how to read multiple expression until EOF

Array streamContents: [ :out |
  [ reader atEnd ] whileFalse: [ out nextPut: reader next ] ]

I think the current design is the both simple and flexible.

> On 05 Jul 2015, at 15:47, Peter Uhnák <i.uh...@gmail.com> wrote:
> 
> Ok but how does the parser knows whether the input is multiexpression or an 
> error?
> I mean it stops parsing in the middle of the string which seems really weird 
> to me.
> 
> Peter
> 
> On Sun, Jul 5, 2015 at 3:28 PM, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> Hi Peter,
> 
> > On 05 Jul 2015, at 14:36, Peter Uhnák <i.uh...@gmail.com> wrote:
> >
> > How come this passes?
> >
> > STON fromString: '{
> >       "a": "b"
> > }wtf",
> >       "x": "y"
> > '.
> >
> > The result is dictionary "a" -> "b".
> >
> > I would expect for it to die on parse error.
> >
> > Peter
> 
> The reason this does not fail is because (1) STON is a stream parser that 
> accepts possibly multiple top-level expression from one stream (2) your input 
> is basically valid and complete until the closing curly brace.
> 
> You could enforce the fact that the whole input should be consumed yourself.
> 
> | input reader result |
> input := '{
>         "a": "b"
> }wtf",
>         "x": "y"
> ' readStream.
> reader := STON reader on: input.
> result := reader next.
> reader consumeWhitespace.
> self assert: reader atEnd.
> result
> 
> Sven
> 
> 
> 


Reply via email to