nim-lang - Nim 代码解析器

标签 nim-lang

macros 中有可用的解析器包,如 parseExprparseStmt但他们是{.compileTime.}过程。

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

最佳答案

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

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

关于nim-lang - Nim 代码解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487507/

相关文章:

gzip - 如何在 Nim 中打开并读取 .gz 文件(最好逐行)

parameter-passing - 在 Nim 中定义多种类型的参数

templates - 模板表达式的默认参数

templates - 模板和宏中的类型化 vs 非类型化 vs expr vs stmt

dry - 在编译时运行 Nim 代码

nim-lang - 如何为在 Nim 中编译失败的代码编写单元测试?

c - Nim 交叉编译到 C

c++ - 将 Nim Anon 函数导出到 C++

nim-lang - 为什么会出现警告不要使用 system.cmp[string] 进行 Nim 字符串比较

arrays - 在 Nim 中定义空数组时出现问题