tradutor de pig latin

21
Etapas do processo de desenvolvimento do tradutor de Pig Latin Elen Arantza Regina Mares

Upload: elen-arantza

Post on 29-Jun-2015

374 views

Category:

Documents


0 download

DESCRIPTION

Etapas de desenvolvimento de um tradutor da linguagem de manipulação de dados Pig Latin. (Análise Léxica)

TRANSCRIPT

Page 1: Tradutor de Pig Latin

Etapas do processo de desenvolvimento do

tradutor de Pig Latin

Elen Arantza

Regina Mares

Page 2: Tradutor de Pig Latin

Definição da linguagem de programação

-1-

Page 3: Tradutor de Pig Latin

1. Definição da linguagem de programação

Pig é um projeto de pesquisa do grupo Yahoo!, criado com o objetivo de desenvolver uma infraestrutura para suportar a análise de

grandes conjuntos de dados.

Page 4: Tradutor de Pig Latin

A mais alta camada de abstração no Pig é a

linguagem de consulta chamada Pig Latin, pela qual os usuários expressam as tarefas de

análise de dados, como consultas no estilo SQL ou álgebra relacional.

1. Definição da linguagem de programação

• Projeto open-source:

Page 5: Tradutor de Pig Latin

Especificação informal da linguagem de programação

-2-

Page 6: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Palavras-chave:

and any all as bag by chararray CONCAT COUNT cross load

define distinct double

explain filter foreach

generate group illustrate SUM

Page 7: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Tipos de dados: Simples e complexosTipos de dados simples Descrição Exemplo

Scalars

int Inteiro de 32-bit 10

long Inteiro de 64-bit Data: 10L or 10lDisplay: 10L

float Ponto flutuante de 32-bit Data: 10.5F or 10.5f or 10.5e2f or 10.5E2FDisplay: 10.5F or 1050.0F

double Ponto flutuante de 64-bit Data:     10.5 or 10.5e2 or 10.5E2Display: 10.5 or 1050.0

Arrays

chararray Matriz de caracteres (string) em formato Unicode UTF-8

hello world

bytearray Array de bytes (blob)

Tipos de dados complexos

tuple Um conjunto ordenado de campos

(19,2)

bag Uma coleção de tuplas (registros)

{(19,2), (18,1)}

map Um conjunto de pares de valores chave.

[open#apache]

Page 8: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Operadores aritméticos

Operação Símbolo

Observação

Adição +

Subtração -

Multiplicação *

Divisão /

Módulo  % Retorna o resto divido por b (a%b).

Bicondicional ? : (condição ? valor_se_verdadeiro : valor_se_falso)Bicondicional deve ser colocado entre parênteses.

Page 9: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Operadores booleanos

Operadores Símbolo

AND       e

OR   ou

NOT negação

Page 10: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Operadores de comparação

Comparação SímboloIgual  ==Não é igual !=Menor que   <Maior que >Menor ou igual a   <=Maior ou igual a >=Combinação de padrões

matches

Page 11: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Operadores nulos

Operador Símbolo

É nulo  is nullNão é nulo   is not null  

Page 12: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Operadores relacionaisOperador Descrição

COGROUP GROUP e COGROUP são idênticos. Ambos trabalham com uma ou mais relações.

CROSS Calcula o produto cruzado de duas ou mais relações.

DEFINE

DISTINCT Remove tuplas duplicadas em uma relação.

FILTER Seleciona tuplas de uma relação baseada em alguma condição.

FOREACH Gera transformações de dados baseadas em colunas de dados.

GROUP Agrupa os dados em uma ou mais relações.

IMPORT

JOIN (inner) Executa uma junção interna de duas ou mais relações baseadas em valores de campo comuns.

JOIN (outer) Executa uma junção externa de duas ou mais relações com base em valores de campo comuns.

LIMIT Limita o número de tuplas na saída.

LOAD Carrega dados do sistema de arquivos.

MAPREDUCE Executa tarefas nativas Map-reduce dentro de um script de Pig

ORDER BY Classifica uma relação baseada de um ou mais campos.

SAMPLE Divide uma relação em duas ou mais relações.

SPLIT Divide uma relação em duas ou mais relações.

STORE Armazena ou salva os resultados para o sistema de arquivos.

STREAM Envia dados para um script externo ou programa.

UNION Calcula a união de duas ou mais relações.

Page 13: Tradutor de Pig Latin

2. Especificação informal da linguagem de programação

• Programa exemplo:

log = LOAD 'excite-small.log' AS (user, time, query);grpd = GROUP log BY user;cntd = FOREACH grpd GENERATE group, COUNT(log);STORE cntd INTO 'output‘;

002BB5A52580A8ED 18005BD9CD3AC6BB38 1800A08A54CD03EB95 3011ACA65C2BF70B2 501500FAFE317B7C0 150158F8ACC570947D 3018FBF6BFB213E68 1

Saída:

Page 14: Tradutor de Pig Latin

Especificação formal da linguagem de programação

-3-

Page 15: Tradutor de Pig Latin

3. Especificação formal da linguagem de programação

Dicionário:

Variáveis:-Identificador de posição: -Identificador: L (L + D)* (_ (L + D)*)*-Constantes: D (D)*-Seqüência de caracteres: ‘ (L + D + B + C)* ’-Comentários: -- (L + D + B + C)*

Page 16: Tradutor de Pig Latin

3. Especificação formal da linguagem de programação

AFD:

Page 17: Tradutor de Pig Latin

Especificação do fluxograma de execução (Análise léxica)

-4-

Page 18: Tradutor de Pig Latin

Inicio

Ler todos caracteres do

comando/linha

Ler símbolo

Dicionário?

AFD?

Tratamento de erros

Não

Tabela de símbolos

Sim

Gerar token

Não

Sim

Fim de fita?

Não

Fim

Sim

log = LOAD 'excite-small.log' AS (user:chararray, time:long, query:chararray);

Page 19: Tradutor de Pig Latin

Especificação do processo de análise léxica (Teste de mesa)

-5-

Page 20: Tradutor de Pig Latin

Exemplo de manipulação de dados

>> log = LOAD 'excite-small.log' AS (user:chararray, time:long, query:chararray);>> grpd = GROUP log BY user;>> cntd = FOREACH grpd GENERATE group, COUNT(log);>> STORE cntd INTO 'output‘;

002BB5A52580A8ED 18005BD9CD3AC6BB38 1800A08A54CD03EB95 3011ACA65C2BF70B2 501500FAFE317B7C0 150158F8ACC570947D 3018FBF6BFB213E68 1

>>

SELECT user, COUNT(*) FROM excite-small.log GROUP BY user;

Page 21: Tradutor de Pig Latin

• Yahoo! Research: http://research.yahoo.com/project/90

• Apache Pig:http://pig.apache.org/

-Referências-