In [35]:
var acorn = require('acorn')
var escodegen = require('escodegen')
var babel = require('babel')
acorn.plugins.matlab = function(instance){
    instance.extend("parseExpressionStatement", function(inner){
        return function(node, expr){
              node.expression = expr
              if(!this.eat(acorn.tokTypes.semi)){
                  if(this.canInsertSemicolon()){
                      var cLog = this.startNode()
                      cLog.name = "LOG"
                      var Ludacris = this.startNode()
                      Ludacris.arguments = [expr]
                      Ludacris.callee = this.finishNode(cLog, "Identifier")
                      node.expression = this.finishNode(Ludacris, "CallExpression")
                      
                  }else{
                      this.unexpected()
                  }
              }
              return this.finishNode(node, "ExpressionStatement")
        }
    })
}
var comments = [], tokens = [];
var source = `
var n = 500, k = 1;
for(var i = 0; i < 100; i++){
	k = k / 2 * (3 - n * k * k)
	2 + 2;
	4 + 4;
    blah(42)
    merp(32);
}
`
var ast = acorn.parse(source, {
    plugins: {
        matlab: true
    },
   ranges: true,
    // collect comments in Esprima's format
    onComment: comments,
    // collect token ranges
    onToken: tokens
})
console.log(ast)
escodegen.attachComments(ast, comments, tokens);
console.log(escodegen.generate(ast, {comment: true}));


{ start: 0,
  range: [ 0, 125 ],
  body: 
   [ { start: 1,
       range: [Object],
       declarations: [Object],
       kind: 'var',
       type: 'VariableDeclaration',
       end: 20 },
     { start: 21,
       range: [Object],
       init: [Object],
       test: [Object],
       update: [Object],
       body: [Object],
       type: 'ForStatement',
       end: 124 } ],
  type: 'Program',
  end: 125 }
var n = 500, k = 1;
for (var i = 0; i < 100; i++) {
    LOG(k = k / 2 * (3 - n * k * k));
    2 + 2;
    4 + 4;
    LOG(blah(42));
    merp(32);
}
Out[35]:
undefined

In [2]:
module.paths.push('/Users/kevin/Projects/gayfish/experiment/node_modules')


Out[2]:
7

In [42]:
console.log(babel.transform.fromAst(ast, source, {}).code)


"use strict";

var n = 500,
    k = 1;for (var i = 0; i < 100; i++) {
	LOG(k = k / 2 * (3 - n * k * k));2 + 2;4 + 4;LOG(blah(42));merp(32);
}
Out[42]:
undefined

In [41]:
console.log(babel.transform. fromAst (ast).code)


"use strict";

var n = 500,
    k = 1;for (var i = 0; i < 100; i++) {
  LOG(k = k / 2 * (3 - n * k * k));2 + 2;4 + 4;LOG(blah(42));merp(32);
}
Out[41]:
undefined

In [44]:
babel.transform.pipeline.transformFromAst


Out[44]:
[Function: transformFromAst]

In [34]:
var babelParse = require('babel-core/lib/babel/helpers/parse.js')
babelParse


Out[34]:
[Function]

In [ ]: