I'm really confused now. What is Document, and what does #add_foo do? Also
what do you mean by "don't mix your code into the transformer"? Please
elaborate on this.

My approach is to produce a rough parse tree, then normalize this into the
parse tree I really want, then transform the normalized parse tree into the
syntax tree. As I'm going along, I'm finding things to tweak in one or both
parse trees, but this seems to be working really well for me. The primary
reason for the normalization step is because I couldn't parse method chains
and operators (like in ruby) the way I wanted to, and Nigel Thorne
suggested I take a more layered approach.


On Wed, Apr 10, 2013 at 2:42 AM, Kaspar Schiess <[email protected]> wrote:

> > On another note it looks like the rule blocks are being class eval'd, so
> > my `origin` instance method isn't even in scope. I'm passing it in when
> > I call #apply, but is there a better way?
>
> Class eval it is. But really, don't mix your code into the transformer,
> rather create a document that you pass around. Concerns like to be kept
> well apart.
>
> Here's how that might look like:
>
>         doc = Document.new
>         transform.apply(int_tree, document: doc)
>
> and in your rules:
>
>         rule(:foo => simple(:foo)) { document.add_foo(foo) }
>         rule(:foo => simple(:foo)) { |dict|
>           dict[:document].add_foo(dict[:foo]) }
>
> I realize that there is next to no documentation for this, but I
> consider it an official feature! And hey, the mailing list is a start,
> perhaps someone wants to contribute documentation for a change?
>
> real nice greetings
> kaspar
>
>
>
>


-- 
Thomas Ingram

Reply via email to