[ragel-users] Parsing a template language

Magnus Holm judofyr at gmail.com
Tue Jul 27 07:42:22 UTC 2010


(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 <tobi at leetsoft.com> 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
> 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