2015-09-09 17 views
5

Dostępne są parsery w pakiecie macros, takie jak parseExpr i parseStmt, ale są to procenty {.compileTime.}.Parser kodu Nim

Czy istnieje sposób na sparsowanie ciągu kodu Nim w czasie wykonywania, dając AST, który można przeanalizować?

Odpowiedz

6

Tak. Upewnij się, że masz zainstalowany moduł świeży kompilator:

nimble install [email protected] 

Następnie kod:

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

Kompilacja jest nieco kłopotliwe. Musisz wskazać, gdzie znajdują się docutils w twoim folderze nim lib.

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

Działa! Dziękuję Ci! –