Nightly Perpetrated Mischief

    transpiler

    1.2.0 • Public • Published

    Transpiler

    Build Status

    AST-based transpiler wrapper.

    Usage

    var myTranspiler = require('transpiler').create(<spec>);
     
    var myResult = myTranspiler.transpile(<AST>, <DATA|null>, [<OPTIONS>]);

    Here's a transpiler for a very simple AST spec that represents expressions:

    var transpilerSpec = {
        nodes: {
            'EXPR': function (node, transpile) {
                return transpile(node.left) + ' ' + node.operator + ' ' + transpile(node.right);
            },
            'OPERAND': function (node) {
                return node.value;
            }
        }
    };

    We can create a transpiler that uses this spec like so:

    var expressionTranspiler = require('transpiler').create(transpilerSpec);

    Now we're ready to perform a transpile. Let's start with a simple example, here's my AST:

    var myAST = {
        name: 'EXPR',
        left: {
            name: 'OPERAND',
            value: 21
        },
        operator: '+',
        right: {
            name: 'OPERAND',
            value: 27
        }
    };

    And let's transpile:

    console.log(expressionTranspiler.transpile(myAST)); // Logs '21 + 27'

    Overrides

    It's possible to override or customise the way certain nodes are transpiled. As an example, let's change it so that operands with the value 27 are wrapped in yes(...). Here's my AST again:

    var myAST = {
        name: 'EXPR',
        left: {
            name: 'OPERAND',
            value: 21
        },
        operator: '+',
        right: {
            name: 'OPERAND',
            value: 27
        }
    };

    Now let's transpile, but this time we'll specify a custom way to transpile OPERAND nodes:

    console.log(expressionTranspiler.transpile(myAST, null, {
        nodes: {
            'OPERAND': function (node, transpile, context, original) {
                if (node.value === 27) {
                    return 'yes(' + original(node) + ')';
                }
     
                return original(node);
            }
        }
    })); // Logs '21 + yes(27)'

    Keeping up to date

    Keywords

    Install

    npm i transpiler

    DownloadsWeekly Downloads

    31

    Version

    1.2.0

    License

    MIT

    Last publish

    Collaborators

    • avatar