Taking JavaScript for example, code can be parsed into AST by esprima module, code can be generated from AST by escodegen module. In Julia I got the parsing part now, how about the code generation part?
On Sun, Jun 21, 2015 at 8:08 PM David Gold <[email protected]> wrote: > Not sure if this is what you're looking for, but if you have a generic > function, you can (kind of) pluck out the body of the specified method as > follows: > > julia> f(x::Int) = x+5 > f (generic function with 1 method) > > julia> e = code_typed(f, (Int,)) > 1-element Array{Any,1}: > :($(Expr(:lambda, Any[:x], Any[Any[Any[:x,Int64,0]],Any[],Any[],Any[]], > :(begin # none, line 1: > return (top(box))(Int64,(top(add_int))(x::Int64,5)) > end::Int64)))) > > julia> dump(e) > Array(Any,(1,)) > 1: Expr > head: Symbol lambda > args: Array(Any,(3,)) > 1: Array(Any,(1,)) > 1: Symbol x > 2: Array(Any,(4,)) > 1: Array(Any,(1,)) > 1: Array(Any,(3,)) > 2: Array(Any,(0,)) > 3: Array(Any,(0,)) > 4: Array(Any,(0,)) > 3: Expr > head: Symbol body > args: Array(Any,(2,)) > 1: Expr > 2: Expr > typ: Int64 > typ: Any > > julia> f_body = e[1].args[3] > :(begin # none, line 1: > return (top(box))(Int64,(top(add_int))(x::Int64,5)) > end::Int64) > > > f_body can then be inspected, though clearly it contains more than what it > started with. It will act as the body of a function when eval'd, though I'm > sure this is *not* the best way to achieve such a result: > > julia> x = 5 > 5 > > julia> eval(f_body) > 10 > > > See http://docs.julialang.org/en/latest/manual/metaprogramming/. > > Note also the above doesn't work on anonymous functions. Actually, if > somebody *does* know how to inspect code from an anonymous function > without going so deep as the `code` field, I would really love to hear it. > > On Sunday, June 21, 2015 at 1:31:22 AM UTC-4, Jiyin Yiyong wrote: >> >> As described in http://blog.leahhanson.us/julia-introspects.html Julia >> parses code to AST. >> But is there function provided to generate code back? >> >> I checked on Google and the docs, but found nothing so far. >> http://docs.julialang.org/en/release-0.3/stdlib/base/ >> >>
