Parsing D Maybe Not Such a Good Idea <_<;

cy via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 16 10:20:39 PDT 2016


On Wednesday, 15 June 2016 at 07:16:31 UTC, Basile B. wrote:

> You're right it's not so simple and you're also right about 
> "everything", my "everything" is not used adequatly...

Sorry, I don't mean to complain. Actually the work has already 
all been done, rather elegantly in fact. If libdparse can get 
through a significant subset of D2 code, I have to say I'm pretty 
impressed with the project, and can't praise it enough.

https://github.com/Hackerpilot/libdparse // disclaimer: this link 
not endorsed by the hackerpilot org ltd

It already has a D formatter in it, which dumps (prettified!) D 
code to any sort of output range, and there's a case in it for 
every single kind of node in the AST.

(speaking of which, when are we getting static switch statements?)

What I meant by "D is not simple" isn't that I'm up a creek, 
without a paddle, but that the paddle is really complex, and I'd 
have no hope of tackling it if it wasn't already done. The 
complexity of D's syntax is not so much a problem here, as a 
spectacle.

> It depends on the grammatical construct you want to parse. But 
> it's already much more simple when the comments are removed 
> from the lexical token list.

I suppose. What's complicated is the shoving of expressions 
everywhere, since those spider out to all possible forms of 
construct. That means the difficulty of parsing does NOT depend 
on the grammatical construct you want to parse, except for a few, 
very minor constructs, only the ones that don't even 
*potentially* include expressions in their grammar.

So, regardless of what you're doing, you pretty much have to 
handle every single kind of construct, but if "handle" means 
"transform, then output" and you can separate those two steps, 
then if someone does all the output for you, the "transform" step 
can be very simple and specific. Not because you can remove the 
comment nodes, but because you can ignore ALL nodes that you're 
not interested in transforming.


More information about the Digitalmars-d mailing list