1 / 16

Little Language

Little Language. Equipe: Osias Carneiro, Anderson Soares, André Araújo. Origem. Baseado no padrão interpreter apresentado no livro Design Patterns (GOF) Originalmente apresentado no livro Patterns in Java vol. 1 (GRAND, Mark). Por Quê Little language ?.

cili
Download Presentation

Little Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Little Language Equipe: Osias Carneiro, Anderson Soares, André Araújo

  2. Origem • Baseado no padrão interpreter apresentado no livro Design Patterns (GOF) • Originalmente apresentado no livro Patterns in Java vol. 1 (GRAND, Mark)

  3. Por Quê Little language? • Também Conhecida Como Domain Especific Languages (DSL’s) • Utilizado quando se tem tarefas recorrentes de dificil execução, então nesse caso cria-se uma “pequena linguagem” que permita a realização de tais tarefas de maneira mais simples, talvez não sirva para todas as necessidades, mas com certeza torna algumas tarefas bem mais simples;

  4. Como funciona • Cria-se um interpretador para essa “pequena linguagem”. O padrão define uma estrutura que facilita as operações de analise léxica e sintática, tornando mais simples a inclusão de regras semânticas, ou outras coisas que permitam interpretar uma sentença. Implementa a gramática de tal linguagem, que posteriormente gera uma árvore abstrata que permite identificar sentenças.

  5. Contexto • Imagine que você precise escrever um programa que procure em um conjunto de arquivos para achar arquivos que contenham uma determinada combinação de palavras. Você não quer escrever um programa para cada busca. Ao invés disso você define um linguagem que permite ao usuário descrever a combinação de palavras e então escrever um programa que acha arquivos que contem uma combinação de palavras especificadas na linguagem.

  6. Aplicação • Quando é necessário tratar tipos de dados similares com um pequeno número de operações mas inúmeras combinações diferentes

  7. Passos para o projeto • Definir a linguagem que será utilizada para a resolução do problema • Criar regras léxicas e sintáticas, com suas respectivas regras de produção. • Implementação das classes necessárias que implementarão tal linguagem

  8. Diagrama de classes genérico

  9. papéis • Client • AbstractNonTerminal • ConcreteNonTerminal • Parser • TerminalToken • LexicalAnalizer • InputStream

  10. Como funciona • O cliente recebe a sentença a ser interpretada • chamada ao método ‘parse’ de Parse que cria a arvore sintática abstrata e a devolve para o cliente • Então o método ‘execute’ é chamado para verificar o resultado da sentença

  11. Contexto • Interpretador de expressões algébricas (radiciação e derivações de polinômios simples). Resolve raízes enésimas no formato “RAIZ radical radicando” e deriva polinômios simples no formato “3x^3+2x^2-3x+2” e retorna o valor de resultado • OBJETIVO: estender a gramatica para aceitar também potências, no formato “base ELEVADO expoente”

  12. Gramatica atual • Expressão -> raiz | derivada • Raiz -> ‘raiz’ num num • Derivada -> [+|-] termo derivada | ε • Num -> 0...9 • Termo -> [num] letra [^ num] • Letra -> a....z A.....Z

  13. Gramatica estendida • Expressão -> raiz | derivada | potenciação • Potenciação -> num ‘elevado’ num • Raiz -> ‘raiz’ num num • Derivada -> [+|-] termo derivada | ε • Num -> 0...9 • Termo -> [num] letra [^ num] • Letra -> a....z A.....Z

  14. Estrutura do interpretador

  15. roteiro • Fazer testes e verificar funcionamento • Reconhecer o token ‘elevado’ no Lexer • O método ‘tokenName()’ na classe Parser deve tratar ‘elevado’ • Acrescentar as regras sintáticas da gramatica final ao parser • Criar uma nova classe Potenciação que herda de ExpressãoAlgébrica (ConcreteNonTerminal) • Rodar

  16. Obrigado pela atenção Bora baea!!!

More Related