[ragel-users] Solving ambiguity

Adrian Thurston adrian.thurston at esentire.com
Tue May 25 22:06:38 UTC 2010


It's because of the fws in between hosts and the fws? inside field. You 
could lower the priority of the inner one and raise the priority of the 
outer one to resolve the ambiguity.

     wsp            = [ \t];
     fws            = ( ( wsp* crlf )? wsp+ ) ;

     opt_fws        = ( fws? )$(fws,0);
     sep_fws        = ( fws )$(fws,1);

     field          = (opt_fws alpha+ opt_fws);
     host           = (field ('.' field)*) >mark %print;
     main          := host (sep_fws host)*;

-Adrian

Husam Senussi wrote:
> Hi,
> 
> I'm trying to use ragel to write parser for RFC2822 but I found some ambiguity in the grammar  so just want to see if
> is solve it using priories.
> 
> Below is sample I found in the grammar with ambiguity
> 
> wsp           = [ \t];
> fws             = ( ( wsp* crlf )? wsp+ ) 
> field		   = (fws? alpha+ fws?);
> host		   = (field ('.' field)*) >mark %print;
> main        := host (fws host)*;
> 
> The problem I found with input like this "a.mydomain.com  b.mydomain.com" end up calling print 3 times
> 
> 1. "a.mydomain.com"
> 2. "a.mydomain.com "
> 3. "b.mydomain.com"
> 
> where I was expecting:
> 
> 2. "a.mydomain.com "
> 3. "b.mydomain.com"
> 
> 
> I'm assuming the problem is having fws? in end of field and one in main between host, so is there
> anyway  solve this without breaking the grammar.
> 
> 
> Sorry if this sounds  like basic question I just started using Ragel.
> 
> Thanks  
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users
> 

_______________________________________________
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