I just covered this with a test and fixed the csv method.

On Sun, Mar 24, 2013 at 8:21 PM, Nigel Thorne <[email protected]> wrote:

>
>  def csv(value)
>
>       (value >> (whitespaces? >> comma >> whitespaces? >> 
> value).repeat).repeat
>
>  end
>
>  seems odd..
>
>
>  csv(str("x")) matches "", "x" and "x ,x".. fine.. but also "xx" and "x,xx,x" 
> which seems odd.
>
>
>  ---
> "No man is an island... except Philip"
>
>
> On Mon, Mar 25, 2013 at 10:38 AM, Nigel Thorne <[email protected]>wrote:
>
>> I would change it to be
>> ((interpolation_end.absent? >> phrase.repeat*(1)*).repeat(0).as(
>> :interpolation))
>>
>> Inside the repeat(0) you have something that has to consume something.
>> However.. the repeat(0) lets the inside be optional.
>>
>>
>> ---
>> "No man is an island... except Philip"
>>
>>
>> On Mon, Mar 25, 2013 at 10:16 AM, Thomas Ingram 
>> <[email protected]>wrote:
>>
>>> Thanks for the feedback. I'll reply inline....
>>>
>>>
>>> On Sun, Mar 24, 2013 at 6:16 PM, Nigel Thorne <[email protected]>wrote:
>>>
>>>> Just looking at the grammar, the alarm bells for me are ...
>>>>
>>>> rule(:line_breaks) { **line_break.repeat } # SMELL: repeat default 0,
>>>> so this rules can consume nothing.... puts a '?' on the end of the name by
>>>> convention. Or change to repeat(1).
>>>>
>>> Fixed this. I'm not sure how I missed it.
>>>
>>>
>>>>
>>>>
>>>> rule(:comment) { **pound < /span>>> (line_break.absent? >> any).repeat<
>>>> span
>>>> style="line-height:16px;color:rgb(51,51,51);font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation
>>>> Mono',Courier,monospace;margin:0px;font-weight:bold;border:0px;padding:0px">.
>>>> as(:comment) >> line_break.maybe } # T he 'maybe' on line_break I
>>>> assume is to allow the file to end at this point.... change this to be
>>>> line_break | eof where eof is defined as rule(:eof) { any.absent? }
>>>>
>>> You assume correctly. I made this change.
>>>
>>>
>>>>
>>>> ((interpolation_end.absent? >> phr ase.repeat).repeat.as(:interpolation))
>>>> ## This can loop for ever. absent? and repeat don't have to consume
>>>> anything.
>>>>
>>> I adapted this rule from my string rule (see def string_parser at bottom
>>> of file). What if I do this?
>>>
>>> rule(:interpolation) { interpolation_start >> interpolation_end.absent?
>>> >> lines.as(:interpolation) >> interpolation_end }
>>>
>>> Also do I have an issue with string_parser? I seem to recall seeing the
>>> pattern in string_parser somewhere on the parslet website, and I've adapted
>>> it for comment, string, regular expression and interpolation.
>>>
>>>
>>>> ---
>>>> "No man is an island... except Philip"
>>>>
>>>
>>> --
>>> Thomas Ingram
>>>
>>
>>
>


-- 
Thomas Ingram

Reply via email to