O JX Conversor 🔄 é uma Linguagem de Domínio específico utilizada para o domínio particular de conversão entre XML (Extensible Markup Language) e JSON (Javascript Object Notation).
JSON E XML são formatos de dados utilizados diariamente pelos desenvolvedores de software. Em sua construção, eles permitem inserir informações complexas e difíceis de serem estruturadas no dia-a-dia, facilitando assim suas aplicações em ambientes que requerem um certo nível de complexidade na informação a ser transmitida. Dessa forma, sua aplicação se torna uma alternativa muito viável para aqueles que necessitam tanto de flexibilidade, como também simplificidade em seu contexto.
Um fato interessante é que ambos padrões independem de linguagem. Essa definição permite que os dados representados por eles possam ser acessados em qualquer linguagem de programação, principalmente por APIs específicas, uma vez que essa junção traria ainda mais praticidade no desenvolvimento.
Essa conversão pode ser utilizada de diversas formas num fluxo de trabalho. Seja para atender uma demanda específica, ou para a praticidade no entendimento de uma estrutura específica, a DSL busca atender uma necessidade no aspecto de desenvolvimento de software.
O presente projeto propõe elaborar uma DSL (Domain Specific Language) que seja possível traduzir scripts escritos em XML para JSON.
👨💻 Matheus Phelipe Alves Pinto
👨💻 Murilo Campanhol Stoldoni
👨💻 Nilton Vieira da Silva
👨💻 Richard Jeremias Martins Rocha
Nome da linguagem: JX Conversor 🔄
🔗 Link para o projeto no repl.it: Clique aqui
Os itens necessários para o uso dessa DSL são:
➡️ Node v12^
➡️ Ohm-js
➡️ fs
O dois elementos centrais da sintaxe do JSON são: Keys (chaves) e Values (valores).
Keys: devem ser strings (linhas), ou seja, deve conter uma sequência de caracteres entre aspas duplas.
Values: são um tipo válido de dados JSON, podem ser array, object, string, boolean, number ou null.
Um objeto JSON deve iniciar e terminar obrigatoriamente com chaves {}. Como o objeto é formado aos pares (key/value), dentro deve existir um mais pares. Sendo estruturada da seguinte forma: "key":"value" conforme exemplo abaixo.
{
"disciplina":"Compiladores",
"periodo": 7
}
Os valores devem conter um tipo válido de dado JSON, como:
É uma coleção ordenada de valores, é esplicito com colchetes [] e cada valor dentro do array é separado por uma vírgula.
Um array pode obter objetos JSON dentro, conforme é mostrado no exemplo abaixo:
"estudantes":[
{"primeiroNome":"Matheus", "ultimoNome":"Pinto"},
{"primeiroNome":"Murilo", "ultimoNome":"Stodolni"},
{"primeiroNome":"Nilton", "ultimoNome":"Vieira"},
{"primeiroNome":"Richard", "ultimoNome":"Jeremias"}
]
Contém uma key e um value. Tem dois pontos depois de cada key e uma vírgula depois de cada value, diferenciando cada objeto. Lembrando que o último elemento não contem vírgula.
Um objeto em JSON é mostrado abaixo:
"disciplina": {
"nome": "Compiladores",
"vagasDisponiveis": 20,
"professor": "Luis Menezes"
}
Sequência de zeros ou mais caracteres Unicode. É colocado entre aspas duplas
Exemplo abaixo:
{
"nomeDisciplina": "Compiladores"
}
Pode ser informado do tipo inteiro ou fracionado, conforme mostrado abaixo:
{
"vagasDisciplina": 20,
"mediaDisciplina": 9.5
}
É informado os valores TRUE ou FALSE:
{
disciplinaOfertada": "true"
}
Apenas informa que não existe informação.
{
"alunosReprovados": "null"
}
A documentação do XML é feita pelo site W3C (órgão responsável pela definição da linguagem XML). Iremos mostrar os principais tópicos que devem ser levados em consideração quando estamos criando um objeto XML.
- Um documento XML deve possuir raiz única.
- Todas as tags devem ser fechadas (elementos devem possuir tag inicial e tag final)
- Os nomes de elementos (tags) e atributos são sensíveis à caracteres maiúsculos e minúsculos.
- Nomes de tags não podem conter espaços em branco nem os caracteres !"#$%&'()*+,/;<=>?@[]^`{|}~. Além disso, não podem começar com um número, “ . ” (ponto) ou “ - " (traço).
Abaixo iremos dar exemplo válidos das regras mencionadas acima
<curso>
<disciplina>
<nome>Compiladores</nome>
<professor>Luiz Menezes</professor>
</disciplina>
<disciplina>
<nome>Sistema Operacional</nome>
<professor>José Paulo</professor>
</disciplina>
</curso>
<disciplina>
<nome>Compiladores</nome>
<professor>Luiz Menezes</professor>
</disciplina>
3. Nomes de elementos e atributos são Case Sensitive (são sensíveis à caracteres maiúsculos e minúsculos)
<nome>Compiladores</nome>
<Professor>Luiz Menezes</Professor>
4. Nomes de elementos e atributos são Case Sensitive (são sensíveis à caracteres maiúsculos e minúsculos)
<nomeDisciplina_1>Compiladores</nomeDisciplina_1>
-
Definição da gramática
-
Definição do analisador léxico
-
Definição do analisador semântico
Essa DSL foi desenvolvida com o objetivo de complementar a nota da 2ª avaliação da disciplina de Compiladores da Escola Politécnica da Universidade de Pernambuco, disciplina ministrada pelo professor Luis Menezes.
O editor de texto utilizado para este desenvolvimento foi o VSCode. As dificuldades encontradas foram a formatação do padrão de saída, a partir da informação transmitida pelos analisadores construídos.
No mais, o projeto foi executado com êxito. Como projeto de código aberto, esperamos que consiga auxiliar outros desenvolvedores no seu dia-a-dia.
Obrigado!