On Wednesday, 26 November 2014 at 06:09:12 UTC, Philippe Sigaud via Digitalmars-d-learn wrote:
IIRC there is a free function in Pegged that does it.

What's the name of this function?

I did not automate it, because every time I cut down severely a parse
tree, I later regret it because I lost information that way.

Cutting while still retaining original info (who is this node's
ancestor) is more difficult: you would have to store it somewhere anyhow. You cannot create node classes to represent the hierarchy, because of loops in the grammar: an Identifier can have many different
ancestors.

Note also that Pegged produces parse trees (complete parsing
information), not ASTs. ASTs would indeed be much smaller, but we
would have to define what are the master nodes in the D grammar.

What do you mean with master nodes?

If you want to remember the intermediate nodes you cut down, not
really, since you still need to store them somehow.

I don't quite understand your formulation in English here. Could you elaborate?

I think what's consuming memory right now is that I duplicate the matched strings at each level

What do you mean with duplicate? Doesn't Pegged use string slices that reference the original source?

If this problem is related to (im)mutability and If I understand you correctly you could use something like

static if (isImmutable!Source)
    node.text = source_text[i..j];
else
    node.text = source_text[i..j].idup;

right? Where in Pegged could this logic be injected?

Reply via email to