Instruções
Expressões S
<a href="https://rosettacode.org/wiki/S-expressions" target="_blank" rel="noopener noreferrer nofollow">S-Expressions</a> são uma forma conveniente de analisar e armazenar dados.
O que fazer:
Escreva um leitor/analisador simples para Expressões S que lide com strings entre aspas ou não, números inteiros e flutuantes (decimais).
A função deve ler uma única Expressão S, porém aninhada, de uma string e retorná-la como um array (aninhado).
Novas linhas e outros tipos de espaço em branco devem ser ignorados a menos que estejam contidos em uma string entre aspas.
"
Critérios de Aceitação:
()" em strings entre aspas não são interpretados, mas tratados como parte da string.
Tratar de aspas com escape dentro de uma string é opcional. Assim, "(foo"bar)" pode ser tratado como uma string "foo"bar" ou como um erro.
Para isso, o leitor não precisa reconhecer \ para escape, mas deve, além disso, reconhecer números se a linguagem tiver tipos de dados apropriados.
Observe que, com a exceção de ()" (\, se houver suporte a escape) e do espaço em branco, não há caracteres especiais. Todo o resto é permitido sem aspas.
O leitor deve poder ler a entrada a seguir
<pre>((data "quoted data" 123 4.5)
(data (!@# (4.5) "(more" "data)")))
</pre>
e transformá-la em uma estrutura de dados nativa.Critérios de Aceitação:
Testes:
- `parseSexpr` deve ser uma função.
- `parseSexpr('(data1 data2 data3)')` deve retornar `['data1', 'data2', 'data3']`
- `parseSexpr('((data "quoted data" 123 4.5) (data (!@# (4.5) "(more" "data)")))')` deve retornar `[['data', '"quoted data"', 123, 4.5], ['data', ['!@#', [4.5], '"(more"', '"data)"']]]`.
Console