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?