[ragel-users] short strings, including some which are 1-letter prefixes of other

Adrian Thurston thurston at complang.org
Wed Dec 23 04:11:57 UTC 2009


Hi Andrew,

Hmmm, that's an idea. Leaving actions executed on error ... I'm going to 
have to mull over that. Might be the right thing to do.

How is the aliphatic_organic used?

You may be able to do the following:

something = (
	aliphatic_organic @1 |
	any @0 @{raise error}
)**

Andrew Dalke wrote:
> Hi all,
> 
> I'm updating a parser I wrote a couple of years ago, which parses a molecular format called SMILES. Molecules contain atoms and bonds. The atoms include the element name as an abbreviation.
> 
> Consider C and Cl as two such abbreviations. One is a prefix of the other. I had
> 
>   is_raw_atom = (
>       #
>       'B' % raw_atom_B_5_action |
>       'C' % raw_atom_C_6_action |
>       'Cl' % raw_atom_Cl_17_action |
>         ...
> 
> and that worked for what I was doing before, but now I'm trying to get error handling to work. Suppose someone does "CQ". I want raw_atom_C_6_action to occur and then an error.
> 
> Ragel doesn't do that. It reports the error at the 'C', because it never transitions out from the end state.
> 
> What I did in my current update (in addition to changing the action names) is this:
> 
> aliphatic_organic = (
>   'B'  %is_aliphatic_B  %err(is_aliphatic_B)  |
>   'C'  %is_aliphatic_C  %err(is_aliphatic_C)  |
>   'N'  >is_aliphatic_N |
>      ...
>   'Cl' %is_aliphatic_Cl %err(is_aliphatic_Cl) |
>   'Br' @is_aliphatic_Br |
>       ...
> );
> 
> 
> It works, but is it correct and proper? I did see there was the |* ... *| construct designed for things like this, but I didn't want the backtracking.
> 
> Best regards,
> 
> 
> 				Andrew
> 				dalke at dalkescientific.com
> 
> 
> 
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users




More information about the ragel-users mailing list