2015-09-09 61 views
5

macros包中有解析器,如parseExprparseStmt,但它们是{.compileTime.} procs。Nim代码解析器

有没有什么办法在运行时解析一串Nim代码,产生一个可以分析的AST?

回答

6

是的。请确保您已经安装了新的编译器模块:

nimble install [email protected] 

那么你的代码:

# File: myfile.nim 
import compiler.modules, compiler.ast, compiler.astalgo, 
    compiler.passes, compiler.llstream 

proc dummyOpen(s: PSym): PPassContext = discard 
proc logASTNode(context: PPassContext, n: PNode): PNode = 
    result = n 
    debug(n) 

proc displayAST*(program: string) = 
    var m = makeStdinModule() 
    incl(m.flags, sfMainModule) 
    registerPass(makePass(open = dummyOpen, process = logASTNode)) 
    processModule(m, llStreamOpen(program), nil) 

displayAST(""" 
proc hi() = 
    echo "hi" 
""") 

编译是有点棘手。您必须指出docutils驻留在nim lib目录中的哪个位置。

nim c -r --NimblePath:PATH_TO_NIM_LIB/packages/docutils ~/myfile.nim 
+0

工程!谢谢! –