Debugging Parse



O dialeto Parse é poderoso, mas também é difícil de visualizar e notoriamente difícil de depurar. Antes de prosseguir para os recursos mais avançados da análise, sugiro que você aprenda como depurar seu código. Há duas maneiras que eu conheço: usar a função parse-trace e imprimir informações ao longo da computação.

function! parse-trace


Faz o parse da entrada, mas também imprime (rastreia) todas as etapas do processo.


Red[]

a:  ["fox" "owl" "rat"]

print parse-trace a ["fox" "owl" "rat"]


-->

  match: ["fox" "owl" "rat"]

  input: ["fox" "owl" "rat"]  

  ==> matched

  match: ["owl" "rat"]

  input: ["owl" "rat"]  

  ==> matched

  match: ["rat"]

  input: ["rat"]  

  ==> matched

return: true

true



Red[]

a:  ["fox" "owl" "rat"]

print parse-trace a [["fox" | "cow"] "owl" "rat"]


-->

  match: [["fox" | "cow"] "owl" "rat"]

  input: ["fox" "owl" "rat"]  

  -->

    match: ["fox" | "cow"]

    input: ["fox" "owl" "rat"]    

    ==> matched

    match: [| "cow"]

    input: ["owl" "rat"]    

  <--

  match: ["owl" "rat"]

  input: ["owl" "rat"]  

  ==> matched

  match: ["rat"]

  input: ["rat"]  

  ==> matched

return: true

true


usar print:

Coloque instruções print em locais estratégicos para informar o status da computação:


Red[]

a:  ["fox" "owl" "rat"]

print parse a ["fox" (print "reached fox")

                  "owl" (print "reached owl")

                  "rat" (print "reached the end")

                 ]


reached fox

reached owl

reached the end

true