[ragel-users] Re: Help with extracting a list of numbers

Manoj Rajagopalan ma... at nanorex.com
Wed Mar 26 03:47:27 UTC 2008


OK I get it now. since the terminal NULL character is part of my 
pattern, pe's got to be past that. In the usual examples, the terminal 
NULL is not part of the pattern and hence pe is set to it.

It works now, thanks.

-- Manoj


Adrian Thurston wrote:
> The pe variable should be set to one past the last character. Hope that
> clears things up.
> 
> Cheers,
>  Adrian
> 
> Manoj Rajagopalan wrote:
>> Hi Adrian
>>
>>     The detection works only when I enter a space at the end. And yes, 
>> the terminating 0 is being sent. Hope this isn't a bug. Maybe I'm 
>> missing something really simple.
>>
>>     I'm using Ragel 6.0 on Fedora 8.
>>
>>     BTW, I'm attaching a small C++ program if anyone would like to run it.
>>
>>     In the program, it prints out the ending character (*pe) and 
>> confirms that it is '\0'. Should 'pe' point to the last char or to one 
>> past it, i.e., is the character range [p,pe] or [p, pe) ?
>>
>>     In one place in the manual I see p+strlen(buf) (fig 5.1, pg 36) 
>> whereas in another I see p+strlen(buf)+1 (pg 6)
>>
>>
>> -- Manoj
>>
>>
>> Adrian Thurston wrote:
>>> Hi Manoj,
>>>
>>> Are you sure the null is being sent to the parser? If it is then
>>> printNumber should be executed on the last character.
>>>
>>> Adrian
>>>
>>> Manoj Rajagopalan wrote:
>>>> Hi all,
>>>>
>>>>    I'm trying to write a pattern to extract a list of numbers following 
>>>> the keyword bond and I'm not able to figure out why my pattern below 
>>>> always skips the last number
>>>>
>>>>    My input is of the form:
>>>>
>>>>    bond <number> <number> ...
>>>>
>>>> %%{
>>>>      machine bond_parser;
>>>>
>>>>      whole_number = digit+    >to{intVal=0;}   ${intVal = intVal*10 + 
>>>> (fc-'0');}    ;
>>>>
>>>>      main :=
>>>>          space* 'bond'
>>>>          (space+ whole_number %printNumber)+
>>>>          space* 0;
>>>> }%%
>>>>
>>>> where printNumber is an action to print the number just updated into the 
>>>> integer variable intVal.
>>>>
>>>> The 0 at the end of the pattern is the NULL character that cin.getline() 
>>>> adds when reading upto the newline character from the console.
>>>>
>>>> I realize this may be due to the leaving action for the last number that 
>>>> never gets called but could someone tell me a way around this?
>>>>
>>>> Thanks,
>>>> Manoj
>>>>
> 
> > 



More information about the ragel-users mailing list