Parse - Guardando o input:
PARSE set e PARSE copy
Ambos pegam o input da próxima regra de parse, se for bem-sucedida.
set atribui o input a uma variável e copy, atribui uma cópia deste a uma variável.
Red[]
a: ["fox" "rat" "elk"]
parse a [
"fox"
set b ;pronto para atribuir se a próxima regra for bem-sucedida. Poderia ter usado copy.
"rat" ;sucesso, então "rat" => b
"elk"
]
print b
rat
PARSE collect e PARSE keep
Se você tem um bloco de "collect" dentro do seu bloco de regras, o parse não vai mais retornar um true ou false, ao invés disso, vai retornar um bloco com todos os sucessos que foram precedidos da palavra (comando) keep .
Red[]
a: ["fox" "dog" "owl" "rat" "elk" "cat"] ; input block
print parse a [
collect[
keep "fox" ; sucesso, será mantida
"dog"
"owl"
keep "rat" ; sucesso, será mantida
keep "cow" ; FALHOU! NÃO será mantida
"cat"
]
]
fox rat
PARSE collect set
parse vai retornar true ou false, e inserir todos os sucessos precedidos da palavra keep em um novo bloco.
Red[]
a: ["fox" "dog" "owl" "rat" "elk" "cat"] ;
print parse a [
collect set b [ ; cria b para guardar os keeps
keep "fox" ; sucesso, será mantida
"dog"
"owl"
keep "rat" ; sucesso, será mantida
keep "cow" ; FALHOU! NÃO será mantida
"cat"
]
]
print b
false
fox rat
PARSE collect into
parse vai retornar true ou false, e inserir todos os sucessos precedidos da palavra keep em um bloco existente. Parece que faz um append no bloco.
Red[]
a: ["fox" "dog" "owl" "rat" "elk" "cat"] ; input block
b:"" ; must create block first
print parse a [
collect into b [
keep "fox" ; sucesso, será mantida
"dog"
"owl"
keep "rat" ; sucesso, será mantida
keep "cow" ; FALHOU! NÃO será mantida
"cat"
]
]
print b
false
foxrat
Coletando o input usando a sintaxe de set-word (dois pontos)
Durante o processamento do parse, você pode atribuir a parte restante de um input a uma palavra (variável):
Red[]
a: ["fox" "dog" "owl" "rat" "elk" "cat"]
print parse a [
"fox"
"dog"
b:
]
probe b
false
["owl" "rat" "elk" "cat"]