Nim代码解析器

Lye*_*ish 5 nim-lang

有可用的解析器在macros包中,如同parseExprparseStmt但他们是{.compileTime.}特效.

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

ura*_*ran 6

是.确保安装了新的编译器模块:

nimble install compiler@0.11.3
Run Code Online (Sandbox Code Playgroud)

然后你的代码:

# 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"
""")
Run Code Online (Sandbox Code Playgroud)

编译有点棘手.你必须指出在nim lib目录中docutils所在的位置.

nim c -r --NimblePath:PATH_TO_NIM_LIB/packages/docutils ~/myfile.nim
Run Code Online (Sandbox Code Playgroud)