Andrei's list of barriers to D adoption
Chris via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jun 10 08:29:01 PDT 2016
On Friday, 10 June 2016 at 14:25:37 UTC, Adam D. Ruppe wrote:
> On Friday, 10 June 2016 at 13:55:28 UTC, Chris wrote:
>> I have neither time nor the required expertise to write a
>> scripting language from scratch ;) You on the other hand ...
>> :-)
>
> Oh, it isn't that hard, at least to do a quick basic thing. You
> might want to start with the various math parsers. A postfix
> one is relatively easy:
>
> 2 3 +
>
> break it up into tokens, read them in, build a syntax tree
> (well, for the postfix thing, it is probably a stack!).
>
> That approach will even work for a Lisp-like language!
>
> Then try an infix one. You'd use the same tokenizer, but the
> parser is different... and this kind of parser gets you started
> for a typical script language.
>
> 2 + 3
>
> The way this works is you read the token, peek ahead, create an
> object and build a tree. You'd use different functions for
> different contexts. So it might start with readExpression which
> readFactor. Then readFactor might call readAddend...
>
> If you look at the D grammar:
> http://dlang.org/spec/grammar.html you'll find the various
> terms are defined as WhateverExpressions and often
> recursively...
>
> you can write the parser to follow that basically the same way!
> You end up with one of these:
> https://en.wikipedia.org/wiki/Recursive_descent_parser
>
> Once you get addition and multiplication working with correct
> order of operations, you just kinda start adding stuff! Make a
> function call and an if/loop statement and boom, you have a
> simple programming language.
>
> After that, it is basically just adding more token recognition
> and AST classes.
>
>
>
> To make an interpreter, you can just add a method to the AST
> objects that interprets and gives a result.... boom, it works!
> Compiling is basically the same idea, just spitting out
> something other than the result of the expression - spitting
> out code that gives you the result. That gets harder to get
> into all the fancy techniques, but it builds on the same
> foundation.
>
>
>
> It is a good thing to know how to do, at least the basic parts!
I agree. It's good to know how to do it. But don't get me
started, else I'll have a new obsession ... ;)
But seriously, would you like to work on something like DScript.
Your scripting language already fulfills things that were on my
wishlist (easy D interop).
More information about the Digitalmars-d
mailing list