2015-09-09 6 views
5

macrosパッケージには、parseExprparseStmtのようなパーサーがありますが、それらは{.compileTime.}です。Nim code parser

実行時に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

Works!ありがとうございました! –