Reducing Pegged ASTs
    Etienne Cimon via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Tue Nov 25 15:59:45 PST 2014
    
    
  
On 2014-11-25 10:12, "Nordlöw" wrote:
> Is there a way to (on the fly) reduce Pegged parse results such as
I've made an asn.1 parser using pegged tree map, it's not so complex and 
does the reducing as well.
https://github.com/globecsys/asn1.d
Most of the meat is in asn1/generator/
In short, it's much easier when you put all the info in the same object, 
in this case it's an AEntity: 
https://github.com/globecsys/asn1.d/blob/master/asn1/generator/asntree.d#L239
When the whole tree is done that way, you can easily traverse it and 
move nodes like a linked list.. I've made a helper function here:
https://github.com/globecsys/asn1.d/blob/master/asn1/generator/asntree.d#L10
You can see it being used here:
https://github.com/globecsys/asn1.d/blob/38bd1907498cf69a08604a96394892416f7aa3bd/asn1/generator/asntree.d#L109
and then here:
https://github.com/globecsys/asn1.d/blob/master/asn1/generator/generator.d#L500
Also, the garbage collector really makes it easy to optimize memory 
usage, ie. when you use a node in multiple places and need to re-order 
the tree elements.
I still have a bunch of work to do, and I intend on replacing botan's 
ASN1 functionalities with this and a DER serialization module.
Beware, the pegged structure isn't insanely fast to parse because of the 
recursion limits I implemented very inefficiently because I was too lazy 
to translate the standard asn.1 BNF into PEG.. Also, the bigger 
bottleneck would be error strings.
For a 1-2 months of work (incl. learning ASN.1), I'm very satisfied with 
the technology involved and would recommend intermediate structures with 
traversal helpers.
    
    
More information about the Digitalmars-d-learn
mailing list