viniciusaraujo.net

Uma Ferramenta para Criação de Linguagens de Domínio Específico (DSL)

Renato

Iniciarei neste post uma série que falará sobre um assunto que já existe a muito tempo, porém recentemente ganhou mais evidência: Linguagens de Domínio Específico, também conhecidas como DSL (Domain Specific Languages).

Farei uma introdução sobre as DSLs, depois mostrarei uma ferramenta para auxiliar na criação de linguagens e por fim um estudo de caso colocando em prática todo o conhecimento.

Este post foi construído com base em um trabalho de pós graduação, feito por mim em parceria com Elson Travassos, que eventualmente também escreve no meu blog "Do Windows ao Linux"

DSL - Domain Specific Languages

No mundo da computação, linguagens de programação existem para permitir que as pessoas escrevam programas que sejam compreensíveis pelas máquinas. Estas linguagens podem ser divididas em dois grandes blocos: linguagens de propósito genérico e as linguagens de domínio específico.

As linguagens de propósito genérico oferecem ao programador um conjunto de elementos, como operadores, abstrações, variáveis, etc, que permitem a ele construir programas que resolvem uma grande variedade de problemas (AABY, 2004). Elas não focam em um domínio específico do conhecimento. Exemplos deste tipo de linguagem são C, Java, Ruby, etc.

Ao contrário das linguagens de propósito genérico, existem as linguagens de domínio específico (DSL). Elas são criadas dentro de um contexto para resolver um conjunto específico de problemas (FOWLER, 2006), e tendem a ser mais naturais e próximas da linguagem humana, facilitando a manutenção de seus códigos (PARR, 2007). Muitas linguagens utilizadas hoje em dia são na verdade DSL. Alguns exemplos são as macros de planilhas eletrônicas, SQL para fazer consultas a bancos de dados, CSS para definir estilos de formatação em HTML, arquivos de configurações de aplicações como Apache, Struts, dentre diversas outras.

As DSLs podem ainda serem divididas em dois subgrupos: internas e externas. DSLs internas são formas que o programador possui de reescrever um determinado trecho de código, utilizando a mesma linguagem original, mas que esta fique de maneira mais legível (fluente) para um determinado propósito (FOWLER, 2006). Linguagens dinâmicas, normalmente as de script, são mais suscetíveis a notações mais fluentes, que exijam menos texto digitado. No entanto, é possível se beneficiar das vantagens de uma DSL interna mesmo em linguagens estruturadas como o Java (RUIZ, 2008).

Já as DSLs externas são de verdade uma linguagem. Elas possuem uma sintaxe própria e precisam de um interpretador para analisar o código e executar os comandos. Assim como as linguagens tradicionais, as DSLs externas podem ser interpretadas e executadas de imediato ou podem ser convertidas para outra linguagem (normalmente de propósito genérico) que então será executada.

O ANTLR

Para se criar uma DSL interna (ou simplesmente DSL), é necessário criar as regras de definição de uma linguagem. Deve-se definir seus átomos, criar suas regras sintáticas e semânticas além de implementar seu analisador (comumente chamado de parser). Este último é o responsável por, de posse de um código fonte escrito na linguagem em questão, analise sua sintaxe verificando por erros de escrita, sua semântica e por fim transforme este código em algo que possa ser executado (AHO, 2007). Implementar o código que executa todas estas tarefas, por mais simples que a DSL seja, não é algo simples. Requer muito conhecimento sobre compiladores.

O ANTLR (Another Tool for Language Recognition) é uma ferramenta que tem como objetivo apoiar os desenvolvedores a criarem novas linguagens, podendo ser DSLs ou não. No entanto ele é mais utilizado para construção de DSLs (PARR, 2007). Ele é um gerador de parser ou um compilador de compiladores, ou seja, é uma ferramenta usada para gerar um analisador/tradutor para uma determinada linguagem. O ANTLR gera seu código a partir da especificação de uma linguagem através de uma gramatica formal. Desenvolvedores de software podem usar o ANTLR para:

  • Implementar DSLs;
  • Gerar uma parte de compiladores e tradutores;
  • Construir ferramentas para realizar análise sintática, por exemplo para um XML complexo.

A partir de uma linguagem definida por uma gramática, o ANTLR irá realizar as seguintes tarefas

  1. Gerar o código do analisador léxico – agrupa os caracteres de entrada em tokens de acordo com o padrão especificado na gramatica.
  2. Gerar o código do analisador sintático – combina os tokens formando sentenças para linguagem.
  3. Transformar a gramatica inserida em uma estrutura de dados que na maioria das vezes é disposta através de uma arvore sintática abstrata (AST – Abstract Syntax Tree). A partir desta árvore é possível adicionar funcionalidade (semântica) em cada nó reconhecido, para que o código analisado gere um resultado ao ser executado.

A linguagem da gramática utilizada pelo ANTLR é o EBNF (Extended Bakus-Naur Form). Ela é uma versão melhorada da BNF, solucionando problemas de notação para representar facilmente decisões e repetições. A EBNF utiliza notações de expressões regulares.

Os códigos gerados pelo ANTLR podem ser em C, C++, Java, Python, C# e Objective-C.

No próximo post detalharei mais os recursos do ANTLR através de uma linguagem simples porém suficiente para demonstrar o poder desta ferramenta.

Referências
O que você achou dessa postagem?

0 Comentários

Tags: ,

Do Windows Ao Linux...

Vinícius Pitta Lima de Araújo

Renato Costa criou o blog Do Windows Ao Linux para contar suas experiências como usuário de longa data no Windows se aventurando no mundo do Linux. A proposta é guiar os novos usuários a evitar as armadilhas e superar obstáculos.

Após uma visita ao blog você verá que os novos usuários do Linux terão gratas surpresas e descobrirão que muitas coisas são bem mais simples do que podemos imaginar.

O que você achou dessa postagem?

1 Comentário

Tags:

Criando sumários automáticamente no word.

Vinícius Pitta Lima de Araújo

Introdução

Um problema muito comum enfrentado pelos universitários é adequar os trabalhos acadêmicos às regras da ABNT. Um dos quesitos da norma que gera muito trabalho braçal, mas não deveria, é o sumário.

As pessoas que não conhecem os recursos dos editores de texto que utilizam, geralmente, cometem dois erros: formatar os títulos individualmente e construir o sumário manualmente. Isto é completamente desnecessário pois o editor de texto pode fazer isso por você!

Este é um assunto que foge um pouco do foco principal do blog, mas como eu observo que é uma dificuldade muito comum entre estudantes universitários, vale a pena abrir uma exceção. Eu mesmo já fiz o favor de configurar e gerar o sumário em muitos trabalhos acadêmicos e já expliquei também muitas vezes como fazê-lo.

Eu creio que não preciso convencer ninguém de que é melhor ter um sumário gerado automaticamente do que fazer um na mão. De qualquer forma, aqui vão alguns motivos:

  1. Não precisar digitar pontinhos e formatar na mão;
  2. Evitar erros de digitação (o item diferente do título);
  3. Evitar desatualização (a página em que o item se encontra foi alterada e o sumário está desatualizado);
  4. Ter menos trabalho (ok, esse deveria ser o primeiro motivo e você teria ido direto para a próxima sessão).
OK, estou convencido, mas como eu faço?

Palma, palma, palma, não priemos cânico. Gerar o sumário automaticamente é muito simples. Neste artigo os exemplos serão baseados no MS Word. Se você estiver afim de uma nova experiência com um software livre (e gratuito) de qualidade, dê uma olhada no Open Office, cujo corretor ortográfico já foi atualizado baseado no novo acordo ortográfico da língua portuguesa.

Preparando os estilos

O segredo todo está nos estilos. Ao invés de formatar um texto, deve-se atribuir um estilo ao texto e formatar o estilo. Para formatar um estilo basta clicar no menu Formatar > Estilos e formatação.... Na versão 2003 do word, aparecerá uma barra lateral no documento com todos os estilos. Para alterar um estilo basta clicar com o botão direito no estilo e clicar em Modificar no menu de contexto. Na tela de configuração de um estilo é possível alterar todos os aspectos de formatação e outro punhado de detalhes.

Nos trabalhos acadêmicos os títulos têm uma hierarquia e podem facilmente chegar a 4 níveis (ex: 1.2.1.4). Pra montar uma hierarquia de títulos numerados acesse a opção Formatar > Numeração (dentro da tela de modificação de estilo) e escolhe o estilo de numeração com vários níveis. Faça isso para cada título. Os títulos receberão automaticamente o nível correto (ex: titulo1 - nível 1, titulo2 - nível 2). Tratando-se de trabalhos acadêmicos, provavelmente, seja necessário configurar 5 ou mais estilos:

  • Titulo1: Para os títulos principais (Introdução, Capítulos, Conclusão e Referências)
  • Titulo2: Sub-títulos do Titulo1;
  • Titulo3: Sub-títulos do Titulo2;
  • Titulo4: Sub-títulos do Titulo3;
  • Normal: Para o texto em geral.
Aplicando os estilos

Agora que todos os estilos estão devidamente formatados basta aplica-los ao texto. A vantagem de usar estilos (além de permitir a geração automática do sumário) é que todo o seu texto seguirá um padrão e se houver necessidade de alterar algum característica da formatação, basta editar o estilo que todo o texto marcado com o estilo será atualizado (fim do trabalho braçal!).

Para aplicar um estilo a uma parte do texto basta seleciona-la e então escolher o estilo no painel de estilos. Ao posicionar o cursor em uma determinada posição do texto e escolher um estilo, o estilo será aplicado a todo o paragrafo. Sendo assim, para associar o estilo Titulo1 a um título, basta selecionar o título ou posicionar o curso na linha do título.

A fim de tornar esta tarefa mais fácil ainda é possível associar uma tecla de atalho a cada estilo (ex: Titulo1 (Alt+1), Titulo2 (Alt+2), Titulo3 (Alt+3), Titulo4 (Alt+4), Normal (Alt+N)). Na tela de modificação do estilo, basta selecionar a opção Formatar > Tecla de atalho.

Lembre-se: nunca formate o texto diretamente. Prefira sempre criar um estilo e formatar o estilo, assim evita-se retrabalho tanto na hora de utilizar o estilo quanto na hora de alterar a formatação. Você pode, por exemplo, criar estilos para legendas de imagens, citações, referências, etc.

Gerando o sumário

Você já estava se perguntando: "Quando eu vou gerar o tal do sumário?". Eu guardei essa resposta para o final porque é a parte mais simples de todo o processo. Basta posicionar o curso do mouse no local do documento onde o sumário deverá ficar e clicar em Inserir > Referência > Índices.... Para sumários de trabalhos acadêmicos, geralmente, se utiliza a aba Índice analítico.

Ok! Você não ficou satisfeito não foi? Achou simples demais e quer complicar um pouco? Tudo bem, acho que não será possível mas vamos tentar.

É possível que alguns títulos no seu documento não sejam numerados mas precisam aparecer no índice. Para começar crie um novo estilo a partir do Titulo1. Para isso clique no botão Novo Estilo no painel de Estilos e formatação. Na tela de criação do novo estilo, na propriedade Estilo baseado em escolha o Titulo1. Feito isso basta remover a numeração do seu novo estilo (selecione a opção Nenhum) e dar um nome legal a ele. Lembrando que você pode associar uma tecla de atalho ao seu novo estilo.

Não está satisfeito? Ok! Talvez seu estilo não seja baseado no Titulo1 (você gosta de complicar). Então, no momento de inserir o sumário, clique em opções, na aba do índice analítico. No item Construir índice analítico a partir de: a opção Estilos deve estar marcada. Na lista de estilos disponível encontre o novo estilo que você criou e coloque o número 1 no nível do estilo para que ele apareça no sumário como um índice de primeiro nível.

Para atualizar o sumário basta clicar com o botão direito nele e em seguida em Atualizar Campo.

Isso é tudo pessoal!

O que você achou dessa postagem?

7 Comentários

Tags: , , ,