Engenharia de Linguagens

Engenharia de Linguagens (2011/2012)

Engenharia Gramatical

Sumários

03 de Outubro de 2011

  • 1. Apresentação da UCE30-EL e dos seus vários Módulos:
    • Apresentação da Equipe Docente, dos Objectivos e do modo de Funcionamento e Avaliação;
    • Introdução e Motivação para a área de Processamento de Linguagens e para o desenvolvimento baseado em Gramáticas e em Geradores de Compiladores.

10 de Outubro de 2011

  • 2. Revisão do conceito de Linguagem e sua relação com Gramática:
    • Linguagem Formal (textual ou visual) versus Linguagem Natural;
    • Linguagens de Programação--GPL versus DSL.

  • 3. Gramáticas:
    • Revisão do conceito de Gramática Indepedente de Contexto (GIC); sua definição formal;
      GIC = < T, N, S, P >, com pi : X0 --> X1...Xi...Xn
    • Sintaxe de uma Linguagem e Derivação de Frases; Árvore de Derivação;
    • Exemplos: Fatura/Faturas; Biblioteca.

17 de Outubro de 2011

  • 3. Gramáticas:
    • Revisão do conceito de Gramática Indepedente de Contexto (GIC); sua definição formal;
    • Exemplo 4: Genea, uma linguagem para construção de árvores genealógicas.

   Genea Grammar
   p00: Genea    --> Familias
   p01: Familias --> Familia
   p02:           |  Familias Familia
   p03: Familia  --> PROGENITORES '(' DataCasa ')' Progs FILHOS Filhos
   p04: Progs    --> MAE Progenitor PAI Progenitor
   p05:           |  PAI Progenitor  MAE Progenitor
   p06: Progenitor --> Nome Apelido DataNasc DataMorte
   p07:             |  DESCONHECIDO
   ----------alternativa--------------------------------------
      Progenitor --> Nome Apelido Genero
                  |  DESCONHECIDO
      Genero     --> PAI 
                  |  MAE
   ------------------------------------------------------------
   p08: Filhos   --> &
   p09:           | Filhos , Filho
   p10: Filho    --> Nome DataNasc DataMorte
   p11: Nome     --> str
   p12: Apelido  --> str
   p13: DataCasa --> data
   p14: DataNasc --> data
   p15: DataMorte --> data
   

24 de Outubro de 2011

  • 3. Gramáticas:
    • Introdução à semântica e aos conceitos de Gramática Tradutora (GT) e Gramática de Atributos (GA); abordagem informal baseada em casos de estudo (problemas).
    • Cont do Exemplo 4: Genea, uma linguagem para construção de árvores genealógicas---definição de restrições várias sobre as datas de nascimento/morte e de casamento; discussão da gravidade dos erros se as condições não forem respeitadas; identificação das tarefas a fazer para as verificar e associação dessas tarefas às produções da GIC; formalização do processo com atributos herdados e sintetizados.

31 de Outubro de 2011

  • 3. Gramáticas:
    • Introdução à Gramática de Atributos (GA) como forma rigorosa de especificar a semântica estática=condições-contextuais (ou restrições) e dinâmica=regras-tradução das linguagens; definição formal e exemplo abstrato; apresentação dos princípios de localidade e não-determinismo associados ao cálculo dos atributos.
      GA = < GIC, A, RC, CC, RT >
    • Definição de: atributo, a & A, como caraterística de um símbolo; regra de cálculo, rc & RC, como forma rigorosa de calcular um valor para um atributo associado a uma ocorrência do símbolo na árvore (dando uma propriedade desse símbolo concreto); condição contextual, cc & CC, como restrição ao valor de um atributo, ou de alguns atributos, no contexto concreto de uma produção; regra de tradução, rt & RT, como ação a desencadear para produzir um resultado parcial do processamento desejado, recorrendo aos valores dos atributos no contexto de uma produção concreta.
    • Sistematização da escolha de atributos a associar a cada símbolo e da definição das regras de cálculo para atributos sintetizados, em função do requisito, ou pedido, e da forma de cada produção.
    • Cont do Exemplo 4: Genea, uma linguagem para construção de árvores genealógicas---cálculo do número de filhos de uma família (numFi), do número de famílias (numFa) e do número médio de filhos de cada família (numMFiFa).

   Genea Grammar
   p00: Genea    --> Familias   {
            Genea.numFa = Familias.numFa;
            Genea.numMFiFa = Familias.totFi / Familias.numFa; 
   } 
   p01: Familias --> Familia  { 
            Familias.numFa = 1; 
            Familias.totFi = Familia.numFi; 
   }
   p02:           |  Familias Familia   { 
             Familias_0.numFa = Familias_1.numFa + 1; 
             Familias_0.totFi = Familias_1.totFi + Familia.numFi; 
   } 
   p03: Familia  --> PROGENITORES '(' DataCasa ')' Progs FILHOS Filhos  { 
            Famlia.numFi = Filhos.conta; 
   } 
   p08: Filhos   --> &  { 
            Filhos.conta = 0; 
   }
   p09:           | Filhos , Filho  { 
            Filhos_0.conta = Filhos_1.conta + 1; 
   } 

07 de Novembro de 2011

  • 3. Gramáticas:
    • Revisão do conceito de GA.
    • Introdução ao VisualLISA:
      • Criação de Gramáticas com o VisualLISA: foi exemplificado com a gramática Genea.
      • Criação de Regras de Cálculo de Atributos com o VisualLISA: foi exemplificado com a gramática Genea + exercício de calcular o numero de Filhos de uma família
      • Resolução de Exercicios com VisualLISA: Imprimir o nome completo de cada filho: nome do filho + apelido mãe + apelido pai --- o exercício permitiu explorar o uso de Atributos Sintetizados, Herdados e Intrínsecos.

14 de Novembro de 2011

  • 3. Gramáticas:
    • Continuação da utilização do VisualLISA para assimilação dos conceitos presentes em GAs:
      • Criação de Gramáticas com o VisualLISA: foi exemplificado com uma Gramática para definir uma lista de elementos mistos (strings ou inteiros)
      • Criação de Regras de Cálculo de Atributos com o VisualLISA para computar: o número de elementos da lista, o número de elementos numéricos e o somatório dos elementos numéricos --- o exercício permitiu explorar o uso de Atributos Sintetizados e Intrínsecos.

21 de Novembro de 2011

  • 3. Gramáticas:
    • Continuação da utilização do VisualLISA para assimilação dos conceitos presentes em GAs:
      • Revisão de alguns conceitos básicos: produção e árvore da produção; colagem de árvores de produção--árvore de derivação (concreta e abstrata); Atribtos de Entrada (AIn()) numa produção e Atributos de Saída (AOut()) de uma produção e regras de cálculo dessa produção -- 1 e 1 só regra obrigatória para cada "a" de AOut().
      • Continuação do exemplo (Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros)
      • Criação de Regras de Cálculo de Atributos com o VisualLISA para computar: o somatório dos elementos numéricos (total das sub-sequências e sub-total de cada sequência) apenas após a ocorrência da palavra "soma" --- o exercício permitiu explorar o conceito e uso de Atributos Sintetizados e Herdados.

   List Grammar
   p00: List    --> '[' Components ']'   {
            Components.inFlag = false;
   } 
   p01: Componentes --> Componente  { 
            Componentes.outFlag = Componente.outFlag;
            Componente.inFlag = Componente.inFlag; 
            
   }
   p02: Componentes -->  Componentes Componente   { 
             Componentes_1.inFlag = Componentes_0.inFlag;
             Componente.inFlag = Componentes.outFlag;
             Componentes_0.outFlag = Componente.outFlag;
             Componentes_0.soma = Componentes_1.soma + Componente.soma; 
   } 
   p03: Componente  --> str  { 
             Componente.outFlag = 
                         (str.val.equals("soma")) ? true : Componente.inFlag; 
             Componente.soma = 0;
   } 
   p04: Componente  --> int  { 
            Componente.outFlag = 0;
            Componente.soma = Componente.inFlag ? parseInt(int.val) : 0;
   }

28 de Novembro de 2011

  • 3. Gramáticas:
    • Continuação da utilização do VisualLISA para assimilação dos conceitos presentes em GAs:
      • Continuação do exemplo (Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros) --- apresentação e discussão minuciosa das resoluções feitas pelos grupos relativamente à questão b) do Exemplo 5 (variantes em torno do que significa adicionar após aparecer a palavra "soma" -- somatórios total e e parciais) --- uso intensivo de Atributos Sintetizados e Herdados.

05 de Dezembro de 2011

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir da GA -- Geradores de Compiladores (ou Compilers Compiler) tais como o AnTLR, PCCTS, LISA, CoCo/R, Silver, Cup, Eli, SGen, LRC, etc.
    • Continuação da utilização do VisualLISA para assimilação dos conceitos presentes em GAs:
      • Continuação do exemplo (Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros) --- apresentação e discussão minuciosa das resoluções feitas pelos grupos relativamente à questão da Ficha 1 (adicionar após aparecer uma sequência de palavras de comprimento maior ou igual a 3) --- uso intensivo de Atributos Sintetizados e Herdados.
      • Geração da GA desenhada num formato textual, LISA ou XAGRA -- explicação/justificação da abordagem, discussão e comparação das duas alternativas.

12 de Dezembro de 2011

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas (GT ou GA):
      • Generalização do conceito para "Geradores de Programas", GP --- o princípio e as fases/etapas.
      • Revisão do tema Geradores de Compiladores, GC (ou Compilers Compiler, CC) --- o que torna possível (um algoritmo standard guiado por uma estrutura de dados, uma Tabela de Decisão, que se deriva sistematicamente da especificação formal, a gramática).
      • Discussão da questão Q1 lançada para casa: o recurso a geradores de compiladores, ou de uma forma geral a geradores de programas, é uma importante forma de re-utilização --- tal re-utilização de código está subjacente ao princípio base da Geração de Programas e é transparente para o Programador pois é o GP que o aplica ao utilizar sempre o mesmo programa (altamente especializado e refinado) que implementa o algoritmo standard.
    • Introdução ao Gerador de Compiladores AnTLR:
      • As notações BNF e extended-BNF.
      • Utilização do exemplo anterior(Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros) --- edição da GIC e geração de um Parser (analisador léxico e sintático), testes e visualização da Árvore de Parsing.

02 de Janeiro de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas (GT ou GA):
    • Introdução ao Gerador de Compiladores AnTLR, agora para gerar um Tradutor dirigido pela Sintaxe:
      • Pragmas para controlo do Gerador:
        • options{ language, ... }
      • Pragmas para definição de código a incluir no programa gerado:
        • @header{...},
        • @members{...},
        • @init{...} e
        • @after{...};
      • Noção de Gramática Tradutora e de Ação Semântica; o valor semântico associado aos símbolos terminais, usualmente denominados de Tokens (
        $T.text
        e
        Integer.parseInt($T.text)
        );
      • Utilização do exemplo anterior(Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros) --- construção duma GT para contar o total de elementos de cada tipo e global e para somar os inteiros; visualização da Árvore de Parsing e do processo.

09 de Janeiro de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas (GT ou GA).
    • O Gerador de Compiladores AnTLR, para gerar um Tradutor dirigido pela Sintaxe:
      • Conclusão do exemplo anterior(Ex. 5): Gramática para definir uma lista de elementos mistos (strings ou inteiros) --- construção duma GT para contar o total de elementos de cada tipo e global e para somar os inteiros; cálculo dos somatórios parciais condicionados ao aparecimento da palavra "soma" na subsequência de palavras anterior á subsequência de números : gramática (GT) final que resolve este exemplo completo.
      • Início de um novo exemplo (Ex. 4, Genea) para consolidar os conhecimentos básicos do uso do AnTLR com gerador de TDS: Gramática para apoio a um projecto de Genealogia que permite descrever Famílias (progenitores e seus descendentes) Os alunos devem completar em casa a transposição para AnTLR da GIC Genea criada anteriormente com o VisualLISA .

16 de Janeiro de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas (GT ou GA).
    • O Gerador de Compiladores AnTLR, para gerar um Tradutor dirigido pela Sintaxe:
      • Continuação da exploração do exemplo Ex. 4, Genea, para consolidar os conhecimentos básicos do uso do AnTLR com gerador de TDS: Gramática para apoio a um projecto de Genealogia que permite descrever Famílias (progenitores e seus descendentes) --- construção duma GT para contar o total de filhos de cada família Os alunos devem completar em casa o trabalho iniciado e incluir AS para validar uma data.

27 de Fevereiro de 2012

  • 3. Gramáticas:
    • Resolução exaustiva do 1º teste de 2010/11 para revisão de toda a matéria teórica relacionada com gramáticas, sobretudo os conceitos e estratégia de escrita de GAs (estruturas de dados e estratégias de especificação versus técnicas de implementação).

05 de Março de 2012

  • 3. Gramáticas:
    • Resolução do 1ºTeste
    • Apresentação da resolução da Ficha 3 pelos grupos presentes (Linguagem para programação de um Robot de aspiração) e discussão das aproximações (demo).
    • Resumo das várias abrodagens já estudadas ao uso do AnTLR e a que falta ver; primeira apresentação da problemática da qualidade de linguagens e gramáticas e métricas.

12 de Março de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas de Atributos.
    • O Gerador de Compiladores AnTLR:
      • sistematização do seu uso com Atributos Herdados e Sintetizados para gerar um Tradutor dirigido pela Sintaxe (TDS-A).
      • Apresentação de um exemplo totalmente resolvido ("opp.g" -- ver link abaixo) para introduzir Atributos Herdados e Sintetizados em AnTLR e para sistematizar o seu uso e a forma de escrever estas GA que conduzem a TDS-A.
      • Aplicação das regras de sistematização acima a um novo exemplo retirado do 1ºTeste: Ex. 6, lista de compras Os alunos devem completar em casa o trabalho iniciado na aula.

19 de Março de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas de Atributos.
    • O Gerador de Compiladores AnTLR:
      • sistematização do seu uso com Atributos Herdados e Sintetizados para gerar um Tradutor dirigido pela Sintaxe (TDS-A).
      • Aplicação das regras de sistematização acima a um novo exemplo retirado do 1ºTeste: Ex. 6, lista de compras Os alunos devem completar em casa o trabalho iniciado na aula.

26 de Março de 2012

  • 3. Gramáticas:
    • Geração automática de Processadores de Linguagens a partir de Gramáticas de Atributos.
    • O Gerador de Compiladores AnTLR:
      • sistematização do seu uso com Atributos Herdados e Sintetizados para gerar um Tradutor dirigido pela Sintaxe (TDS-A).
      • Continuação da aplicação das regras de sistematização acima a um novo exemplo retirado do 1ºTeste: Ex. 6, lista de compras Os alunos devem completar em casa o trabalho iniciado na aula.
      • Aplicação das regras de sistematização acima a um novo exemplo retirado do 1º exercício do 1ºTeste: Ex. 7, Linguagem para descrição de  Conferencias.

16 de Abril de 2012

  • 3. Gramáticas:
    • Introdução à geração de Árvores de Sintaxe Abstrata (Abstract Syntax Trees - AST), como meio de obter um modelo intermédio para um texto fonte.
      • Gramáticas Concretas vs Gramáticas Abstratas.
      • Construção de árvores em AnTLR: o operador "->" de re-escrita e o operador "^" de criação de nodos e sub-árvores.
      • Aplicação da construção de árvores para uma linguagem de programação muito simples.

23 de Abril de 2012

  • 3. Gramáticas:
    • Continuação do assunto geração de Árvores de Sintaxe Abstrata (Abstract Syntax Trees - AST), como meio de obter um modelo intermédio para um texto fonte.
      • Gramáticas Concretas vs Gramáticas Abstratas.
      • Construção de árvores em AnTLR: o operador "->" de re-escrita e o operador "^" de criação de nodos e sub-árvores --- discussão do exemplo da última aula (a linguagem de programação C--) completado em casa pelos alunos.

  • 4. Qualidade de Linguagens de Programaçao
    • Recapitulação de alguns conceitos e caraterísticas básicas das LPs; as necessidades da Programação e os quesitos impostos às LPs.
    • Classificação das LPs quanto a:
      • cronologia e nível de abstração;
      • processamento;
      • paradigma;
      • organização do código;
      • modo de execução;
      • sistema de tipos;

30 de Abril de 2012

  • 3. Gramáticas:
    • Continuação do assunto geração de Árvores de Sintaxe Abstrata (Abstract Syntax Trees - AST), como meio de obter um modelo intermédio para um texto fonte.
      • Gramáticas Concretas vs Gramáticas Abstratas.
      • Construção de árvores em AnTLR: o operador "->" de re-escrita e o operador "^" de criação de nodos e sub-árvores --- discussão do exemplo da última aula (a linguagem de programação C--) e sua extensão com funções (declaração e invocação); proposta de um novo exercício, linguagem para descrever Mapas de Conceitos e sua instanciação.

07 de Maio de 2012

  • 3. Gramáticas:
    • Continuação do assunto geração de Árvores de Sintaxe Abstrata (Abstract Syntax Trees - AST), como meio de obter um modelo intermédio para um texto fonte.
      • Gramáticas Concretas vs Gramáticas Abstratas.
      • Manipulação de árvores em AnTLR (Tree Grammars): discussão do exemplo da última aula (a linguagem de programação C--) --- visualização, construção da lista de todos os identificadores e contagem dos subprogramas.

14 de Maio de 2012

  • 3. Gramáticas:
    • Continuação do assunto geração de Árvores de Sintaxe Abstrata (Abstract Syntax Trees - AST), como meio de obter um modelo intermédio para um texto fonte.
      • Gramáticas Concretas vs Gramáticas Abstratas.
      • Manipulação de árvores em AnTLR (Tree Grammars): discussão do exercício propostos aos Grupos, linguagem para descrever Mapas de Conceitos e sua instanciação - a árvore construída e sua reconfiguração.

21 de Maio de 2012

  • 3. Gramáticas:
    • Discussão sobre estrutura de dados para armazenamento de uma Tabela de Símbolos (TS) no processo de compilação da linguagem C--.
    • Resolução em AnTLR, do exercício de população de uma TS para a linguagem C--, tirando partido do conceito de AST e de gramática de atributos.
      • Identificação dos pontos chave para população da TS: DECLARACAO e FUNCAO.

28 de Maio de 2012

  • 3. Gramáticas:
    • Discussão sobre análise semântica dirigida por tabela de símbolos.
    • Resolução em AnTLR, do exercício de análise semântica de para a linguagem C--, tirando partido do conceito de AST, Tabela de Símbolos e de gramática de atributos.
      • Identificação de condições de contexto (produção a produção) para verificação de erros semânticos.

4 de Junho de 2012

  • 3. Gramáticas:
    • Continuação da discussão sobre análise semântica dirigida por tabela de símbolos.
      • Inferência e validação de tipos em árvores de expressões.

11 de Junho de 2012

  • 3. Gramáticas:
    • Continuação da discussão sobre Gramáticas Concretas, Abstractas e respectivas AST.
      • Sistematização do exercício de compilação, análise e transformação de software com a linguagem CMC.

18 de Junho de 2012

  • 3. Gramáticas:
    • Continuação da discussão sobre Gramáticas Concretas, Abstractas e respectivas AST.
      • Transformação do texto de entrada CMC em páginas HTML com interação.

25 de Junho de 2012

  • 4. Qualidade de Linguagens e de Gramáticas (slides):
    • Os 4 Fatores que definem a Qualidade de uma Linguagem e as 8 Caraterísticas que os influenciam;
    • Os 3 Fatores que definem a Qualidade de uma Gramática enquanto especificação de uma linguagem;
    • Os 2 Fatores que definem a Qualidade de uma Gramática enquanto especificação de um programa;
    • Métricas para GIC e Métricas para GA.
  • Conclusão da UC


r38 - 26 Jun 2012 - 03:08:57 - PedroRangelHenriques
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Syndicate this site RSSATOM