Nim 代码解析器

问题描述 投票:0回答:2

macros
包中提供了解析器,例如
parseExpr
parseStmt
,但它们是
{.compileTime.}
过程。

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

nim-lang
2个回答
9
投票

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

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
投票

检查这个,但它调用编译器二进制文件: https://pypi.org/project/nimastpaser/

© www.soinside.com 2019 - 2024. All rights reserved.