(A little off-topic, but whatever: So Liquid will finally get a proper parser? :-))
// Magnus Holm On Tue, Jul 27, 2010 at 03:15, Tobias Lütke <[email protected]> wrote: > 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 > [email protected] > http://www.complang.org/mailman/listinfo/ragel-users > _______________________________________________ ragel-users mailing list [email protected] http://www.complang.org/mailman/listinfo/ragel-users
