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. "()" 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