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}));
Out[35]:
In [2]:
module.paths.push('/Users/kevin/Projects/gayfish/experiment/node_modules')
Out[2]:
In [42]:
console.log(babel.transform.fromAst(ast, source, {}).code)
Out[42]:
In [41]:
console.log(babel.transform. fromAst (ast).code)
Out[41]:
In [44]:
babel.transform.pipeline.transformFromAst
Out[44]:
In [34]:
var babelParse = require('babel-core/lib/babel/helpers/parse.js')
babelParse
Out[34]:
In [ ]: