Como faço para analisar uma string em tempo de compilação no Nimrod?

Passando pora segunda parte do tutorial do Nimrod Eu alcancei a parte onde as macros são explicadas. A documentação diz que eles são executados em tempo de compilação, então achei que poderia fazer algumas análises de strings para criar uma linguagem específica de domínio. No entanto, não há exemplos de como fazer isso, oexemplo de macro de depuração não exibe como alguém lida com um parâmetro de string.

Eu quero converter o código como:

instantiate("""
    height,f,132.4
    weight,f,75.0
    age,i,25
    """)

… Em algo que à mão eu escreveria como:

var height: float = 132.4
var weight: float = 75.0
var age: int = 25

Obviamente, este exemplo não é muito útil, mas eu quero olhar para algo simples (multiline / comma splitting, then transformation) que poderia me ajudar a implementar algo mais complexo.

Meu problema aqui é como a macro obtém a string de entrada, analisa (em tempo de compilação!) E que tipo de código pode ser executado em tempo de compilação (é apenas um subconjunto de uma língua? Posso usar macros / código de outra módulos importados)?

EDITAR: Com base na resposta, aqui está uma solução de código possível para a pergunta:

import macros, strutils

# Helper proc, macro inline lambdas don't seem to compile.
proc cleaner(x: var string) = x = x.strip()

macro declare(s: string): stmt =
  # First split all the input into separate lines.
  var
    rawLines = split(s.strVal, {char(0x0A), char(0x0D)})
    buf = ""

  for rawLine in rawLines:
    # Split the input line into three columns, stripped, and parse.
    var chunks = split(rawLine, ',')
    map(chunks, cleaner)

    if chunks.len != 3:
      error("Declare macro syntax is 3 comma separated values:\n" &
        "Got: '" & rawLine & "'")

    # Add the statement, preppending a block if the buffer is empty.
    if buf.len < 1: buf = "var\n"
    buf &= "  " & chunks[0] & ": "

    # Parse the input type, which is an abbreviation.
    case chunks[1]
    of "i": buf &= "int = "
    of "f": buf &= "float = "
    else: error("Unexpected type '" & chunks[1] & "'")
    buf &= chunks[2] & "\n"

  # Finally, check if we did add any variable!
  if buf.len > 0:
    result = parseStmt(buf)
  else:
    error("Didn't find any input values!")

declare("""
x, i, 314
y, f, 3.14
""")
echo x
echo y

questionAnswers(1)

yourAnswerToTheQuestion