2015-09-09 17 views
5

parseExpr ve parseStmt gibi macros paketinde bulunan ayrıştırıcılar vardır, ancak bunlar {.compileTime.} procs'dir.Nim kod ayrıştırıcısı

Çalışma zamanında bir NIM kodu dizesini ayrıştırmanın, analiz edilebilecek bir AST'yi sağlamanın bir yolu var mı?

cevap

6

Evet. Eğer taze bir derleyici modülü yüklü olduğundan emin olun:

nimble install [email protected]0.11.3 

Sonra kodunuzu:

# 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" 
""") 

Derleme biraz zordur. Dokümanların nim lib dir'inizin içinde nerede bulunduğunu belirtmelisiniz.

nim c -r --NimblePath:PATH_TO_NIM_LIB/packages/docutils ~/myfile.nim 
+0

Teşekkür ederim! –