[CLN-list] Integer parser

Thomas Luthe tluthe at physik.uni-bielefeld.de
Mon May 1 23:40:40 CEST 2017


Hi,

thanks for your reply. The manual only states that the string must
contain exactly one number if end_of_parse is null, which it is not in
my example. In the non-null case read_integer itself checks the end of
the integer input and stores the position of the character after the
integer in *end_of_parse. This works as expected for any non-integer
characters like +,*,-,... with / being the only exception. If I parse
e.g. "1*2" I get a return value of 1 and *end_of_parse contains a
pointer to the "*". I can of course as you say parse the string for the
end of the integer in advance, but since read_integer already performs
this task, it seems like an unnecessary overhead.

Cheers,
Thomas Luthe

On 01/05/17 22:21, Richard B. Kreckel wrote:
> Hi,
>
> On 04/27/2017 02:56 PM, Thomas Luthe wrote:
>> I am writing my own parser for expressions and want to use cln for
>> parsing integers within these expressions, specifically using
>>
>> read_integer (const cl_read_flags& flags, const char * string, const
>> char * string_limit, const char * * end_of_parse) .
>>
>> Unfortunately this fails with a cln::read_number_bad_syntax_exception if
>> the integer immediately precedes a "/" (example attached). I have traced
>> the cause back to line 119 in cl_I_read.cc. My suspicion is that the
>> check for "/" originates from the rational case (as the file states that
>> the code is a condensed version of read_rational()) and could simply be
>> removed, but I am not familiar enough with the code to be certain this
>> would not break other use cases.
>>
>> Even though I can work around this by to determining the end of the
>> integer before the call and setting string_limit accordingly, I would
>> appreciate a fix for this issue.
> You're attempting to read string "1/2" into an cl_I, but you don't tell
> the read_integer function where the integer ends. In this case, the "the
> string in memory must contain exactly one number and nothing more, else
> an exception will be thrown" (quoted from section 5.2 of the manual).
>
> You really should do some basic string parsing before passing strings to
> the CLN input function.
>
> All my best,
>   -richy.




More information about the CLN-list mailing list