If you're on node/npm:
$ npm i -s nanometa
require('nanometa') as usual.
If you're on Deno or the browser, you can use one of the following CDN-based ES module import statements:
On the browser, don't forget to use the
type="module" script tag attribute to enable ES module support:
With just a little help from nanometa, the above code can easily be used to generate an AST-like array that can later be analyzed, transformed, interpreted, and/or used to generate C code:
;let c =;let file = c;console;
The code above will produce roughly the following JSON output:
'hello.c''include' '<stdio.h>''func' 'main''returns' 'int''call' 'printf' 'Hello, world!\n''return' 0
What's going on here is that
['whatever', ...xs], and
fn with a proxied version of
c (let's call it
d) which captures the return values of all
d.whatever(...) function calls inside of it and returns an array of those, so it can be used to implement natural-looking nested code blocks.
What to do with the resulting AST-like array is completely up to you.
nanometa is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Exclusion of warranty
nanometa is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
A copy of AGPLv3 can be found in COPYING.