0.3.3 • Published 3 years ago

dnascript v0.3.3

Weekly downloads
70
License
MIT
Repository
github
Last release
3 years ago

dnascript

A tiny tool for templated code generation with JavaScript as the meta language.

"We need to go deeper"

Heavily inspired by ribosome

Main Concepts

  • Meta Language: the language which will do the code generation (here: JavaScript)
  • Target Language: the language of which code will be generated
  • DNA File:
    • mostly looks like the target language
    • contains meta code in target-style comments
    • contains template variables that will be interpolated during generation
  • RNA File
    • written in the meta language (here: Javascript)
    • contains target code in ES6 template-literal strings
    • produces the final generated target code when executed

Example

Generating C code

DNA File: greeter.dna.c

//_ DNA __insertHere__
//_ let n = 6;
//_ let OUT = '';
#include <stdio.h>

int main() {
//_ for (var i = 0; i < n; i++) {
    int greeter__i__Message = __i__;
//_ }
//_ 
//_ for (var i = 0; i < n; i++) {
    printf("%d\n", greeter__i__Message);
//_ }
}
//_ console.log(OUT);
  • notice how this file actually looks like valid C
  • you get syntax highlighing, maybe even autocompletion in your editor

RNA File: greeter.rna.c.js

// RNA ["//_","__","__",""]
let n = 6;
let OUT = '';
OUT += `#include <stdio.h>\n`;
OUT += `\n`;
OUT += `int main() {\n`;
for (var i = 0; i < n; i++) {
    OUT += `    int greeter${i}Message = ${i};\n`;
}

for (var i = 0; i < n; i++) {
    OUT += `    printf("%d\\n", greeter${i}Message);\n`;
}
OUT += `}\n`;
console.log(OUT);
  • notice how this is valid and executable JavaScript

  • Get this RNA file by running the transcriber: node bin/transcribe.js examples

Output: greeter.c

#include <stdio.h>

int main() {
    int greeter0Message = 0;
    int greeter1Message = 1;
    int greeter2Message = 2;
    int greeter3Message = 3;
    int greeter4Message = 4;
    int greeter5Message = 5;
    printf("%d\n", greeter0Message);
    printf("%d\n", greeter1Message);
    printf("%d\n", greeter2Message);
    printf("%d\n", greeter3Message);
    printf("%d\n", greeter4Message);
    printf("%d\n", greeter5Message);
}
  • Execute the RNA file to get this final C code node examples/greeter.rna.c.js > examples/greeter.c
0.3.3

3 years ago

0.3.5

4 years ago

0.3.4

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.0

5 years ago

0.2.14

6 years ago

0.2.13

6 years ago

0.2.12

6 years ago

0.2.11

8 years ago

0.2.10

8 years ago

0.2.9

8 years ago

0.2.8

8 years ago

0.2.7

8 years ago

0.2.6

8 years ago

0.2.5

8 years ago

0.2.4

8 years ago

0.2.3

8 years ago

0.2.2

8 years ago

0.2.1

8 years ago

0.2.0

8 years ago

0.1.0

8 years ago