Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Guidance on writing a source to source compiler (transpiler)
11 points by techn00 6 months ago | hide | past | favorite | 7 comments
I would like to learn to write a transpiler from scratch. Where would I get started?

Preferably something that doesn't involve going though big projects to read the source code.

If the languages are similar:

  1. Tokenize
  2. Build AST tree
  3. Emit target code from the AST tree
If they are very different:

  1. Tokenize
  2. Build AST tree
  3. Create a simple intermediate language from the AST tree
  4. Emit target code from the intermediate language
It is the same as building a whole compiler, but without the optimization/register allocator passes.

You could start here:


That converts from lisp-like to javascript. Really though this is a big field, and there are lots of resources out there.

To get started look at your input language; you'll need to lex and parse that. Then massage the parsed structure into the appropriate output.

You can see me convert brainfuck to C, or x86 assembly language here:


If you don't mind a video, Destroy All Software has a nice screencast on the topic:


Really easy to understand, even if Ruby is not your main language. The video is about compiling from a tiny Ruby-like language[1] into real JavaScript.

[1]: It's only a single, simple function, but the concepts are well explained and it should be easy to build on top of that.

A good option would be to take a MooC on compilers https://www.edx.org/course/compilers

Doesn't matter much if the output is also a source, you can't avoid lexing and parsing, so the best thing to get started seems to be... the Dragon Book, right?

In practice, using common programming languages as source should offer the important shortcut of adopting existing good, ready-made parsers and AST manipulation libraries because other compilers, linting tools etc. already developed them.

Applications are open for YC Winter 2024

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact