Sorry I don't have anything elegant for you. You'll have to factor out and duplicate the error action.

On 11-02-10 05:58 PM, Matthieu Tourne wrote:
Hi,

I'm trying to write a simple html lexer with ragel.
I have something looking like this, to match and take an action on the
attribute 'src=' potentially found in several tag attributes :

   tag_content = (
         ('src='i  ((('\'' string_sgl_exp) | '"' string_dbl_exp)
 >src_attr_start
                       @src_attr_end))

         | any
     )** <>lerr{  };

     tag_exp = tag_content :>> '>';

My problem is if I create an attribute <img srt="..."> (srt is not a
proper attribute, but it does generate a parse error).
What I'd like to do would be <>lerr{ fhold; fgoto tag_content; }, which
would work if tag_content was an entry point.
But I use tag_exp in several places where an entry point wouldn't work,
for instance :

img_tag := tag_exp [...] @end_img_action;
script_tag := tag_exp [...] @end_script_tag_action;

I've considered creating a ragel scanner, but I don't really care for
backtracking, I'd just like to be able to hide the error. This would
work exactly the way I want to, by doing a fgoto tag_content. It would
basically restart the parse on t='...' and have it would fall under the
"any" category.

Is there an elegant way to do this, or to just hide the error ?

Thank you,

Matthieu.



_______________________________________________
ragel-users mailing list
[email protected]
http://www.complang.org/mailman/listinfo/ragel-users

_______________________________________________
ragel-users mailing list
[email protected]
http://www.complang.org/mailman/listinfo/ragel-users

Reply via email to