Anda di halaman 1dari 24

Marcação de Código fonte

presente em mensagens do
StackOverflow
Trabalho elaborado por:
Ângelo Coelho (a73194)
ORIENTADORES:
Carlos Araújo (a71142) PEDRO HENRIQUES
RENATO AZEVEDO
ESPECIFICAÇÃO
• Identificar código fonte em posts do StackOverflow

• Etiquetar código encontrado

• Unificar redundâncias de etiquetagem

• Substituir o texto original pelo processado


StackOverflow
• Website de perguntas e respostas sobre diversos tópicos da
programação de computadores
• Permite votar em questões e respostas
• Usurários podem obter pontos de reputação
StackOverflow Screenshot
Acesso aos dados do StackOverflow
• Disponível em https://archive.org/details/stackexchange

• Podemos escolher registos sobre diferentes tópicos.

Python
Unix
Gaming
Android...
Conteúdo de cada conjunto de dados
Users.xml Votes.xml Posts.xml PostsLinks.xml
8
Ficheiro
Ficheiros
Zip
XML
Tags.xml PostsHistory.xml Badges.xml Comments.xml

O que podemos encontrar nos ficheiros?

Informações dos Conteúdo das Sobre os votos das


Utilizadores: nome, perguntas e respostas publicações
morada, reputação...

Informações sobre os
comentários às Conquistas dos
publicações utilizadores
Posts.xml

Ficheiro Alvo Contém o conteúdo das perguntas e respostas


(texto a ser processado)

Está presente no atributo


"Body"
ARQUITETURA
POSTS

• As publicações estão presentes no ficheiro Posts.xml


• O texto a analisar está identificado com a etiqueta Body
• A informação contém caracteres de escape que deverão ser traduzidos para o seu significado
“real”
POSTS
PYTHON SCRIPT

Funcionalidades:

• Extrair a informação importante do ficheiro Posts.xml


• Chamar a compilação dos programas auxiliares
• Escrever num ficheiro o Body a analisar
• Chamar uma Makefile que faz correr Code Finder Flex e Tag Unifier Flex
• Escrever no ficheiro Posts.xml o resultado final de processamento
PYTHON SCRIPT

Escrever Chamar
Extração Escrever em
Call Make Body em Make
Body Posts.xml
ficheiro Parsing
POST BODY

• Ficheiro contendo apenas a informação relativa ao texto do post


• Neste ponto estão traduzidos os caracteres de escape
• Ficheiro Post Body será lido pelo Code Finder Flex
CODE FINDER FLEX

• Responsável pela análise léxica do texto


• Construção de expressões regulares que reconheçam código
• Regras com alguma folga de maneira a conseguir identificar código lexicalmente inválido
• Escrita do resultado final num ficheiro
CODE FINDER FLEX
Expressões regulares exemplo

• Comentário à lá C

• "/*"([^*]|\*+[^*/])*\*+"/"

• Método/Função à lá C

• [A-Za-z_0-9.]+"("[^)]*")"[;]{0,1}

• Ciclo à lá C

• ("for"|"while")[ ]*"("[^)]+")"[ ]*("{"[^}]+"}"|[^;]*;)

• Função Python

• "def"[ ]+{METHODCALL}[ ]*":"("\n"[ ]+.*)+


Exemplo demonstrativo
Input:
O que as expressões regulares devem detetar:
Output:
PRE-PROCESSED POST BODY

• Resultado da primeira análise léxica


• Body com etiquetas de código encontrado
• Necessária nova analise léxica para unificar etiquetas separadas por espaços ou outros
caracteres característicos de linguagens de programação
TAG UNIFIER FLEX

• Responsável por unificar etiquetas muito próximas


• Efetua análise das etiquetas <code>
• Analisa a informação contida entre o fim e inicio de duas anotações diferentes

Expressão regular:
• "</code>"["\n" {};|()$&]*"<code "[^>]*">”
Exemplo demonstrativo
Input:
Output:
POST PRE-PROCESSED POST BODY

• Texto com etiquetagem unificada


OUTPUT FINAL

• Cada ficheiro Post-Processed será atualizado no ficheiro principal Posts.xml


• Apenas é atualizado o Body
• A substituição do novo texto pelo antigo é feita da mesma forma que a informação foi captada

Anda mungkin juga menyukai