Andrei's list of barriers to D adoption

Adam D. Ruppe via Digitalmars-d digitalmars-d at puremagic.com
Fri Jun 10 07:25:37 PDT 2016


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!


More information about the Digitalmars-d mailing list