dnascript
v0.3.3
Published
A tiny tool for templated code generation with JavaScript as the meta language.
Downloads
319
Maintainers
Readme
dnascript
A tiny tool for templated code generation with JavaScript as the meta language.
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