Insert <it’s not much but it’s honest work> meme. It only supports ints and bools, some logic and simple arithmetics and it compiles to Java but damn was it hard to get that far.
Can you guess what everything does?
It only supports ints and bools, some logic and simple arithmetics and it compiles to Java but damn was it hard to get that far.
I have a bachelor’s in computer science and I don’t think I would be able to do that…
Compiler courses are typically master level.
My college must have been full of sadists. They had undergrad compiler courses and required students to take them.
Same, it usually whacked about half the attempted majors into another major. In the first half of senior year. They kept wondering why their program wasn’t growing much even though similar colleges’ programs were growing like mold on a dorm shower curtain. I enjoyed the course and never used the primary skills taught in it again.
Compilers are a specialized topic - and syntax design is fiddly - but it really is no harder than any other sort of program. A lot of the hard theoretical work was done back in the sixties and seventies. You don’t have to start from scratch. These days it’s “only” a matter of implementing the features you want and making sure your syntax doesn’t leave itself open to multiple interpretations. (just as arithmetic, e.g. ‘5 × 4 - 1’ requires some rules to make sure there’s only one correct interpretation, so do language syntaxes need to be unambiguous to parse. )
Don’t get me wrong - writing a language is a lot of work and it’s super cool that OP has done this! I just want to stress that language development is 100% doable with an undergrad degree. If you understand recursion and how to parse a string you already have all the theory you need to get started.
Oh metaprogramming! I’m doing a dissertation on this.
Very cool, I’d be interested in your publications once you’re done. I like metaprogramming, but once you realise you might have needed it, you’re already knee deep in fresh legacy code.
You essential have a compiler written through metaprogramming. For your implementation, did you use a find and replace or did you define and parse a grammar like a true compiler.
MPS uses projectional editing. Which means for the user that everything you do is free from concrete syntax, and you basically edit a graphical representation of that abstract syntax tree directly, while it looks like you’re in a textual editor.
So I define abstract nodes that may have certain relationships with each other and then give them a representation in the editor (which is what you see in the screenshot). These nodes may also have generators assigned to them, which use map/reduce operations to generate whatever source code I desire. It usually includes its own bit of code, and triggers code generation of its children as well.
I hope that was somehow clear 😄