[ragel-users] Parsing a template language

Tobias Lütke tobi at leetsoft.com
Tue Jul 27 01:15:47 UTC 2010


I've been working on a parser for simple template language. I'm using Ragel.

The requirements are modest. I'm trying to find [[tags]] that can be
embedded anywhere in the input string.

I'm trying to parse a simple template language, something that can
have tags such as {{foo}} embedded within HTML. I tried several
approaches to parse this but had to resort to using a Ragel scanner
and use the inefficient approach of only matching a single character
as a "catch all". I feel this is the wrong way to go about this. I'm
essentially abusing the longest-match bias of the scanner to implement
my default rule ( it can only be 1 char long, so it should always be
the last resort ).

%%{

 machine parser;

 action start      { tokstart = p; }
 action on_tag      { results << [:tag, data[tokstart..p]] }
 action on_static  { results << [:static, data[p..p]] }

 tag  = ('[[' lower+ ']]') >start @on_tag;

 main := |*
   tag;
   any      => on_static;
 *|;

}%%

( actions written in ruby, but should be easy to understand ).

How would you go about writing a parser for such a simple language? Is
Ragel maybe not the right tool? It seems you have to fight Ragel tooth
and nails if the syntax is unpredictable such as this.


Regards
-- tobi

_______________________________________________
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