【发布时间】:2015-12-05 21:24:54
【问题描述】:
macros 包中有可用的解析器,例如 parseExpr 和 parseStmt,但它们是 {.compileTime.} procs。
有什么方法可以在运行时解析一串 Nim 代码,生成可以分析的 AST?
【问题讨论】:
标签: nim-lang
macros 包中有可用的解析器,例如 parseExpr 和 parseStmt,但它们是 {.compileTime.} procs。
有什么方法可以在运行时解析一串 Nim 代码,生成可以分析的 AST?
【问题讨论】:
标签: nim-lang
是的。确保您安装了新的编译器模块:
nimble install compiler@0.11.3
然后你的代码:
# 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
【讨论】: