Modo de funcionamento do Projecto Integrado no 2ºSemestre, 2ªParte.
Apresentação dos 3 Casos de Estudo que servirão de suporte à disciplina:
CS1 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): neste caso a entidade principal é 'Candidatura' que tem uma 'Equipe' de investigadores que pertencem a 'Instituições Parceiras' e participam num projecto organizado em 'Tarefas' que tem 'Resultados' avaliados em 'Milestones' -- o sistema permite carregar candidaturas, lacrar, avaliar, aprovar, fazer os pagamentos e as medidas de execução, fechar.
CS2 (Gestão de Marcação de Consultas numa Clínica Médica): neste caso a entidade central é 'Consulta' que envolve 'Paciente', 'Médico' e 'Ficha Clínica' -- além de manter a informação sobre Médicos e Pacientes, é preciso Marcar Consultas e Registar Episódio Clínico na ficha.
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): aqui a entidade principal, não é uma, são duas. Na 1ªfase é a 'Ficha de Documento' à qual estão associadas as fichas com descrições individuais dos Clérigos; na 2ªfase é a 'Ficha Prosopográfica de cada Clérigo' com as sua referências para as fontes documentais -- neste caso o objectivo, além de carregar e mostrar a informação, é fazer a 'Normalização' das fichas e a 'Fusão' das várias fichas com descrições individuais dos Clérigos na respectiva Ficha Prosopográfica.
Apresentação do enunciado da componente do projecto integrado, Sistema DRAW, que será trabalhada nesta 2ªparte --- uma linguagem para especificação do Modelo de DadosdreqL:
Análise de Requisitos: a linguagem deve permitir definir os Tipos Atómicos (Primitivos, Renomeados, Enumerados), Tipos Estruturados (Set, Seq, Tree, Tuple e Map), Relações implícita ou explicitamente. Além disso, alguns atributos dos campos devem ser especificados (editável, nulo, visível, comprimento máximo, mascarado, chave, auto-increment).
TPC: a) Criar o Modelo de Dados (UML ou VDM) para os 3 Casos de Estudo; b) terminar a análise de requisitos para dreqL.
09 de Março de 2009
Recapitulação dos objectivos e modo de funcionamento do Projecto Integrado no 2ºSemestre, 2ªParte.
Revisão do enunciado da componente do projecto que vai ser trabalhada nesta parte: a linguagem dreqL para descrição da estrutura de dados de uma aplicação e sua integração com a linguagem DRAW.
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo que servirão de suporte à disciplina:
CS1 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): apuramento do Modelo proposto por Miguel Esteves (em comparação com o do Sérgio e outros) -- ver Diagrama de Classes Final.
TPC: terminar os modelos para os 2 outros casos e entregar em papel o 1ºmodelo.
16 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo que servirão de suporte à disciplina:
CS2 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): apuramento do Modelo final -- ver Diagrama de Classes Final.
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): discussão do modelo inicial e dos conceitos envolvidos.
Discussão muito calorosa sobre Modelação de Sistemas de Informação; o Modelo Relacional e o DER versus o Modelo Orientado a Objectos e o DClasses.
TPC: terminar o modelo para o último caso e entregar em papel e em formato electrónico o Diagrama dos 3 Modelos.
23 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo, já propostos, que servirão de suporte à disciplina:
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): discussão do modelo final; comparação de interpretações e abordagens diversas.
Apresentação de mais 2 Casos de Estudo que servirão de suporte à disciplina:
CS4 (Gestão de Aquisições num Organismo Público): neste caso a entidade principal é 'Ficha de Aquisição', a qual se associa a unidades organicas e produtos, fornecedores e orçamento, de modo a poder-se fazer a sua cabimentação nas rubricas orçamentais e a respectiva autorização de compra.
CS5 (Gestão de Correspondência): neste caso a entidade principal é 'Correspondência' estando ligada a 'Funcionarios' de modo a permitir fazer o registo completa de cada correspondencia que chega à institução, identificando o destinatário interno e fazendo os eu tracking até ser arquivada.
Enquadramento desta componente de PI com o trabalho já feito, em realização e futuro:
para o efeito foi revista a Arquitectura geral de uma Aplicação Web do tipo Data-centric, formada por 3 camadas: a camada de interacção (dita o Front-Office do sistema); o repositório de dados (em torno do qual se centram as operações); e a camada intermédia (o Middleware) que estabelece a ligação entre as outras duas camadas.
a linguagem DRAW serve para especificar a camada de interacção;
para interligação das duas será definida uma outra linguagem, interL, que mapeia os dados da interface com os dados contidos no repositório;
a linguagem dreqL surge para especificar o repositório -- sua estrutura e manutenção (ou seja, o conjunto de operações que formam o Back-Office do sistema).
TPC1: fazer o modelo para os dois novos casos e entregar em papel e em formato electrónico o respectivo Diagrama.
TPC2: propor uma definição para a linguagem dreqL; apresentar a sua GIC.
30 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 5 Casos de Estudo, já propostos, que servirão de suporte à disciplina:
CS4 (Sistema para estudo Gestão de Aquisições num Organismo do Estado): discussão do modelo final; comparação de interpretações e abordagens diversas.
CS5 (Sistema para estudo Gestão de Corresondência num Organismo do Estado): discussão do modelo final; comparação de interpretações e abordagens diversas.
Discussão muito detalhada das propostas para a linguagem dreqL apresentadas por cada grupo; análise da gramática e de frases concretas.
TPC1: apresentar a versão final da gramática para definição da linguagem dreqL e frases de sua instanciação aplicadas aos 5 Casos de Estudo.
20 de Abril de 2009
Discussão e avaliação, grupo a grupo, da linguagem dreqL proposta, da sua gramática e parser gerado pelo AnTLR e análise de frases concretas aplicadas a cada um dos 5 Casos de Estudo.
TPC1: gerar código SQL para Criar as Tabelas de uma Base de Dados que implemente o sistema de informação especificado em dreqL
27 de Abril de 2009
1ªetape de avaliação (do 2ºsemestre) do Projecto Integrado: estado de definição das linguagens DRAW e dreqL e de desenvolvimento dos respectivos processadores (geração do código SQL para criação das Tabelas correspondentes ao modelo descrito); aplicação aos Casos de Estudo.
04 de Maio de 2009
Conclusão da 1ªetape de avaliação (do 2ºsemestre) do Projecto Integrado.
Início do desenvolvimento do Gerador de Código associado à dreqL para realizar as funções de CRUD.
11 de Maio de 2009
Não houve aula devido às festividades do Enterro da Gata.
18 de Maio de 2009
Aula dada pelo JJ.
25 de Maio de 2009
Discussão e continuação do desenvolvimento do Gerador de Código associado à dreqL para geração das funções em Perl que invocam as instruções SQL para implementar as funções de CRUD (uma função por tabela).
02 de Junho de 2009
Discussão e continuação do desenvolvimento do Gerador de Código associado à dreqL para geração das funções em Perl que invocam as instruções SQL para implementar as funções de CRUD (uma função por tabela).
Preparação da 3ªcamada de interacção que vai usar objectos para ligar a descrição DRAW à dreqL oferecendo ao programador uma série de operações e interrogadores de alto nivel (próximo do modelo OO).
As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ter uma ideia do andamento dos vossos projectos.
Sugere-se a visita regular a esta página, já que poderão surgir actualizações/adições de sugestões de implementação.
27 de Outubro - Implementação de uma linguagem básica para a representação de grafos (por exemplo, inspirada na do graphviz), e uma ferramenta que gere um conjunto de CGI capazes de navegar sobre este grafo. A implementação desta etapa será iniciada nas aulas de 20 de Outubro.
3 de Novembro - Especificação de um conjunto base de tipos (STR, INT, TEXT, FLOAT, DATE, PASSWORD, EMAIL, URL). Adição sobre a linguagem da etapa anterior de parâmetros em cada aresta. Cada estado (CGI) deve mostrar um formulário por acção (aresta) existente. Por exemplo, se do vértice A partem duas arestas, uma com os campos Nome: STR, Morada: TEXT, e uma outra com os campos Nome: STR, Pass: PASSWORD, a CGI referente ao vértice A deverá apresentar dois formulários, um para cada uma das possíveis acções. Depois de escolhida uma acção, o estado de destino dessa aresta deverá imprimir os valores preenchidos no formulário anterior.
Sugestão 1: colocar em evidência os campos com nomes iguais, de forma a que sejam partilhados pelos dois formulários.
Sugestão 2: procurar módulos de validação/geração de formulários no CPAN como o HTML::FormFu ou o CGI::FormBuilder.
Sugestão 3: validar os valores submetidos de acordo com o seu tipo (ver sugestão 2, ou JavaScript).
10 de Novembro - Avaliação das etapas anteriores. Esta avaliação será feita das 11h00 em diante.
17 de Novembro - Adição de funções de processamento nas arestas do grafo. Estas funções estarão presentes num outro documento Perl (por exemplo num módulo Perl) e serão invocadas sempre que necessário. Assim, cada transição entre estados deixa de conter apenas os parâmetros, mas sim uma assinatura de uma função: nome da função, parâmetros necessários (que correspondem à etapa do dia 3 de Novembro), e o tipo de retorno da função. Quando um utilizador utilizar um formulário, os dados serão usados para invocar a função, e o resultado final será mostrado. Por exemplo: soma(a: INT, b:INT): INT
24 de Novembro - Não há garantias que uma função invocada durante a transição entre estados não dê erro. Ou seja, uma função de inserir que, teoricamente, não devolve nada (apenas altera o estado na base de dados) pode dar um erro. Como esta função, qualquer outra pode dar erro. Assim, implicitamente o DRAW deve considerar que todas as funções retornam um "maybe": o tipo especificado se não der erro, ou undef no caso de ter ocorrido um erro. Em caso de erro, a variável especial do Perl $@ será usada para guardar a mensagem de erro. O nodo de destino deverá verificar o retorno da função invocada. Se o valor for undef, a mensagem de erro é mostrada. Caso contrário, é mostrado o resultado de invocar a função.
1 de Dezembro - NOTA: Não há aula por ser feriado, mas há trabalho programado! Em caso de dúvidas procurem-nos durante o resto da semana, ou usem e-mail! Uma função não retorna necessariamente um tipo escalar. Por exemplo, uma pesquisa numa base de dados retorna uma lista de registos. Torna-se, pois, imprescindível adicionar tipos estruturados à linguagem DRAW:
Tuplo: uma sequência de tipos (básicos, para já!). Por exemplo: ProcuraRegisto(Nome: STR):(Nome: STR, Idade: INT, Morada: STR)
Lista: uma sequência homogénea de tipos (básicos ou tuplos). Por exemplo: Alunos():(Nome: STR, Idade: INT)*
Os exemplos usam uma sintaxe ilustrativa. Usem a vossa sintaxe!
8 de Dezembro - NOTA: Não há aula por ser feriado, mas há trabalho programado! Em caso de dúvidas procurem-nos durante o resto da semana, ou usem e-mail! A framework já deve ser capaz de suportar uma aplicação simples! Implementem uma aplicação simples usando a vossa própria framework. Isso permitirá encontrar erros ou limitações. Alguns exemplos de possíveis aplicações:
Lista telefónica: permitir adicionar nomes e números de telefone. Permitir apagar registos, e listar nomes de acordo com um padrão de pesquisa.
Dicionário Online: permitir consultar e adicionar palavras e respectivas definições. Permitir alterar a definição. Permitir listar palavras de acordo com um padrão de pesquisa.
Mais sugestões com o tempo...
15 de Dezembro - Avaliação das etapas anteriores.
Janeiro - Permitir que em cada transição, para além da invocação de uma função, seja possível propagar variáveis entre estados. Deste modo será possível, por exemplo, que o username de um utilizador introduzido na página de login possa ser propagado por todas as restantes páginas. Note-se que as variáveis propagadas só são mostradas se fizerem parte de um formulário. Os formulários deverão ser preenchidos caso existam definidas variáveis com os nomes dos campos respectivos.
Fevereiro - Permitir que as funções de transição retornem um tipo especial, chamado 'VARS' que corresponda a uma tabela associativa, que mapeie nomes de variáveis em valores. Isto permitirá, por exemplo, que depois de um formulário em que se peça a chave de uma tabela, seja possível mostrar o formulário para editar o registo da base de dados, preenchendo automaticamente o formulário com os respectivos valores.
Abril - Definição da linguagem DReqL? , e criação do Parser;
27 de Abril - Avaliação!
Propagação de variáveis, entre estados e a partir de funções
Gerador de código SQL para criação do modelo relacional a partir do DReqL? .
Exemplo 1:
Neste primeiro exemplo pretende-se analisar gramáticas,
escritas de acordo com a meta-gramática seguinte antlr3.g.
Para efeitos de análise pretende-se extrair, armazenar e visualizar a seguinte informação:
Tabela de identificadores
Grafo de dependências
Métricas de tamanho
Posteriormente pretende-se reescrever a gramática, eliminando produções inúteis e normalizando
a forma de recursividade removendo os operadores próprios do extended-BNF.
Questões colocadas nas aulas
Q1:
(2009.03.16) Diga qual a relação entre a Compreensão de Programas, usada a nível da Engenharia de Software (na manutenção, re-utilização e certificação de aplicações), e os sistema para Avaliação da Qualidade de Documentos Anotados eXVisXML ?
Q2:
(2009.03.16) Escolha um dialecto XML definido pelo grupo no módulo de PED do 1ºSemestre e escolha uma documento concreto escrito nesse dialecto XML e calcule manualmente as Métricas previstas no eXVisXML.
Fichas Práticas para resolver fora das aulas
Ficha I (Data de Entrega: 2009.XX.XX --- relatório em Literate Programming)
Calcule o backward slicing relativamente à instrução
printf("Maximo: %d\nMinimo: %d\n", max, min);
com respeito à variável max.
Calcule o forward slicing relativamente à instrução
int i, max, min;
com respeito à variável min.
int main()
{
int array[MAX];
int i, max, min;
for (i = 0; i < MAX; i++)
{
printf("Introduza numero:\n");
scanf("%d", &i);
}
max = array[0];
min = array[0];
for (i = 1; i < MAX; i++)
{
if (array[i] < min) { min = array[i]; }
if (array[i] > max) { max = array[i]; }
}
printf("Maximo: %d\nMinimo: %d\n", max, min);
return 0;
}
Calcule o System Dependency Graph para o seguinte programa:
void Add(int* a, int b)
{
*a = *a + b;
}
void Increment(int* z)
{
Add(z,1);
}
int main()
{
int sum = 0;
int i = 1;
while(i < 11)
{
Add(&sum,i);
Increment(&i);
}
printf("Sum: %d\n", sum);
}
Calcule o Program Dependency Graph para o seguinte programa:
Calcule o Control Flow Graph para o seguinte programa:
int main()
{
int n, i, sum, product;
scanf("%d",&n);
i=1;
sum=0
product=1;
while(i <= n)
{
sum += i;
product *= i;
i++;
}
printf("Sum: %d\n", sum);
printf("Product: %d\n", product);
}
Notas sobre AnTLR
Configurar CLASSPATH para permitir a invocação via linha de comandos (Windows): set CLASSPATH = %CLASSPATH%;pathANTLR; onde a pathANTLR é a respectiva path para o ANTLR (.jar).
Sobre a gramática family.g e a tree grammar familyTree.g, executar "Generate code".
Fazer download dos seguintes ficheiros Test.java e input.txt para a pasta "output" para onde foram gerados os ficheiros na alínea anterior.
Executar "javac *.java" e finalmente "java Test".
Fichas de Avaliaçao
Ficha IV
Após a pesquisa genérica sobre o tema "Transformação de Programas" estude em concreto uma das ferramentas enocntradas e prepare uma pequena apresntação à turna sobre ela: filosofia, campos de aplicação, funcionalidades e utilização.
Mostre, a título de exemplo, como implementaria o problema de transformação de um programa em C-- proposto na Ficha II.
Ficha III
Faça uma pesquisa sobre o tema "Transformação de Programas" e procure em concreto abordagens, ferramentas e aplicações.
Depois identifique lacunas de modo a defnir o projecto que vai levar a cabo para colmatar essas fraquezas.
Por fim implemente o sistema de transformação idealizado.
Ficha II
Partindo de uma versão "light" da gramática do C (C--) disponível no site do AnTLR, pretende-se que os alunos manipulem um dado programa de entrada, cumprindo os seguintes requisitos:
Construir a Tabela de identificadores;
Adicionar a respectiva declaração de tipo (infira o tipo se necessário), por cada variável usada não declarada.
Construir o Data Dependence Graph (DDG), usando a técnica de Single Static Assignment (SSA)
Construir o Control Flow Graph (CFG)
Ficha I
Com a intenção de levar os alunos a fazer um exercício de transformação de SW que os obrigue a pensar no problema, nas fases, nas estratégias e nas ferramentas -- percebendo a necessidade de fazer a análise sintatica e semantica, de construir uma representação intermédia (RI), tipo ASD+TabDefs, e de criar uma Base de Regras de Transformação e um Sistema de Reescrita de ASDs para facilitar a especificação e sistematizar a implementação -- pretende-se que crie uma ferramenta para fazer o upgrade de programas escritos em SQL1 para SQL2.
A questão está que em SQL1 não existe a instrução UPDATE TABLE para alterar um ou mais campos não-chave de um registo.
Isso leva a que a actualização é sempre feita à custa de uma remoção (REMOVE FROM T WHERE chv="X") seguida de uma inserção (INSERT INTO T (chv="X", a1=...) ).
O upgrader a implementar deve detectar os pares (REMOVE,INSERT) na mesma chaves e substituir por um UPDATE nessa mesma chaves.
Configurar CLASSPATH para permitir a invocação via linha de comandos (Windows): set CLASSPATH = %CLASSPATH%;pathANTLR; onde a pathANTLR é a respectiva path para o ANTLR (.jar).
Sobre a gramática family.g e a tree grammar familyTree.g, executar "Generate code".
Fazer download dos seguintes ficheiros Test.java e input.txt para a pasta "output" para onde foram gerados os ficheiros na alínea anterior.
Exemplo 1:
Escreva, em notação AnTLR, uma Gramática para uma linguagem que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
Acrescente Acções Semânticas (e depois Atributos) para calcular o Comprimento da Lista.
Exemplo 2:
Escreva, em notação AnTLR, uma Gramática para a famosa linguagem funcional Lisp(1) que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
Acrescente Atributos para:
calcular a quantidade de números e palavras da lista;
construir uma lista plana (todos os elementos ao mesmo nível) com os elementos originais associados ao nível a que aparecem;
verificar que todos os elementos da lista sejam do mesmo tipo do 1ºelemento
gerar código post-fix(2) como se a SExp fosse calculada numa máquina de stack.
(1) Considere para este exemplo que a gramática de uma Symbolic Expression (na qual assenta a linguagem Lisp) escrita numa notação geral (livre) é:
T = { num, pal, "(", ")" }
N = { SExp, SExplist }
S = SExp
P = {
p1: SExp --> num
p2: SExp --> pal
p3: SExp --> "(" SExplist ")"
p4: SExplist --> SExp SExplist
p5: SExplist --> &
}
(2) Considere que o código-máquina a gerar (para traduzir as S-Expressions para uma máquina de stack) é uma Linguagem Assembly simples apenas com as 3 instruções seguintes:
LAB pal // LABel significa que o operando 'pal' é uma constante
// alfanumérica (identificador)
CONS num // CONS significa que o operando 'num' é uma constante
// numérica
OPER op // OPER significa que o operando 'op' é um operador
Para melhor compreender o que se pretende, mostra-se abaixo o resultado de processar duas frases válidas da Linguagem Lisp:
Exemplo 3:
Nos tempos que correm, a utilização da linguagem SQL (Structured Query Language) é comummente aceite na comunidade informática
para a interrogação de bases de dados. São várias as ferramentas que fazem
uso desta linguagem: SQL Server, MySQL, Apache Derby, etc.
A gramática da linguagem SQL não é mais do que uma lista de comandos.
Pretende-se neste exercício que implemente a gramática da linguagem SQL com pelo menos 4 comandos à sua escolha.
Em relação aos comandos escolhidos, pode simplificar a sua sintaxe real, incluindo apenas a parte obrigatória (p.ex., no SELECT pode
omitir a parte ORDER-BY ou GROUP-BY).
Depois de implementar a sua gramática, recorrendo ao AnTLR, pretende-se que:
Construa a Árvore de Sintaxe Abstracta (ASA, ou em inglês AST) utilizando o mecanismo próprio do ANTLR;
Depois de ter a AST, deverá:
construir a Tabela de Identificadores (TabId) constituída pelos nomes das Tabelas e pelos nomes dos Campos
gerar uma S-Expr (Lisp) a partir da árvore (uma espécie de pretty-print da AST).
Exemplo 4:
Análise da Qualidade da Gramática de uma Linguagem para Gestão Científica II (Projectos de Investigação): enunciado
Questões colocadas nas aulas
Q1:
(2008.09.29) "Explique porque se constata, ao fazer debug visual no AnTLRWorks, que o parser gerado pelo AnTLR é Top-Down?"
Q2:
(2008.09.29) "O que é preciso acrescentar à Gramática da Lista de Números, do Exemplo 1, para calcular o comprimento da lista (ou contar os seus elementos)?"
Q3:
(2008.10.06) "Porque é que, após analisar o código produzido pelo ANTLR, se pode afirmar que o Parser gerado é um recursivo-descendente (RD) e não um LL?"
Q4:
(2008.10.06) "Porque é que a declaração dos atributos numa gramática AnTLR devia ser introduzida pela palavra-reservada 'synthesizes' e não 'returns' ?"
Q5:
(2008.10.18) Considere a gramática da linguagem Lisp definida na última aula (download aqui) para responder à seguinte questão. Substituindo a produção p4: sExpr -> '(' sExpr* ')' por p4: sExpr -> '(' sExpr sExpr+ ')' como procederia ao cálculo do atributo soma?
Q6:
(2008.10.20) "Porque é que o termo PROPAGAR 'expressa correctamente' o conceito de herança em Gramáticas de Atributos (GAs)?"
Q7:
(2008.10.27) "Os atributos podem ou não ser calculados de uma forma concorrente?"
Q8:
(2008.10.27) "Qual o princípio das GAs que um neto não pode herdar directamente de um(a) avô(ó)?"
Q9:
(2008.10.27) "Qual o inconveniente de alterar código automaticamente gerado?"
Q10:
(2008.10.27) "Qual a diferença de atitude entre JavaDoc (princípio) e Literate Programming?"
Q11:
(2008.11.10) "Qual a diferença entre definir o ';' como Parte integrante dum Comando, ou como Terminador de Comando ? e se for como Separador de Comandos ?"
Q12:
(2008.11.17) "Porque os compiladores actuais e reais não fazem correcção de erros?"
Q13:
(2008.11.17) "Prove, com o autómato LR(0), a diferença entre as seguintes situações: ';' como terminador e ';' como parte integrante do comando."
Q14:
(2008.11.24) "Porque é que o compilador não é um processo interactivo?"
Q15:
(2008.11.24) "Qual o ganho extra que advém do uso de editores sensíveis ao contexto? Diga também qual a diferença entre Editor Sensível ao Contexto e Editor Guiado pela Sintaxe."
Q16:
(2008.11.24) "Qual a diferença entre um compilador à la Pascal e um compilador à la C no que diz respeito ao tratamento de erros em run-time?"
Q17:
(2008.12.15) "Porque é que os Editores Dirigidos pela Sintaxe quase não se utilizam actualmente?"
Q18:
(2008.12.15) "Proponha uma estrutura para construir a Tabela de Identificadores a usar no processamento das Linguagens Orientadas a Objectos."
Q19:
(2009.01.05) Constrúa o Aut-LR(0) para a gramática (GIC) do Exemplo 4.
Q20:
(2009.01.05) Aplique todas as Métricas de Tamanho e de Forma já estudadas à GIC da linguagem Lisp (ver Exemplo 2).
Q21:
(2009.01.26) Explique porque, na prática, se usam 2 gramáticas para a mesma linguagem.
Q22:
(2009.01.26) Calcule as Métricas Lexicográficas e de Forma para as linguagens C, Pascal e XML, usando as gramáticas disponíveis no UltraGram.
Fichas Práticas para resolver fora das aulas
Ficha I (Data de Entrega: 2008.11.10 --- relatório em Literate Programming)
Geração de um Processador para Gestão Científica (Teses e Orientadores): enunciado
Ficha II: Faça um relatório detalhado, recorrendo ao Literate Programming, sobre o Exercício 3 descrito acima.
Ficha III (Data de Entrega: 2009.02.05 --- relatório em Literate Programming):
Pesquise na Internet o que há sobre Métricas para Avaliação da Qualidade em Gramáticas e Linguagens; integre no seu relatório um capítulo específico (mas claro e bem estruturado) sobre o estudo feito.
Avaliação da Qualidade de Gramáticas; Métricas
Retome a Gramática da DSL GCI apresentada no enunciado da Ficha I e estude a sua qualidade avaliando as Métricas que foram ensinadas nas aulas.
Pretende-se repetir a avaliação da sua qualidade depois de efectuar cada uma das 3 transformações abaixo (as alterações são não-cumulativas, isto é, são independentes e realizadas sempre sobre a gramática original):
(T1)
Reduza a gramática G eliminando as produções inúteis.
(T2)
Altere a gramática G de modo a simplificar o lado direito da produção p3, permitindo escrevê-lo
na forma:
p3: Pg --> IdOrient DescOrientac Periodo
(T3)
Altere a gramática G para agrupar numa única descrição todas as orientações do mesmo Orientador.
Exemplo 5:
A gramática independente de contexto GIC5, abaixo apresentada, define uma linguagem específica (DSL) para apoio à contabilização de todos os PIs de um dado grupo de investigação, permitindo descrever cada projecto concluído ou em
andamento dentro do grupo, financiado pela FCT, pelo GRICES ou pela ADI.
O Símbolo Inicial é PIs, os Símbolos Terminais são escritos em minúsculas (pseudo-terminais), ou em maiúscula
(palavras-reservadas), ou entre apóstrofes (sinais de pontuaçãao) e a string nula é denotada por &; os restantes serão os Símbolos Não-Terminais.
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> InvPs
p3: | Lst ';' InvPs
p4: InvPs --> SglInv LstIds
p5: SglInv --> id
p6: LstIds --> SglProj
p7: | SglProj ',' LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> SglProj Desc FINANC Entidad Valor INIC Ano FIM Ano
p11: SglProj --> id
p12: Desc --> str
p13: Entidad --> FCT
p14: | GRICES
p15: | ADI
p16: Ano --> num
p17: Valor --> num
sabendo-se ainda que os símbolos terminais variáveis e os comentários válidos são definidos pelas seguintes expressões regulares:
num : [0-9]+
id : [a-zA-Z]+
str : \"[^"]*\"
comentario1 : "%".*
Afira a qualidade de GIC5 calculando todas as métricas estudadas (tamanho, forma, lexicográficas).
Pretende-se repetir a avaliação da qualidade depois de efectuar cada uma das 3 transformações abaixo (as alterações são não-cumulativas, isto é, são independentes e realizadas sempre sobre a gramática original):
(GIC5T1) reescreva a gramática eliminando todas as produções unitárias e a recursividade (à custa de usar notação ex-BNF);
(GIC5T2) por questões de legibilidade e outras razões, não é desejável ter produções tão longas (com tantos símbolos do lado direito), como a p10 acima. Modifique a gramática G de modo a permitir reescrever p10 da seguinte forma:
p10: Proj --> SglProj Desc Financiament Period
(GIC5T3) complete a gramática G para permitir incluir na descrição detalhada de cada projecto (símbolo Proj) a lista de todos os seus membros (sigla dos investigadores que nele colaboram);
Exemplo 4:
Repita o mesmo exercício do Exemplo 3 para medição e aferição de qualidade aplicado à sua gramática do Exemplo 1.
Exemplo 3:
Considere a gramática independente de contexto abaixo apresentada no Exemplo 2, designada por GIC2, e calcule as métricas dos 3 tipos de modo a poder pronunciar-se sobre a qualidade da GIC em causa.
Repita o mesmo exercício de medição e aferição de qualidade para as gramáticas GIC2T1, GIC2T2, GIC2T3, GIC2T4 e GIC2T5 obtidas da original (GIC2) por aplicação das sequintes transformações:
(T1) remova todas as produções unitárias;
(T2) transforme a gramática em LL(1);
(T3) reescreva a gramática usando ex-BNF, de modo a eliminar toda a recursividade directa ou indirecta;
(T4) reescreva a gramática de modo a permitir que a derivação do símbolo Descrição na produção p4 seja assim:
p4: Descricao --> IdentObra '(' Autor ')' IdentEdicao
(T5) altere a gramática de modo a permitir que cada livro tenha mais de um Autor.
----PedroRangelHenriques - 23 Jan 2010 - 23 Jan 2010
Exemplo 2:
A gramática independente de contexto, GIC, abaixo apresentada, define
uma linguagem específica para descrever os livros e CDs disponíveis
numa biblioteca e os estados
que lhe são associados (livres ou emprestados), à semelhança
do que acontece nas bibliotecas da UM.
O Símbolo Inicial é Biblioteca, os Símbolos Terminais são
escritos em maiúsculas (pseudo-terminais) ou em maiúscula
entre apostrofes (palavras-reservadas e sinais de pontuação),
e a string nula é denotada por &;
os restantes (sempre em minúsculas) serão os Símbolos Não-Terminais.
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
P5: Referencia --> id
p6: Tipo --> LIVRO
p7: | CDROM
p8: | OUTRO
p9: Titulo --> string
p10: Autor --> string
p11: Editora --> string
p12: Ano --> num
p13: Catalogo --> BGUM
p14: | ALFA
p15: | OUTRO
p16: Existencias --> LOCAL Local '(' Estados ')'
p18: Local --> string
p19: Estados --> Estado
p20: | Estados ',' Estado
p21: Estado --> CodigoBarras Disponib
p22: CodigoBarras --> id
p23: Disponib --> ESTANTE
p24: | PERMANENTE
p25: | EMPRESTADO DataDev
p26: DataDev --> Ano '-' Mes '-' Dia
p27: Mes --> num
p28: Dia --> num
Neste contexto e após analisar a GIC dada, responda às alíneas seguintes.
a) Escreva uma Frase válida da linguagem gerada pela GIC dada, mostrando a respectiva Árvore de Derivação.
b) Altere a gramática de modo a permitir que cada livro tenha mais de um Autor.
c) O par de produções p1/p2 define uma lista com recursividade à esquerda. Altere esse par para usar recursividade à direita e mostre, através das árvores de derivação, a diferença entre ambos os esquemas iterativos.
d) (TPC)Escreva as funções de um parser RD-puro (recursivo-descendente) para reconhecer o Símbolo Estado e seus derivados.
e) (TPC)Construa o estado inicial do autómato LR(0) pra gramática dada e os estados que dele saiem.
f) Transforme a GIC dada numa gramática tradutora, GT, reconhecível pelo AnTLR, para:
calcular e imprimir: o número de registos; e o número de livros existentes para cada registo.
o número total de livros com estado RESERVADO/PERMNENTE/ESTANTE.
identificar e listar por ordem alfabética os títulos dos livros.
verificar se não existem registos com a mesma referência.
g) repita a alinea anterior usando agora uma gramática de atributos, GA, recorrendo também ao AnTLR, para gerar o processador, criando primeiro uma árvore de sintaxe abstracta (ASA).
Exemplo 1:
Black é uma jovem empresa portuguesa que desenha, produz e
comercializa tudo para Góticos,
desde vestimentas, meias e sapatos até adereços e tatuagens.
A Black quer ter um sitio WWW, como agora é moda, mas
que seja alimentado facilmente por eles
(cada época que a colecção é alterada) sem contudo saberem nada de
HTML, nem terem eles de
montar o site.
Para isso pretende-se definir uma nova Linguagem que permita à
Black descrever a sua colecção.
Além da data da última actualização, a linguagem deverá permitir
descrever acessórios e vestimentas.
No caso de se tratar de um acessório, além da referência e descrição,
deverá ser possível incluir
o url para uma ou mais imagens (opcional), o tipo do acessório
(bracelete, colar, bolsa, anel, piercing);
o seu preço e o material de que é feito (pele, cabedal, tecido, metal).
No caso de se tratar de vestimenta, deverá ser possível diferenciar
entre Para Ele e Para Ela.
Além da referência e descrição da vestimenta, deverá ser incluído o
url para uma ou mais imagens,
o tipo da vestimenta (vestido, calça, t-shirt),
o preço e os tamanhos disponíveis (XS, S, M, L, XL).
Após ler o enunciado acima, pede-se que:
a) Escreva então uma Gramática Independente de Contexto, GIC, que especifique a Linguagem pretendida (note que o estilo da linguagem (mais ou menos verbosa) e o seu desenho são da sua responsabilidade).
b) Transforme a GIC acima em notação do AnTLR e gere um parser para reconhecer frases válidas da linguagem que criou e para detectar os erros em frases inválidas.
Questões colocadas nas aulas
Q1:
(2009-10-19) Investigue o que existe sobre métricas para avaliar a qualidade de gramáticas (apresente na próxima aula uma síntese das referências que encontrou).
Fichas Práticas para Avaliação (a resolver fora das aulas)
F4:
Escreva uma pequena monografia em formato de artigo, e entregue para efeitos de avaliação, sobre Editores Estruturais (structure-editors) e Editores Orientados pela Sintaxe (syntax-directed editors): resumo do conceito, abordagens e estado actual (nível académico e comercial).
F3:
Desenvolva um sistema (GraAlEditor) para edição, visualização e medição de gramáticas. Nesse sistema deve implementar os várioa parametros de aferição e as várias métricas estudadas.
F2:
Escreva uma pequena monografia em formato de artigo, e entregue para efeitos de avaliação, sobre Parsing: resumo do conceito, abordagens e algoritmos.
F1:
O resultado da investigação solicitada na Q1 acima, deve ser escrito em formato de artigo e entregue (após apresentação oral na aula) para efeitos de avaliação --- Classe Latex para formatar o documento a apresentar: llncs2e.zip
Exemplo 1:
Para apoio a um projecto de Genealogia pretende-se que crie uma linguagem simples que permita descrever Famílias.
Cada Família será formada pela identificação dos Progenitores (nome próprio e apelido, separados)
e pela lista dos filhos (apenas nome próprio).
Em fases posteriores pretende-se que a sua linguagem permita distinguir entre os Progenitores, a Mãe e o Pai, e depois a Data do casamento (para que o registo genealógico possa também suportar um projecto de investigação em Demografia Histórica).
Após ler o enunciado acima, pede-se que:
a) Escreva então uma Gramática Independente de Contexto, GIC, que especifique a Linguagem pretendida (note que o estilo da linguagem (mais ou menos verbosa) e o seu desenho são da sua responsabilidade). Essa GIC deve ir sendo sucessivamente transformada para mostrar diferentes formas de definir a mesma linguagem e ainda para fazer a evolução da linguagem inicial, conforme acima pedido.
b) Transforme a GIC numa Gramática Tradutora (GT) para calcular o número de filhos por casal, apresentando esse valor emparelhado com a data do casamento.
c) Transforme a GIC numa Gramática Tradutora (GT) para gerar instruções SQL que carreguem para a Tabela "Pessoas" de uma base de dados a informação de cada membro do agregado familiar: Chave, NomeProprio, Apelido, Género (se conhecido); Note que a Chave deve ser gerada pelo seu Processador e que o Apelido dos Filhos deve ser inferido também por esse Processador a partir dos Apelidos dos Progenitores.
d) Reescreva as GTs anteriores mas agora usando Gramáticas de Atributos (GA).
Exemplo 2:
Considere a linguagem de programação Lisp na qual um programa é uma Symbolic-Expression (SExp).
Sabe-se que uma SExp é um valor atómico (palavra ou numero) ou é uma lista e que cada elemento da lista é uma SExp.
A GIC abaixo define formalmente a linguagem Lisp, de acordo com a descrição acima:
T = { num, pal, "(", ")" }
N = { Lisp, SExp, SExplist }
S = Lisp
P = {
p1: Lisp --> SExp
p2: SExp --> num
p3: SExp --> pal
p4: SExp --> "(" SExplist ")"
p5: SExplist --> SExp SExplist
p6: SExplist --> &
}
Pede-se então que escreva uma Gramática de Atributos, GA, para
a) calcular o nível de aninhamento de cada lista (comece em 1 para a lista principal).
b) construir uma lista com todos os "operadores" presentes (considera-se "operador" o 1ºelemento de cada lista).
c) verificar se todos os "operadores" usados pertencem ao conjunto de operadores válidos de acordo com uma "biblioteca" fornecida no inicio.
d) verificar se o numero de argumentos ("operandos") com que cada operador é invocado condiz com a cardinalidade associada aos operadores válidos na referida "biblioteca".
e) substituir todos os "identificadores" usados como operandos pelo valor que lhes é associado nas operações "let".
f) gerar código post-fix para o programa ser executado por uma máquina-de-stack (que primeiro carrega os "operandos" e depois os transforma pelos "operadores", substituindo-os pelo resultado).
Exemplo 3:
Considere a linguagem para descrever uma Factura.
Sabe-se que uma Factura é composta por um cabeçalho e um corpo, e este é composto por um ou mais movimentos.
A GIC abaixo define formalmente uma primeira versão da linguagem Factura, de acordo com a descrição acima:
T = { id, str, num}
N = { Factura, Cabec, Corpo, IdFact, IdE, IdR, ...... }
S = Factura
P = {
p1: Factura --> Cabec Corpo
p2: Cabec --> IdFact IdE IdR
p3: IdFact --> NumFact
p4: NumFact --> id
p5: IdE --> Nome NIF Morada NIB
p6: IdR --> Nome NIF Morada
p7: Nome --> str
p8: NIF --> str
p9: Morada --> str
p10: NIB --> str
p11: Corpo --> ...
}
Pede-se então que escreva uma Gramática de Atributos, GA, para
a) calcular o total por linha e total geral.
b) estender a linguagem original para permitir mais do que uma factura (calculando os mesmos totais).
c) modificar a linguagem de modo a suportar inicialmente a descrição do stock (referência, descrição, preço unitário e quantidade em stock); neste caso, cada linha só terá a referência e a quantidade vendida.
d) estender a semântica da nova linguagem de modo a também actualizar o stock.
Questões colocadas nas aulas
Q1:
(2010-10-18) ...
Fichas Práticas para Avaliação (a resolver fora das aulas)
F1 (2010-11-08):
Concluir as alíneas a) b) c) d) do Exercico 2 e entregar devidamente documentado.
F2 (2010-12-06):
Resolva o Exemplo 3 devidamente documentado para efeitos de avaliação.
F3 (2011-02-21):
Resolva o Exemplo da Calculadora com declarações devidamente documentado para efeitos de avaliação.
F4 (2011-03-01):
Resolva o Exercício do LogoLISS devidamente documentado para efeitos de avaliação
F5 (2011-03-21):
Faça um estudo sobre métricas e avaliação de qualidade em linguagens de Modelação / Especificação.
Notas e Links úteis
(2011-04-04) Monografias feitas pelos grupos de trabalho sobre Qualidade e Métricas:
(2010-11-08) Novas Scripts (funcionam em sistemas Unix) para agilizar a compilação em Silver:
O primeiro script, parse, deve ser colocado na directoria da gramática e permite testar o compilador correspondente a essa gramática com um ou vários ficheiros de input; para executar usar o seguinte comando:
parse input1 [input2 ...]
O segundo, cpgr, deve ser colocado na pasta grammars e duplica uma gramática para outra pasta garantindo a compilação; para executar usar o seguinte comando:
1) Descarregar o tracker
wget http://ftp.gnome.org/pub/GNOME/sources/tracker/0.7/tracker-0.7.21.tar.gz
2) Instalar um monte de dependências, entre as quais, o sqlite3
2.x) sudo apt-get install libsqlite3-dev
3) ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
4) make
5) [sudo make install]
6) ./src/tracker-utils/tracker-sparql
Exercícios 2010 01 18
http://etherpad.com/Bb4DSKte8x
Paper para o XATA (nova deadline: 14 DE MARÇO)
"faziam uma pequena script que recursivamente
extrair informação dos ficheiros que vai encontrando e guarda a parte
relevante num documento XML. Depois, todos esses documentos XML são
submetidos ao Solr para indexação. Por fim, usando o Solr, procuram-se
os documentos."
(a)Seleccione o título das músicas que contêm a palavra "Jesus".
//tit[contains( text() , 'Jesus')]
(b)Seleccione a província das músicas que contêm a palavra "Jesus" no título.
//prov[contains( ../tit/text() , 'Jesus')]//prov[../tit[contains( text() , 'Jesus')]]
(c)Seleccione o título de todas as músicas de Castelo Branco.
//tit[ contains( ../local/text() , 'Castelo Branco')]
(d)Seleccione todos os instrumentos referenciados no arquivo.
//intxt|//inst
(e)Seleccione o nome de todos os músicos referidos.
//musico
(f)Seleccione todos os instrumentos das músicas do Minho.
//inst[../prov/text() = 'Minho'] | //intxt[../prov/text() = 'Minho']
Exercícios e Exemplos para as aulas
Exemplo 1:
Considere o seguinte texto histórico (retirado de "Concelho Medieval de Monte Longo e o seu Foral", de José Carlos P. Gonçalves, ed. CMF, 2002, pg 223):
" Contratos de Emprazamento
Eis alguns rendimentos do Mosteiro de S. Gens de Monte Longo, provenientes dos contratos de emprazamento dos bens imóveis: casais, herdades e vinhas, que o mosteiro e os seus prelados possuíam e eram evidentemente uma fonte de proventos e de sustentação destes clérigos:
- Novembro de 1240,Contrato de emprazamento em três vidas de uma vinha sita em Lordelo, feito pelo prelado Gonçalo Gonçalves. Paga de foro anual uma libra de cera, no dia de S. Bartolomeu de S. Gens e a quarta parte do vinho.
- Setembro de 1247, emprazamento em uma vida da herdade sita no lugar de Infesta, Vale do Bouro, para edificar casas ou plantar vinha. Paga de foro anual uma libra de cera, no dia de S. Bartolomeu.
- Janeiro de 1249, emprazamento em três vidas de uma herdade sita em Villa Ouresi, termo de Celorico de Basto. Paga de foro anual um maravidi e para seus filhos dois aureos, no mesmo dia de S. Bartolomeu.
- Abril de 1250, emprazamento em uma vida do casal denominado: casal do meio casal de Trás-do-Rio, sito na Villa Bruela. Não refere o foro. "
Exemplo 2:
Considere o seguinte texto histórico (retirado de "Concelho Medieval de Monte Longo e o seu Foral", de José Carlos P. Gonçalves, ed. CMF, 2002, pg 224-225):
" Sentenças
Sentenças proferidas directamente relacionadas com o Mosteiro de S. Gens de Monte Longo e seus prelados.
- A 9 de Maio de 1238 temos uma sentença proferida pelo Arcebispo de Braga, D. Silvestre, decidindo a questão de padroado e hospitalidade entre D. Rodrigo Gomes de Briteiros e Gonçalo Gonçalves reitor da igreja de S. Gens de Monte Longo. Em resultado da inquirição que mandou fazer por D. Pedro Fernades de Villa Cova e D.Fernando Raimundo de Sousa, Cónegos de Braga, e por Pedro Ervilhom e Rodrigo Vides, Cavaleiros.
O Arcebispo julgou e sentenciou que D. Rodrigo Gomes de Briteiros não possuia o direito de padroado que pretendia ter.
Foi proferida a sentença na Igreja de S. Clemente.
- Sentença proferida em 26 de Agosto de 1335 por Lourenço Martins, dito calado, vedor dos Coutos e Honras de Entre-Douro e Minho, cargo para que foi nomeado por carta régia datada de Lisboa a 6 de Abril da era de 1335, mandando conservar à igreja de S. Gens do Monte Longo as honras que até então esta possuía nas freguesias de Armil, Estorãos, Ribeiros, Quinchães e S.Gens. A sentença foi precedida de inquirição testemunhal em que foram ouvidos: Pedro Lopes, juiz de Monte Longo, Acenço Esteves, tabelião de Monte Longo, e outros Bons-Homens.
- Em 26 de Maio de 1350 foi proferida uma sentença por João Peres, juiz de Monte Longo, acerca das águas do casal de Pardelhas.
A sentença foi lavrada em Ruivães por Vasco Esteves, tabelião de Monte Longo, sendo testemunhas entre outros Martim Affonso, tabelião do mesmo julgado. "
Questões colocadas nas aulas
Q1:
(2009-11-02) Após ler os textos dos dois exemplos acima, escolha um dos deles e:
a) Defina um contexto específico de trabalho, isto é um enquadramento e finalidade para o tratamento que quer dar aos documentos da família do exemplo escolhido;
b) Escreva então um DTD para definir um dialecto XML que lhe permita anotar documentos dessa família;
c) Anote o exemplo escolhido com o dialecto XML defindo na alínea anterior.
Fichas Práticas para Avaliação (a resolver fora das aulas)
F1:
....
Notas e Links úteis
museu.tgz: Ficheiros XML para a construção de um Museu
Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo GraphViz 2.03 do CPAN. Descobri que se trata de um pequeno bug, no ficheiro de configuração do módulo.
Portanto após instalar o GraphViz (www.graphviz.org) no Windows e o módulo GraphViz no CPAN (force install GraphViz):
Criar a base do sistema FOSSAT para receber e analisar pacotes de software.
Documentação
Relatório de Desenvolvimento detalhado, escrito em NoWed, de forma modular.
Apresentção
Acompanhada de um conjunto de slides em PPT ou PDF
Objectivos Específicos para a 1ª Fase:
PLN:
Criação de uma script para expandir os pacotes comprimidos cujas localizações serão passadas numa lista de parâmetros, colocando os ficheiros componentes em pastas diferenntes conforme seu tipo;
Criação de um Repositório de ficheiros ReadMe (ou de ChangeLog);
EG/ATS:
Desenvolvimento de um Processador de MakeFiles, com base na Gramática de Atributos da Linguagem Make e no Gerador AnTLR, que construa o Grafo de Dependências dos ficheiros e o represente graficamente usando Dot/Graphviz.
PED:
Defina um família de documentos anotados XML para armazenar o manifesto de cada pacote recebido e expandido.
Constrúa um sistme de pesquisa sofisticado, usando o SolR? ,para indexar uma colecção de manifestos (documentos XML)
Objectivos Específicos para a 2ª Fase:
PLN:
Construir um processador para páginas man do Unix/Linux. Considerar estes documentos definidos na própria notação do man, nmor formato pod (do perl) e em nrof. O processador deve extrair informação sobre o nome e pequen o resumo da ferramenta, noção de auotr, url e ainda sobre ferramentas relacionadas (secção "see also").
Para testar o processador desenvolvido os alunos devem usar todos os man do sistema operativo Linux. Como resultado devem produzir uma representação "pretty printed" da informação extraída de um ficheiro man.
EG/ATS:
Definir uma DSL (escrever a respectiva GIC) que permita:
descrever 1 ou mais pacotes de SW de acordo com os critérios definidos para o manifesto;
definir operações de Intersecção, União e Diferença entre manifestos de pacotes, dando um manifesto-resultado;
Usando uma GA, tomando por base a GIC anterior, e recorrendo ao AnTLR, implemente um procesador que leia um texto com descrições de pacotes e realize as operações indicadas. No fim deve gerar em XML o pacote-resultado por cada operação pedida.
PED:
Preparação conjunta de um artigo a submeter à XATA 2010.
Conjunto de Pacotes para a fase final do projecto:
No relatório final os alunos devem incluir uma secção com os resultados que obtém processando os 10 pacotes propostos a seguir.
Nessa secção devem incluir uma tabela com uma versão simplificada do manifesto produzido, que idealmente permitirá a um potencial programador ter toda a informação que precisa sobre esse pacote (o que faz, em que linguagem está escrito, qual a sua homepage, etc).
Devem ainda incluir nessa secção um comentário detalhado dos resultados obtidos.
Em relação a uma abordagem mais específica de uma dada comunidade de programadores, os alunos devem contactar o Prof. José João para verem como e que pacotes devem considerar.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Exploração de Ambientes de Trabalho usando os paradigmas explicitados nos items acima.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
monografias, com sinteses dos temas pesquisados;
trabalhos de implementação.
Bibliografia recomendada
Flemming Nielson, Hanne Riis Nielson, Chris Hankin, "Principles of Program Analysis. Springer, 452 pages, ISBN 3-540-65410-0, 2005.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
monografias, com sinteses dos temas pesquisados;
trabalhos de implementação.
Bibliografia recomendada
Flemming Nielson, Hanne Riis Nielson, Chris Hankin, "Principles of Program Analysis. Springer, 452 pages, ISBN 3-540-65410-0, 2005.
O paradigma da Programação baseada em Gramáticas (PG).
Conceitos sobre Gramáticas de Atributos (GA); definição formal.
Desenvolvimento modular/incremental de GAs (aproximação OO e AO).
Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para representar, armazenar e manipular eficientemente o Conhecimento com base em árvores de sintaxe ou grafos.
Capacidade para medir gramáticas e avaliar a sua qualidade.
1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber.
2. Conceitos sobre Gramáticas de Atributos (GA); definição formal; desenvolvimento de GAs (aproximação monolítica versus modular, incremental).
3. Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
3.1 Notações gramaticais;
3.2 Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
4. O paradigma da Programação baseada em Gramáticas (PG).
5. Qualidade de Linguagens; dimensões de avaliação e definição; critérios.
6. Qualidade de Gramáticas; dimensões de avaliação e definição; critérios.
6.1 Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
7. Ambientes para Manipulação de Gramáticas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para discutir a qualidade de Linguagens e Gramáticas,
Capacidade para medir Gramáticas e avaliar a sua qualidade.
Capacidade para desenvolver ambientes para Manipulação de Gramáticas.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992.
Waite & Carter, "An Introduction to Compiler Construction", HarperCollin? College Publishers, 1993.
James F. Power and Brian A. Malloy, "A metrics suite for grammar-based software". Journal of Software Maintenance and Evolution: Research and Practice, Vol 16, Nº 6, pp 405-426, 2004.
Julien Cervelley, Matej Crepin¨ek, Rémi Foraxy, Toma¸ Kosar, Marjan Mernik and Gilles Roussel, "On Defining Quality Based Grammar Metrics". Proceedings of the International Multiconference on Computer Science and Information Technology, pp. 651–658, 2009.
Tiago Alves and Joost Visser, "A Case Study in Grammar Engineering". Lecture Notes in Computer Science, Volume 5452/2009, pp 285-304, 2009.
John M. Roche, "Software metrics and measurement principles", SIGSOFT Softw. Eng. Notes, ACM, volume 19, number 1, 1994.
Tom Mens, Serge Demeyer, "Future trends in software evolution metrics", Proceedings of the 4th International Workshop on Principles of Software Evolution, ACM, 2001.
Norman Fenton, Martin Nail, "Software metrics: roadmap", Proceedings of the Conference on The Future of Software Engineering, ACM 2000.
1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber.
2. Conceitos sobre Gramáticas de Atributos (GA); definição formal; desenvolvimento de GAs (aproximação monolítica versus modular, incremental).
3. Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
3.1 Notações gramaticais;
3.2 Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
4. O paradigma da Programação baseada em Gramáticas (PG).
5. Qualidade de Linguagens; dimensões de avaliação e definição; critérios.
6. Qualidade de Gramáticas; dimensões de avaliação e definição; critérios.
6.1 Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
7. Ambientes para Manipulação de Gramáticas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para discutir a qualidade de Linguagens e Gramáticas,
Capacidade para medir Gramáticas e avaliar a sua qualidade.
Capacidade para desenvolver ambientes para Manipulação de Gramáticas.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992.
Waite & Carter, "An Introduction to Compiler Construction", HarperCollin? College Publishers, 1993.
James F. Power and Brian A. Malloy, "A metrics suite for grammar-based software". Journal of Software Maintenance and Evolution: Research and Practice, Vol 16, Nº 6, pp 405-426, 2004.
Julien Cervelley, Matej Crepin¨ek, Rémi Foraxy, Toma¸ Kosar, Marjan Mernik and Gilles Roussel, "On Defining Quality Based Grammar Metrics". Proceedings of the International Multiconference on Computer Science and Information Technology, pp. 651–658, 2009.
Tiago Alves and Joost Visser, "A Case Study in Grammar Engineering". Lecture Notes in Computer Science, Volume 5452/2009, pp 285-304, 2009.
John M. Roche, "Software metrics and measurement principles", SIGSOFT Softw. Eng. Notes, ACM, volume 19, number 1, 1994.
Tom Mens, Serge Demeyer, "Future trends in software evolution metrics", Proceedings of the 4th International Workshop on Principles of Software Evolution, ACM, 2001.
Norman Fenton, Martin Nail, "Software metrics: roadmap", Proceedings of the Conference on The Future of Software Engineering, ACM 2000.
I.1 Introdução e Motivação para a área de Análise e Transformação de SW; sua inserção no contexto da Engenharia de Software:
noção de análise de código-fonte (outras hipóteses para análise de código intermédio ou máquina);
avaliação do software analisado -- métricas;
transformação como meio para melhorar o software avaliado.
I.2 As quatro grandes componentes envolvidas na disciplina:
extracção de informação do código (fase de análise);
armazenamento da informação extraída;
visualização (paradigmas/exemplos);
transformação.
P.1 Resolução do Exemplo 1:
análise do enunciado; estudo da meta-gramática do AnTLR proposta.
09 de Março de 2009
I.3 Recapitulação dos objectivos da disciplina:
Revisão dos principais conceitos ligados à Análise de Código, tomando como motivação a Comprensão de Programas (necessária à sua Manutenção, Re-utilização e Certificação):
Extracção nao-invasiva, estática vs Extracção invasiva, dinâmica.
Resultados da Extração e da Exploração do Conhecimento (Métricas).
P.1 Resolução do Exemplo 1 (cont.):
análise do enunciado; estudo da meta-gramática do AnTLR proposta; inicio da implementação de um Analisador muito básico.
TPC: terminar a escrita da 1ªfase do graAl, sistema para Análise de Gramáticas.
16 de Março de 2009
I.4 Recapitulação dos objectivos da disciplina:
Revisão dos principais conceitos ligados à Análise de Código e à Comprensão de Programas, extrapolando agora as ideias para a Compreensão e Avaliação de Documentos Anotados em XML:
Apresentação do Sistema para Análise de Documentos eXVisXML; os conceitos de extração de informação, Visualização, Slicing e Métricas subjacentes; as funcionalidades implementadas.
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das duas abordagens mais avançadas, apresentadas:
pelo Hélder (para cálculo de várias Métricas, com base em atributos H/S, um para cada métrica);
pelo César (para desenho do Grafo de Dependências, com base na construção de uma Tabela de Identificadores que recolhe toda a informação extraída durante o parsing da gramática).
TPC1: terminar a escrita da fase de análise do graAl.
TPC2: responder às seguintes questões Q1 e Q2 sobre o eXVixXML (a apresentação está disponível aqui).
23 de Março de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das abordagens seguidas por alguns dos grupos.
apresentação e discussão do sistema genérico para análise de gramáticas a partir de XAGra em desenvolvimento por Sérgio e Hugo Areias.
TPC1: terminar a escrita da fase de análise do graAl.
TPC2: responder à seguinte questão Q1 e Q2 sobre o eXVixXML.
30 de Março de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das abordagens seguidas pelos vários grupos.
TPC1: terminar a escrita da fase de análise do graAl relativa às restantes métricas e pensar na transformação conducente à optimização da gramática
20 de Abril de 2009
A Aula desta semana foi totalmente dedicada a avançar com o Projecto Integrado (processamento da Linguagem dreqL com vista à geração de código SQL).
27 de Abril de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
conclusão da 1ªetape (construção da Tabela de Identificadores, do Grafo de Dependências entre Símbolos e das Métricas de Tamanho e Forma): avaliação do trabalho desenvolvido pelos vários grupos.
Introdução ao Slicing (Backward vs Forward, Estático vs Dinâmico); critério de Slicing.
Slicing de Gramáticas.
04 de Maiode 2009
P.1-f2 Exemplo 1 - fase2 -- extensão do Analisador de GramáticasgraAl para suportar o slicing de Gramáticas a partir de um dado símbolo:
discussão dos resultados atingidos pelos grupos para o caso de BW slicing (visualização em formato texto corrido e por coloração de caminhos sobre o Grafo de Dependências).
Slicing de Gramáticas com Atributos e suas regras de cálculo.
11 de Maio de 2009
Não houve aula devido às festividades do Enterro da Gata.
18 de Maio de 2009
Aula dada por JJ.
25 de Maio de 2009
P.1-f2 Exemplo 1 - fase2 -- extensão do Analisador de GramáticasgraAl para suportar o slicing de Gramáticas a partir de um dado símbolo:
discussão dos resultados atingidos pelos grupos para o caso de BW slicing (visualização em formato texto corrido e por coloração de caminhos sobre o Grafo de Dependências), no caso do FW slicing e do slicing de Gramáticas com Atributos e suas regras de cálculo.
proposta de nova extensão do graAl com a capacidade para transformar uma dada gramática eliminando produções inuteis e normalizando a recursividade.
Extensão do graAl com a capacidade para transformar uma dada gramática eliminando produções inuteis e normalizando a recursividade; discussão dos resultados atingidos pelos grupos que já implementaram tal funcionalidade.
Discussão sobre a data e o formato da avaliação
Construção de uma artigo colectivo (para enviar à CoRTA'2009) sobre o graAl.
Apresentação do Laboratório online GamaSlicer para verificação de componentes Java anotados em JML e realização de Slicing Semântico (specification-based, assertion-based e contract-based): arquitectura, discussão da abordagem e exemplificação.
Apresentação do sistema integrado para edição, análise, transformação e slicing de programas em C-- desenvolvido pelo aluno José Luis Freitas, usando a representação intermédia como uma hierarquia de classes discutida na aula anterior.
24 Maio de 2010
Apresentação do sistema genérico para análise, visualização e exploração de documentos anotados em XML, eXVisXML: arquitectura, discussão da abordagem e exemplificação.
Discussão da resolução do exercício prático da última aula backward slice de um programa em C--: representação intermédia como uma hierarquia de classes.
17 Maio de 2010
Apresentação do sistema genérico para visualização e animação de programas, Alma: arquitectura, discussão da abordagem e demonstração.
Proposta de exercício prático: backward slice de um programa em C--
Formulação de um exemplo:
Em relação ao programa C-- abaixo
0 void fun() {
1 int a, b, flag;
2 float res;
3 scanf("%d",&flag);
4 scanf("%d %d",&a,&b);
5 if (flag)
6 { res = a/2; }
7 else
8 { res = b/2; }
9 printf("%f",res);
10 printf("%f",res++)
}
Faço o slice em relação aos critérios:
SC1: ( i8, {b} )
SC2: ( i8, {res} )
SC3: ( i9, {res} )
SC4: ( i10,{res} )
03 Maio de 2010
Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 3ªfase.
26 de Abril de 2010
Introdução formal ao Slicing:
o conceito de Slicing Estático clássico, Backward e Forward.
Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
System Dependence Graph (SDG) --- construção de exemplos
19 de Abril de 2010
Introdução informal ao Slicing:
o papel do Slicing na Análise de Programas -- como instrumento de debug; como instrumento de cálculo incremental.
Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
Control Flow Graph (CFG); construção de um exemplo.
Program Dependence Graph (PDG); construção de um exemplo.
System Dependence Graph (SDG).
12 de Abril de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
FermaT: pelos alunos André Santos e Miguel Regedor --- PDF.
Discussão (à laia de balanço dos trabalhos práticos e estudos anteriores) em torno dos requisitos desejáveis para uma Ferramentas de Transformação de Programas (FTP, ou PTT) tendo sido identificados os seguintes:
Existem duas abordagens possíveis que podem ser integradas no mesmo ambiente de transformação:
1 - Filtro de texto para pequenas transformações dirigidas ao padrão. Neste caso era importante poder integrar a definição de gramaticas incompletas (fuzzy?) no filtro, tipo:
X -> ... (Decls) ...
2 - Processador de linguagens com a definição da gramática da linguagem do programa que se tenciona transformar. Neste caso, a transformação poderá ocorrer caso a regra seja verificada sintacticamente e também semanticamente (a pensar) e deve ser especificada na forma:
Padrão(regra) -> Acção
Deve haver a possibilidade de integrar transformações pre-definidas (standard?); por exemplo:
substituição sistemática de palavras-chave;
troca de ordem de sub-árvores.
15 de Março de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
DMS: pelos alunos André Santos e Miguel Regedor --- PDF.
Distribuição de novas tarefas pelos 4 grupos, na sequência das apresentações feitas; desenvolvimento de uma solução para a transformação de C-- nas 3 primeiras ferramentas e procura de uma alternativa para o último caso.
Resolução de exercícios:
Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos alunos José Luis Freitas (inserção na escrita) e Daniel Rocha (inserção na árvore).
08 de Março de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
Stratego/XT pelos alunos Jorge Mendes e Daniel Rocha --- PDF.
01 de Março de 2010
Resolução de exercícios:
Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos: definição clara dos objectivos a atingir com este estudo (comparação de "filosofias" de trabalho e de capacidades oferecidas); discussão da possibilidade de esrita de um artigo conjunto sobre esta temática, para submissão ao CoRTA2010.
22 de Fevereiro de 2010
Resolução de exercícios:
Ficha II -- o 2ª requisito: detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos:
Jorge + Daniel: Stratego
José Luís + Hélder: TXL
André + Miguel: DMS
André + Márcio: Meta-Environment/Rascal
25 de Janeiro de 2010
Cont. da Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas": discussão de tipos de transformação; ferramentas.
Introdução à novidade do AnTLR para transformação de programas por Tree Pattern Matching: conceito básico e exemplo.
18 de Janeiro de 2010
Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas".
Discussão de tipos de transformação:
Translation: nesta categoria incluem-se os seguintes processos - program synthesis, program migration, reverse engineering e program analysis.
Rephrasing: nesta categoria incluem-se os seguintes processos - Program Normalization, Program Optimization, Program Refactoring, Program Reflection e Software Renovation.
Discussão dos paradigmas introduzidos pelos alunos Márcio Coelho e André Rocha:
Mesmo input, diferentes outputs;
Diferentes inputs, mesmo outputs;
Mesmo input, mesmo outputs;
Diferentes inputs, diferentes outputs.
11 de Janeiro de 2010
Continuação da Resolução da Ficha da aula anterior.
04 de Janeiro de 2010
Resolução de exercícios:
Ficha II -- continuação da discussão sobre o 1ª requisito: implementação em AnTLR da construção de uma Tabela de Identificadores para a linguagem C--; análise e discussão das propostas apresentadas por todos os grupos que, de uma forma geral:
implementaram a TabId como uma HashMap em Java indexado por uma chave dupla formada pelo Id e pelo seu Scope, recorrendo a um VectorArray para guardar os respectivos atributos;
usaram uma Tree-Grammar (GA Abstracta);
recorreram a atributos herdados para fazer descer na árvore a TabId actual e o Scope;
recorreram a atributos sintetizados para trazer para a raiz da árvore a nova TabId e as características de cada identificador (de variável, de parâmetro, ou de função) encontrado.
Para continuar a resolver a Ficha II (transformação do código fonte, para reorganizar declarações de variáveis face ao seu uso), foi apreentada a nova, muito recente, funcionalidade do AntLR (3ª estratégia disponível) que permite implementar a transformação usando Tree-Patterns.
14 de Dezembro de 2009
Resolução de exercícios:
Ficha II -- continuação da discussão sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, possíveis implementações deste mapping em Java; implementação em AnTLR, possíveis estratégias clássicas (usando apenas 1 GA concreta, ou usando uma Tree-Grammar abstracta com atributos).
07 de Dezembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; sistematização das diferentes abordagens possíveis (cálculo durante o parsing e cálculo em fase posterior, sobre a AST).
Resolução de exercícios:
Ficha II -- discussão muito profunda e detalhada sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, conceito, atributos a armazenar e estrutura; aproximação conceptual/abstracta e estratégia de implementação em AnTLR.
30 de Novembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; implementação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
Resolução de exercícios:
Ficha I -- Discussão/comparação das soluções já desenvolvidas por alguns dos alunos e continuação do trabalho nesse problema.
Ficha II -- apresentação do enunciado.
23 de Novembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; implentação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
Resolução de exercícios:
Ficha I: Conversão de um programa de SQL1 (sem UPDATES) para SQL2 (substituindo sequências de REMOVE/INSERT na mesma chaves por UPDATE).
16 de Novembro de 2009
Classificação das Gramáticas de Atributos e sua relação com o cálculo---*PureS, LAG, OAG*; o impacto das classes no Grafo de Dependências Global e o problema da determinação de uma ordem topológica (e total); as classes e os Geradores de Compiladores (Calculadores de Atributos); manuseamento de gramáticas OAG em AntLR -- as TreeGrammars.
Resolução de exercícios sobre gramáticas de atributos em AnTLR:
Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai (conclusão deste exerc+icio da aula anterior).
Processar uma Declaração de Variáveis em Pascal (lista de identificadores seguidos do seu tipo) inserindo na Tabela de Identificadores os pares (IdVar? ,IdTipo).
9 de Novembro de 2009
Resolução de exercícios sobre gramáticas de atributos em AnTLR:
Processar uma lista de items (números inteiros ou palavras) e calcular a soma dos números encontrados na respectiva lista. Porém o somatório só deve iniciar-se após surgir a 1ª ocorrência da palavra "agora"; a resolução em AnTLR deste exercício pode ser encontrada aqui: (listaAgora.g). No fim da aula foi proposta, como trabalho para casa, uma alteração a este exercício em que a palavra "agora" actuasse como "toggle", i. é, começa a adicionar quando aparece a palavra "agora" e deixa de adicionar quando chega ao fim ou aparece de novo a palavra "agora" e assim sucessivamente para as próximas corrências dessa palavra.
Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai. Para cada um dos filhos na lista, gerar uma instrução SQL para adionar a uma base de dados um registo para o filho compondo o seu nome próprio com o apelido do pai seguido do apelido da mãe (à espanhola).
2 de Novembro de 2009
Introdução à construção de Árvores de Sintaxe Abstractas (AST, Abstract Syntax Tree) em ANTLR. Construção da gramática em AnTLR com ouput AST para o exemplo da aula anterior: (declarations.g)
Introdução à utilização de Tree Grammars em AnTLR. Introdução dos operadores ->, ^ e !
Construção da respectiva Tree Grammar para o exemplo anterior: (declarationsAST.g)
Introdução de atributos, na Tree Grammar, para cálculo da Tabela de Identificadores.
26 de Outubro de 2009
Resolução das alínea f1-4) do Exercício 2 com recurso às Gramáticas de Atributos.
Discussão com os alunos das diferenças em relação às Gramáticas Tradutoras.
19 de Outubro de 2009
Resolução da alínea f1,2) do Exercício 2 ( a alínea f3) ficou como trabalho de casa e f4) será desenvolvida na próxima aula):
criação de uma Gramática Tradutora, juntando Acções Semânticas (com um ou mais atributos sintetisados associados ao LHS) à GIC optimizada escrita pelo Daniel (ver aqui GICexe2) para calcular e imprimir diversos resultados que se podem extrair de frases concretas da linguagem-fonte;
exploração de todas as facetas do ambiente AnTLR-Works.
12 de Outubro de 2009
Resolução do Exercício 1 (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
I.1 Introdução e Motivação para a área de Análise e Transformação de SW.
11 de Outubro de 2010
Resolução do Exercício 1 sobre Gramáticas, GIC e GT (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
18 de Outubro de 2010
Continução da Resolução do Exercício 1 sobre Gramáticas, GIC e GT (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
25 de Outubro de 2010
Continução da Resolução do Exercício 1 sobre Gramáticas, agora para introdução às GA e à ferramenta Silver (enunciado descrito nas Fichas Práticas de Engenharia Gramatical; e conteúdo da aula descrito no Módulo de EG (sumários)).
08 de Novembro de 2010
Resolução do Exercício 2 sobre Gramáticas, para introdução às GA e à ferramenta Silver (enunciado descrito nas Fichas Práticas de Engenharia Gramatical; e conteúdo da aula descrito no Módulo de EG (sumários)).
15 de Outubro de 2010
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver, agora com um novo exemplo da calculadora de expressões "dc -- desktop calculator languag" (conteúdo da aula descrito no Módulo de EG (sumários)).
22 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis? , Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JGR, a compensar ainda em dezembro).
29 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis? , Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JGR, a compensar ainda em dezembro).
06 de Dezembro de 2010
Resolução do Exercício 3 sobre Linguagens e Gramáticas, para sedimentar os conhecimentos já introduzidos sobre GAs. Análise da estrutura fisica de uma factura para escolha dos simbolos não-terminais e terminais e dos atributos que permitam descrever o processamento que traduza a semântica desejada; construção das variantes linguisticas pedidas por extensão ou adaptação da gramática; definição das regras para cálculo dos atributos sintetizados.
Continuação da discussão sobre ferramentas para geração de processadores de linguaguens como o sistema Silver, o LISA ou o AnTLR --- a linguagem de programação para escrita das regras de cálculo dos atributos: escolha entre uma linguagem própria e específica ou uma GPL (General Purpose Language), vantagens e inconvenientes.
13 de Dezembro de 2010
Introdução à ferramenta para geração de processadores de linguaguens AnTLR --- filosofia geral, alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Utilização do Exercício 2 sobre Linguagens e Gramáticas (a linguagem Lisp e as SExpressions), para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
03 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) --- alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Utilização do Exercício 3 sobre Facturas para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
10 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) --- alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Desenvolvimento de um compilador para uma linguagem de cálculo de expressões, para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
17 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) e ao ambiente de desenvolvimento AnTLRWorks; sedimentação dos conhecimentos já introduzidos sobre GAs.
Cont. do Desenvolvimento de um compilador para uma linguagem de cálculo de expressões: escolha dos atributos herdados e sintetizados para análise semântica estática---construção da TabId por recolha dos pares <identificador,tipo>; verificação de re-declarações; type-checking .
**2º SEMESTRE***
21 de Fevereiro de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks.
Sedimentação dos conhecimentos já introduzidos sobre GAs e introdução aos exercícios sobre Análise de Programas---enunciado do problema para as próximas aulas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR.
Cont. do Desenvolvimento de um compilador para uma linguagem de cálculo de expressões: escolha dos atributos herdados e sintetizados para análise semântica estática---construção da TabId por recolha dos pares <identificador,tipo>; verificação de re-declarações; type-checking .
28 de Fevereiro de 2011
Apresentação teórico-prática do trabalho de mestrado do Hugo Areias: retargetting da ferramenta AnTLR de modo a gerar Processadores de Linguagens em Perl --- o problema, a estratégia (ou o caminho) seguido, os resultados atingidos.
Discussão da forma como usar Perl para se comportar como o Java (a run-time Library).
07 de Março de 2011
Não houve aula --- 2ªf de Entrudo.
14 de Março de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks.
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR.
21 de Março de 2011
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR (cont. do projeto).
28 de Março de 2011
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto).
04 de Abril de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks: introdução aos construtores para criar árvores de sintaxe abstrata com atributos (AST) e para sua manipulação; filosofia de trabalho usando o par "grammar / tree-grammar".
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto).
11 de Abril de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos).
a noção de Bloco e do Nível de aninhamento; o âmbito de validade das declarações (scope) e as regras de visibilidade.
18 de Abril de 2011
Não houve aula --- férias de Páscoa.
25 de Abril de 2011
Não houve aula --- feriado nacional comemorativo da Revolução dos Cravos.
02 de Maio de 2011
Aula usada para apresentação e avaliação parcial do Projeto Integrado (PI) -- 3ª fase (apresentação teórica).
09 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos) --- exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por alguns dos grupos.
16 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos) --- exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por alguns dos grupos.
23 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por cada grupo.
Manhã totalmente dedicada ao projeto integrado (PI).
06 de Junho de 2011
Manhã parcialmente dedicada ao fecho de EG e ao projeto integrado (PI).
13 de Junho de 2011
Fecho da Disciplina, Balanço final:
Análise, Representação Intermédia (tabela de identificadores, árvore de sintaxe (decorada com atributos), grafos de fluxo e de dependências), Estratégias de Travessia e Transformações.
Análise Estática versus Análise Dinâmica; Instrumentação de Código e Inspétores.
Slicing: conceito e definição; estático versus dinâmico; sintático versus semântico; aplicações tradicionais e novas aplicações (verificação de programas anotados com contratos); Slicing de código fonte e de código intermédio e slicing de outras linguagens; slicing de documentos XML.
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.
Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Apresentação da Ferramenta para geração de compiladores (que será usada ao longo de todo o ano) AnTLR e do ambiente de desenvolvimento associado AnTLRWorks usando o Exemplo 1.
06 de Outubro de 2008
Discussão das respostas enviadas pelos alunos às questões Q1 e Q2.
Continuação da exploração do Gerador AnTLR usando como base o Exemplo 1: análise do código Java gerado; o algoritmo de parsing com backtracking e sem backtracking mas com o valor de K (para o cálculo do comprimento do LookAhead) explicitado.
Conclusão da resolução em AnTLR do Exemplo 1, recorrendo agora a um atributo sintetizado para calcular o comprimento da Lista; teste da solução, quer com a forma recursiva não LL(1), em BNF-puro, da gramática, quer com a versão iterativa, em BNF-extendido; incremento da solução com um novo atributo para cálculo da soma dos valores da lista (os atributos intrínsecos dos Terminais "text", "line" e "column").
Gramática Recursiva não-LL(1) (BNF-puro)
Lista --> "[" Nums "]"
Nums --> int
| int',' Nums
Gramática Iterativa (BNF-extendido) --- com resolução em ANTLR
options { k=2; }
lista : '[' nums ']' {
System.out.println("Soma: " + $nums.soma);
System.out.println("Contador: " + $nums.conta);
}
;
nums returns [int soma, int conta=0]
: a = INT {
$soma = Integer.parseInt($a.text);
$conta++;
}
(',' b = INT { $soma += Integer.parseInt($b.text);
$conta++;
}
)*
;
INT : ('+' | '-')? ('0'..'9')+
;
WS : (' ' | '\t' | '\n' | '\r') { channel=HIDDEN; };
Inicio da resolução do Exemplo 2: construção de um parser para a gramática da linguagem Lisp (versão iterativa em BNF-extendido).
Gramática Recursiva LL(1) (BNF-puro)
Lisp --> SExp
SExp --> num
| pal
| "(" SExplist ")"
SExplist --> SExp SExplist
| &
Gramática Iterativa (BNF-extendido)
Lisp --> SExp;
SExp --> num
| pal
| "(" SExp* ")"
13 de Outubro de 2008
Análise das respostas dadas pelos alunos às questões Q3 e Q4; discussão detalhada sobre os conceitos básicos do parsing Top-Down: condição (de não-ambiguidade) LL(1); Algoritmo Recursivo-Descendente (RD) e Algorimto guiado-por-tabela (iterativo e genérico) LL(1).
Continuação da resolução do Exemplo 2:
definição dos atributos para resolver a primeira questão: calcular a quantidade de números e palavras da lista
definição dos atributos para resolver a segunda questão: construir uma lista plana (todos os elementos ao mesmo nível) com os elementos originais associados ao nível a que aparecem.
20 de Outubro de 2008
Análise das respostas dadas pelos alunos à questão Q5 e discussão muito detalhada da solução: sistematização do processo de definição de regras de cálculo em produções iterativas.
Continuação da resolução do Exemplo 2:
definição dos atributos e condições de contexto para validar a semântica estática da linguagem (neste exemplo, verificar que todos os elementos são do tipo do primeiro elemento da lista); discussão de alternativas para construir os atributos relevantes e para colocar as condições de contexto, mais acima ou mais abaixo na árvore), como se vê nos exemplos seguintes.
inicio da geração de código
Como funciona, mas não se deve fazer:
grammar LispCheckFirstBad;
/*
verificar que todos os elementos da lista sejam do mesmo tipo do 1.elemento
*/
@header {
import java.util.ArrayList;
}
lisp returns[ArrayList<String> array_out]
@init{ ArrayList<String> array_in = new ArrayList<String>(); }
: sExp[array_in] { String a = $sExp.array_out.get(0);
if (a.equals("int") && $sExp.array_out.contains("pal")) {
System.out.println("FALSE");
}
else if (a.equals("pal") &&
$sExp.array_out.contains("int")) {
System.out.println("FALSE");
}
else {
System.out.println("TRUE: " + a);
}
}
;
sExp[ArrayList<String> array_in] returns [ArrayList<String> array_out]
: INT { $array_in.add("int"); $array_out = $array_in;}
| PAL { $array_in.add("pal"); $array_out = $array_in; }
| '('
( vez_anterior = sExp[array_in] {
$array_in = $vez_anterior.array_out; } )*
')' { $array_out = $array_in; }
;
Como funciona e se deve fazer para ficar uma solução elegante e eficiente:
grammar LispCheckFirstGood;
/*
verificar que todos os elementos da lista sejam do mesmo tipo do
primeiro elemento
*/
lisp returns[String type_out]
@init{ String type_in = new String(""); }
: sExp[type_in] { System.out.println($sExp.type_out); }
;
sExp[String type_in] returns [String type_out]
: INT { if ($type_in.equals("pal") ||
$type_in.equals("FALSE: pal")) {
$type_in = "FALSE: pal";
}
else {
$type_in = "int";
}
$type_out = $type_in;
}
| PAL { if ($type_in.equals("int") ||
$type_in.equals("FALSE: int")) {
$type_in = "FALSE: int";
}
else {
$type_in = "pal";
}
$type_out = $type_in;
}
| '('
( vez_anterior = sExp[type_in] {
$type_in = $vez_anterior.type_out; } )*
')' { $type_out = $type_in; }
;
27 de Outubro de 2008
Análise das respostas dadas pelos alunos à questão Q6; discussão detalhada sobre os conceitos básicos da gramática de atributos, distinguindo a dispersão (propagação) de valores pela árvore abaixo (para transmissão de informação contextual de pai para filhos, ou entre irmãos) da síntese do significado da frase (inferindo informação semântica a partir dos valores extraídos da frase através das folhas da árvore de derivação); Reflexão alongada sobre todo o processo de cálculo de atributos, o que levou à formulação das questões Q7 a Q9.
Utilização de Literate Programming (LitPrg) na resolução das Fichas Práticas para produção do respectivo relatório (que constituirá o objecto de avaliação neste módulo de EG); apresentação do conceito e do princípio de desenvolvimento subjacente; referência a algumas ferramentas de LitPrg e introdução ao Nuweb; formulação da Q10.
Conclusão da resolução do Exemplo 2:
definição dos atributos para resolver a última questão, gerar código post-fix para representar um programa Lisp, discussão de alternativas e implementação do processo de tradução.
Introdução ao Exemplo 3: processamento de linguagens através da construção explícita e travessias da Árvore de Sintaxe Abstracta (AST)
apresentação das facilidades do AnTLR para construção de uma AST durante o parsing.
03 de Novembro de 2008
Análise das respostas dadas pelos alunos à questão Q7 a Q10: continuação da discussão sobre cálculo de atributos (inferência de uma ordem parcial, sua totalização para o cálculo sequencial e detecção da independência para o cálculo concorrente); questões práticas associadas à utilização de programas gerados automaticamente; distinção clara entre escrever um documento que expões um problema e discute a sua resolução através do desenvolvimento de um programa (Literate Programming) próprio do acto de escrever um programa e o comentar detalhadamente (incluindo alguma meta-informação nos comentários, como é o caso do JavaDoc).
Processamento de Linguagens através da construção explícita de uma Árvore de Sintaxe Abstracta (AST) e suas travessias
Continuação do estudo das facilidades do AnTLR para construção de uma AST durante o parsing -- ilustração através da aplicação de vários operadores ao Exemplo 2 (Linguagem Lisp).
Exploração da facilidade anterior para fazer o slicing sintático da Árvore de Derivação ('Parsing Tree') concreta e completa do texto-fonte.
Introdução às Tree-Grammars para definir Travessias à AST que a processam -- construção de Sistemas de Produção (sistena de regras Condição-Reacção, por pattern-matching nos nodos da árvore) para transformação do texto-fonte.
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo.
Sistematização da utilização de Gramáticas Tradutoras (GT) vs Gramáticas de Atributos (GA); cálculo de atributos on-the-fly (durante o parsing) e cálculo a-posteriori através de travessias à árvore. Ainda na utilização de GAs, discussão da utilização da Tradução Dirigida pela Semântica conjugada com a construção da Árvore de sintaxe abstracta.
Discussão sobre a forma de construir um relatório. Cada relatório deverá ser composto por:
Introdução
Problema a resolver e Objectivos
Análise
Concepção da Solução
Implementação
Conclusão
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
17 de Novembro de 2008
Discussão breve (a propósito da Q11) do Tratamento de Erros num Compilador. Referência a cada uma das fases:
Detecção (implícita nos algorítmos de cada uma das 3 etapes de Análise;
Sinalização do erro: localização, diagnóstico e terapia;
Correcção (os modelos formais de correcção) e Recuperação (Ponto-de-Recomeço e Terminais-Fidedignos).
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
Linguagens Visuais, VisualLISA:
Exemplificação dos Editores/compiladores gerados automaticamente com o Devil: VisualTopicMaps e VisualDRAW;
Apresentação e Testes com a Linguagem Visual para especificação de Gramáticas de Atributos, VisualLISA;
Resposta a um inquérito sobre a "usabilidade" deste editor.
24 de Novembro de 2008
A propósito da Q12, continuação da discussão mais aprofundada sobre Tratamento de Erros no Processamento de Linguagens e mais específicamente num Compilador:
ainda, Correcção versus Recuperação.
referência a Editor Sensível ao Contexto e Editor Guiado pela Sintaxe.
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
Linguagens Visuais, VisualLISA:
Definição de Linguagem Visual e Gramática Visual; exemplo da gramática da VisualLISA? em notação PLG (Picture Layout Grammar).
Breve introdução ao sistema gerador de Editores/Reconhecedores de Linguagens Visuais, DEVIL (Development Environment for Visual Languages), baseado no Eli e no gerador de compiladores para gramática de atributos LIGA.
Apresentação da especificação completa da Linguagem VisualLIGA incluindo a sintaxe, semântica estática, geração de código e o editor.
15 de Dezembro de 2008
A propósito da Q14, Q15 e Q16 continuação da discussão aprofundada sobre Tratamento de Erros no Processamento de Linguagens (mais específicamente num Compilador), bem como sobre Edição Assistida:
erros de run-time (versus erros em compile-time).
discussão do binómio Editor Sensível ao Contexto e Editor Guiado pela Sintaxe.
Introdução à Qualidade de Linguagens (QL) e Qualidadade de Gramáticas (QG); Métricas:
Discussão sobre critérios para Avaliar a QG e a QL.
Critérios apresentados para avaliar a QG:
Legibilidade da gramática (identificadores, documentação, meta-linguagem),
como formalismo que descreve uma linguagem,
como especificação de um processador;
Características da linguagem gerada pela gramática
Portabilidade da gramática (nas 2 perspectivas acima);
Adaptabilidade (para Evolução da Linguagem);
Eficiência como suporte à Geração Automática dum Processador para a respectiva Linguagem (tempo+memória);
Eficiência do Reconhecedor (Processador) gerado com base nessa gramática(tempo+memória).
Critérios apresentados para avaliar a QL:
Legibilidade dos textos (programas) escritos nessa linguagem;
Expressividade;
Abstracção;
Consistência;
Unicidade;
Documentação;
Extensibilidade / Adaptabilidade;
Escalabilidade.
Métricas de Tamanho relativas à gramática:
Numero de Terminais (#T)
Numero de Não-Terminais (#NT)
Numero de Produções (#P)
Numero de Produções Inuteis (#PI)
Numero Médio de Alternativas para um NT ($Alt-med)
Comprimento Médio do RHS de cada Produção ($RHS-med)
05 de Janeiro de 2009
Dado faltar um grande número de alunos, não foram discutidas as últimas questões Q17 e Q18.
Para colmatar a discussão sobre o tratamento de erros (recuperação) e preparar as métricas relativas à qualidade das gramáticas, foi feita uma introdução muito sucinta ao conceito de Autómato Determinista de Parsing LR(0) e ao processo de construção:
exemplo apresentado: Aut-LR(0) da linguagem Lisp (Exemplo 2);
exemplo proposto para fazer para a próxima aula (ver Q19).
Introdução à Qualidade de Linguagens (QL) e Qualidadade de Gramáticas (QG); Métricas:
Métricas de Tamanho ao Parser:
Numero de Funções do Parser RD (#NT+#T)
Dimensão da Tabela de Parsing LL(1) (#NT*(#T+1))
Dimensão da Tabela de Parsing LR(0) (#Q*(#T+1) + #Q*#NT)
Métricas de Forma:
Forma de Recursividade (Directa, Indirecta, Mista)
Tipo de Recursividade (Esq, Dir, Dir-LL, Mista, Implicita)
Notação (BNF, exBNF, Mista)
Factor de Coesão -- Dependência entre Símbolos (FanOut? / FanIn? )
12 de Janeiro de 2009
Construção do Autómato Determinista de Parsing LR(0) para a gramática do Exercício 4.
Cálculo das métricas de tamanho para duas variantes da gramática Lisp (Lispv1.g e Lispv2.g) anteriomente apresentadas na aula (BNF/EBNF).
Estudo do impacto de cada uma das variantes quanto à legibilidade de G como geradora de L e quanto à legibilidade em termos de manutenção. Relativamente às duas versões da gramática do Lisp apresentadas, os alunos concordaram que a 2ª versão era mais legível e mais fácil de manter do que a 1ª.
Preparação de um artigo a submeter ao CoRTA2010: discussão dos contributos dos 4 grupos em termos de funcionalidades (visualização incluida, ou não) e da arquitectura;
Próxima tarefa: desenvolver a secção especific distribuida a cada grupo.
24 Maio de 2010
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: discussão dos contributos dos 4 grupos, definição dos objectivos do artigo e da sua estrutura (secções e seu conteúdo) e escrita do Abstract;
Próxima tarefa: definir e enviar proposta de arquitectura.
17 Maio de 2010
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: foi decidido que cada grupo enviaria por email um Abstract completo em inglês até 5ªf à noite para ser depois feita a fusão (PRH+DCC).
Introdução às Métricas para Gramáticas de Atributos
Métricas de Tamanho:
(MTA1) #A = #AS + #AH
(MTA2) #RC (regras de cálculo)
(MTA3) #CC (condições de contexto)
(MTA4) #RT (regras de tradução)
(MCA1) FanIN (valor médio considerando os GDLocais a todos as p em P)
(MCA2) FanOUT (valor médio considerando os GDLocais a todos as p em P)
Revisão dos elementos já disponíveis para avaliação dos alunos a este módulo.
Revisão dos Critérios para avaliar a qualidade das gramáticas, GIC e GA: usabilidade (em termos de leitura, derivação de frases e manutenção); e eficiência (em termos reconhecedor/processor gerado, e geração) e métricas; Discussão da relação das métricas obtidas com a qualidade da linguagem.
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: definição do título, abstratct e estrutura (LaTeX distribuido por email para todos os alunos).
26 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
André Rocha e Márcio Gomes
19 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
Daniel Rocha e Jorge Mendes
12 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
André Santos e Miguel Regedor
José Luis Freitas e Helder Silva
15 Março de 2010
Cálculo das métricas para a gramática do Exemplo 5 :
Original
GIC5T1
GIC5T2
#T
14
14
14
#NT
12
7
14
#P
17
9
19
#PU
5
0
5
#R
3
0
3
$RHS
38/17=2.24
27/9=3
40/19=2.11
$ALT
17/12=1.42
9/7= 1.29
19/14=1.36
#Modulos
1
1
1
Fan-in
Fan-out
#RD
12+1=13
7 +1 = 8
14+1=15
#TabLL1
12*14=168
7*14= 98
14*14= 196
F1
3+0
0+0
3+0
F2
2+1+0
0+0+0
2+1+0
F3
3+0
0+3
3+0
L1
8E + 4NE em NT, 3E + 0 NE em Tv
5E + 2NE em NT, 3E + 0 NE em Tv
10E + 4NE em NT, 3E + 0 NE em Tv
L2
11E+0NE em PR+Sinais
...
...
L3
0F + 2I
...
...
L4
1 +0+0
...
...
GIC5T1 (GIC5 sem produções unitárias e usando exBNF)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> InvPs (';' InvPs)*
p3: InvPs --> id LstIds
p4: LstIds --> id (',' id)*
p5: Projs --> (Proj '.')+
p6: Proj --> id str FINANC Entidad num INIC num FIM num
p7: Entidad --> FCT
p8: | GRICES
p9: | ADI
GIC5T2 (GIC com a produção p10 modificada para ficra mais curta)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> InvPs
p3: | Lst ';' InvPs
p4: InvPs --> SglInv LstIds
p5: SglInv --> id
p6: LstIds --> SglProj
p7: | SglProj ',' LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> SglProj Desc Financiament Period
p11: Financiament --> FINANC Entidad Valor
p12: Period --> INIC Ano FIM Ano
p13: SglProj --> id
p14: Desc --> str
p15: Entidad --> FCT
p16: | GRICES
p17: | ADI
p18: Ano --> num
p19: Valor --> num
GIC5T3 (GIC5 permitindo incluir a lista de todos os Membros do projecto)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> InvPs
p3: | Lst ';' InvPs
p4: InvPs --> SglInv LstIds
p5: SglInv --> id
p6: LstIds --> SglProj
p7: | SglProj ',' LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> SglProj Desc FINANC Entidad Valor INIC Ano FIM Ano MEMBROS Membros
p11: Membros --> SglInv
p12: | SglInv ',' Membros
p13: SglProj --> id
p14: Desc --> str
p15: Entidad --> FCT
p16: | GRICES
p17: | ADI
p18: Ano --> num
p19: Valor --> num
8 Março de 2010
Cálculo das métricas para a gramática do Exemplo 5:
Projectos
#T
14
#NT
12
#P
17
#PU
5
#R
3
$RHS
38/17=2.24
$ALT
17/12=1.42
#Modulos
1
Fan-in
Fan-out
#RD
12+1=13
#TabLL1
12*14=168
F1
3+0
F2
2+1+0
F3
3+0
L1
8E + 4NE em NT, 3E + 0 NE em Tv
L2
11E+0NE em PR+Sinais
L3
0F + 2I
L4
1 +0+0
1 Março de 2010
Introdução às métricas de forma:
Forma da recursividade (F1):
Recursividade Directa: X -> α X ou X -> X α
Recursividade Indirecta: X -> α Y β e Y -> γ X
Recursividade Mista
Tipo de recursividade (F2):
Recursividade Esquerda: X -> X α
Recursividade Direita: X -> α X
Recursividade Direita-LL: X -> α Y e Y -> ε | α Y
Recursividade Mista
Notação (F3):
BNF
EBNF
Misto
Introdução às métricas lexicográficas
Identificadores dos Terminais (T) e Não-Terminais (NT) esclarecedores (L1)
Palavras-Peservadas (PR) e Sinais esclarecedores (L2)
Identificadores + Literais da Linguagem Flexíveis (L3)
Possibilidade de inserir comentários (L4)
Comentários inline
Comentários blocos
Comentários mistos
Cálculo de Métricas de Forma e Lexicográficas para estudo comparativo de gramáticas:
métricas para a Gramática Black, GBla (EG -- Exemplo 1);
métricas para a versão original (v0) da Gramática Biblioteca, GBib (EG -- Exemplo 2).
Black
Biblioteca (v0)
F1
0+0
2+0+0
F2
0+0+0
2+0+0
F3
0+3
2+0
L1
NT: 8E(1) + 2NE(2), T: 2E + 0NE
NT: 19E + 1NE (DataDev), T: 3E + 0NE
L2
PR(3): 25E + 0NE, Sinais: 5E + 0NE
12E + 0NE, Sinais: 6E + 0NE
L3
2
NA
L4
NA(4)
NA
(1) Esclarecedores
(2) Não Esclarecedores
(3) Palavras-Reservadas
(4) Não aplicável
22 Fevereiro de 2010
Cálculo de métricas para estudo comparativo de gramáticas:
métricas para a versão original (v0) da Gramática Biblioteca (2ª coluna da Tabela da aula anterior).
métricas para a versão v1 da Gramática Biblioteca, após remoção das produções unitárias.
métricas para a versão v2 da Gramática Biblioteca, após alteração para gramática LL(1).
métricas para a versão v3 da Gramática Biblioteca, após alteração para uso de notação ex-BNF.
métricas para a versão v4 da Gramática Biblioteca, alterada de modo a permitir que cada livro tenha mais de um Autor.
Conclusão: deixando de lado v4 que altera a Linguagem original, é interessante notar que a gramática menos clara (mais dificl de aprender e manter) é a v1, a qual conduz ao Reconhecedor menor e pt mais eficiente; quanto às outras três (v0, v2 e v3) são muito semelhantes, sendo a versão LL(1) a maior e tv por isso menos "ágil" e a versão ex-BNF um pouco menor e consequentemente mais fácil de usar. Curiosamente, a versão v4 estende a Linguagem original, mantendo uns indicadores de qualidade muito semelhantes aos das suas antecessoras (v0, v2 e v3).
(v0)
(v1)
(v2)
(v3)
(v4)
#T
18+3=21
21
21
21
21
#NT
20
11
22
20
21
#P
28
19
30
26
30
#PU
9
0
9
9
9
#R
2
2
2
0
3
$RHS
55/28=1.96
46/19 = 2.42
58/30 = 1.93
56/26=2.15
57/30=1,9
$ALT
28/20=1.4
19/11 = 1.73
30/22 = 1.36
26/20=1.3
30/21=1.43
#Modulos
1
1
1
1
1
#RD
20+21=41 ou 20+1=21
11+1=12
22+1
20+1
21+1
#TabLL1
(20+21)*21 ou 20*21=420
11*21 = 231
22*21=462
20*21=420
21*21=441
Gramática da v4
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> Referencia Tipo Titulo '(' Autores ')'
Editora Ano Catalogo
...........
p28: Autores --> Autor
p29: | Autores ',' Autor
Gramática da v3
p0: Biblioteca --> Registos
p1: Registos --> Registo (',' Registo)*
p2: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p3: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
p4: Referencia --> id
p5: Tipo --> LIVRO
p6: | CDROM
p7: | OUTRO
p8: Titulo --> string
p9: Autor --> string
p10: Editora --> string
p11: Ano --> num
p12: Catalogo --> BGUM
p13: | ALFA
p14: | OUTRO
p15: Existencias --> LOCAL Local '(' Estados ')'
p16: Local --> string
p17: Estados --> Estado (',' Estado)*
p18: Estado --> CodigoBarras Disponib
p19: CodigoBarras --> id
p20: Disponib --> ESTANTE
p21: | PERMANENTE
p22: | EMPRESTADO DataDev
p23: DataDev --> Ano '-' Mes '-' Dia
p24: Mes --> num
p25: Dia --> num
Gramática da v2
p0: Biblioteca --> Registos
p1: Registos --> Registo RegistosAux
p2: RegistosAux --> ',' Registo
p3: |
p4: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p5: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
p6: Referencia --> id
p7: Tipo --> LIVRO
p8: | CDROM
p9: | OUTRO
p10: Titulo --> string
p11: Autor --> string
p12: Editora --> string
p13: Ano --> num
p14: Catalogo --> BGUM
p15: | ALFA
p16: | OUTRO
p17: Existencias --> LOCAL Local '(' Estados ')'
p18: Local --> string
p19: Estados --> Estado EstadosAux
p20: EstadosAux --> ',' EstadosAux
p21: |
p22: Estado --> CodigoBarras Disponib
p23: CodigoBarras --> id
p24: Disponib --> ESTANTE
p25: | PERMANENTE
p26: | EMPRESTADO DataDev
p27: DataDev --> Ano '-' Mes '-' Dia
p28: Mes --> num
p29: Dia --> num
Gramática da v1
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> id Tipo string '(' string ')'
string num Catalogo
p5: Tipo --> LIVRO
p6: | CDROM
p7: | OUTRO
p8: Catalogo --> BGUM
p9: | ALFA
p10: | OUTRO
p11: Existencias --> LOCAL string '(' Estados ')'
p12: Estados --> Estado
p13: | Estados ',' Estado
p14: Estado --> id Disponib
p15: Disponib --> ESTANTE
p16: | PERMANENTE
p17: | EMPRESTADO DataDev
p18: DataDev --> num '-' num '-' num
25 Janeiro de 2010
Discussão da relação das métricas obtidas com a qualidade da linguagem.
Cálculo de métricas para estudo comparativo de gramáticas:
métricas para a Gramática Black, GBla (EG -- Exemplo 1);
métricas para a versão original (v0) da Gramática Biblioteca, GBib (EG -- Exemplo 2).
Black
Biblioteca (v0)
#T
30+2=32
18+3=21
#NT
10
20
#P
25
28
#PU
0
9
#R
0
2
$RHS
60/25=2.4
55/28=1.96
$ALT
2.5
28/20=1.4
#Modulos
1
1
#RD
10+32=42 ou 10+1=11
20+21=41 ou 20+1=21
#TabLL1
(10+32)*32=1344 ou 10*32=320
(20+21)*21 ou 20*21=420
Conclusão: verificou-se que as gramáticas são sensivelmente do mesmo tamanho (GBla com mais terminais, mas Gbib com mais não-terminais e produções), mas que GBla (com lados direitos mais longos, mais alternativas e com um grafo de dependências mais fechado) é mais complexa que a GBib, sendo esta ultima é mais clara/mais fácil de ler/manter (mais produções unitárias e GD mais simples). Em termos do Reconhecedor, o da segunda (GBib) é um pouco maior (devido a mais NTs e Prods).
18 Janeiro de 2010
Continuação da definição de critérios para avaliar a qualidade das gramáticas: usabilidade (em termos de leitura, derivação de frases e manutenção); e eficiência (em termos reconhecedor/processor gerado, e geração).
Critérios definidos em relação a uma Gramática Independente do Contexto (GIC):
complexidade em termos de dependências entre símbolos
modularidade
Critérios definidos em relação a uma Gramática de Atributos (GA):
identificadores dos símbolos
nº de atributos (nº de regras de cálculo)
complexidade dos atributos
complexidade das acções semânticas
nº, complexidade e localização das condições de contexto
notação
recursividade
suporte em gramática concreta/gramática abstracta
complexidade em termos de dependências entre símbolos
Métricas para GIC:
Tamanho: #T, #NT, #P, #PU, média do nº de símbolos no lado direito das produções ($RHSmed), nº médio de alternativas para cada símbolo ($Altmed), número de módulos (#mod), nº dependências entre símbolos usando o grafo de dependências (fan-in, fan-out), tamanho das tabelas de parsing LL(1) = ((N+T)*T), tamanhos das tabelas de parsing LR = (Q*T)+(Q*N), tamanho do recursivo descendente = (#N+#T)
Forma:
Lexicográficas:
11 Janeiro de 2010
Discussão sobre técnicas de parsing com base nos relatórios apresentados pelos alunos. Revisão dos conceitos de First, Follow, Lookahead, Parsers Top-Down e Bottom-Up.
Revisão dos critérios para aferir a Qualidade de Linguagens.
Introdução aos critérios para aferir a Qualidade das Gramáticas.
Uma gramática G tem 2 fins: Geradora de Linguagem; e Geradora de um Processador de Linguagem. Enquanto Geradora de Linguagem pretende-se que seja fácil de compreender, derivar e manter. Enquanto Geradora de um Processador pretende-se obter: eficiência do processador gerado; e eficiência do processo de geração.
4 Janeiro de 2010
Discussão da relevância do ambiente de desenvolvimento (IDE) para a avaliação de uma Linguagem: embora não sendo considerado um critério de aferição de linguagens por não ser uma característica intrínseca e sim um factor externo complementar, reconheceu-se a sua importância neste estudo visto que influencia directamente a utilização da linguagem (um mau IDE não promove a utilização da linguagem e vice-versa). Foram, entretanto, identificadas as seguintes facetas que caracterizam a qualidade de um IDE:
editor assistido (orientado pela sintaxe, ou com auto-complete, syntax highlight);
editor assistido pela semântica (inteli-sense, snippets);
compilador/interpretador (rapidez, nível de optimização, tratamento de erros);
verificador sintáctico e semântico;
debugger;
gestor de projectos;
controlador de versões;
importador/integrador de bibliotecas (se possível, referenciador para bibliotecas);
apresentador de dicas e sinópsis e leitor de documentação;
possibilidade de configuração e extensibilidade das funcionalidades.
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL8 --- Credibilidade/ Fiabilidade (Reliability): type checking, exception handling
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL5 - Extensibilidade
-
+
-
-
CL6 - Escalabilidade
x
=
=
=
CL7 - Paradigma/Filosofia
impl
impl
impl
impl
CL8 - Credibilidade/ Fiabilidade
-
+
+
-
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL5 - Extensibilidade
bás
bás-
bás+
evol
NA
bás
evol
evol
evol
evol
evol
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
CL7 - Paradigma/Filosofia
I
I
I
S
D
D
D/L
OO/I
OO/I
OO/I
D/F
CL8 - Credibilidade/ Fiabilidade
B
R
S
S
NA
NA
R
B
MB
MB
B
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não, R - Reduzido
bás - básico, evol - evoluído, impl - implica
I - Imperativo, D - Declarativo, L - Lógico, F - Funcional, S - Scripting, OO - Orientado a Objectos
Extensbilidade:
1. Léxico: aliasing (associar um termo/palavra a outra palavra) --- Extensão ao nível do vocabulário
2. Sintáctico
3. Semântica: linguagem de objectos permite estender a semântica (o uso de bibliotecas contribui para a extensibilidade da linguagem).
14 Dezembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL5 --- Extensibilidade
CL7 --- Paradigma/Filosofia
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL5 - Extensibilidade
-
+
-
-
CL6 - Escalabilidade
x
=
=
=
CL7 - Paradigma/Filosofia
impl
impl
impl
impl
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL5 - Extensibilidade
bás
bás-
bás+
evol
NA
bás
evol
evol
evol
evol
evol
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
CL7 - Paradigma/Filosofia
I
I
I
S
D
D
D/L
OO/I
OO/I
OO/I
D/F
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não
bás - básico, evol - evoluído, impl - implica
I - Imperativo, D - Declarativo, L - Lógico, F - Funcional, S - Scripting, OO - Orientado a Objectos
Extensbilidade:
1. Léxico: aliasing (associar um termo/palavra a outra palavra) --- Extensão ao nível do vocabulário
2. Sintáctico
3. Semântica: linguagem de objectos permite estender a semântica (o uso de bibliotecas contribui para a extensibilidade da linguagem).
07 Dezembro de 2009
Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 1ªfase.
30 Novembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL6 --- Escalabilidade
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL6 - Escalabilidade
x
=
=
=
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não
bás - básico, evol - evoluído
23 Novembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL2 --- Documentação:
definição deste critério: comentários --- in-line, multi-line, DSL em comentário (Aumenta doc e produz manuais --- JavaDoc, MSDN, etc; aumenta robustez e produz provas --- VCGen); meta-informação obrigatória.
CL3 --- Unicidade: forma única de escrita.
CL4 --- Consistência
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#/Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
MB - Muito Bom, B - Bom, S - Satisfaz
bás - básico, evol - evoluído
16 Novembro de 2009
Qualidade de gramáticas vs Qualidade de linguagens.
Critérios para aferir a Qualidade das Linguagens:
CL1 -- Expressividade:
definição deste critério: facilidade (naturalidade, clareza) com que se exprime uma ideia usando os construtores da linguagem.
impacto de CL1 nos quatro dimensões de avaliação: influencia positivamente a aprendizagem, escrita e compreensão sem ter grande impacto no processamento.
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1- Expressividade
+
+
+
x
Avaliação (comparativa) da expressividade das seguintes linguagens: Basic, Pascal, C, C#, Perl, Prolog, Haskell, XML, LaTeX; discussão da avaliação histórica e dos paradigmas subjacentes.
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB - Muito Bom, B - Bom, S - Satisfaz
9 Novembro de 2009
Continuação da discussão com os alunos sobre as pesquisas feitas relativas a métricas de gramáticas. Alunos de que apresentaram: Jorge Mendes, André Santos & Miguel Regedor, Márcio Coelho, Paulo Alexandre & Paulo Alexandr e André Rocha.
Introdução ao conceito de qualidade de gramáticas vs qualidade de linguagens (critérios de avaliação e métricas).
Definição de Qualidade de uma Linguagem: uma linguagem diz-se com qualidade se a sua legibilidade (em termos de facilidade na aprendizagem, escrita e compreensão) for grande sem degradar a eficiência do processamento.
Critérios para as Linguagens -- Introdução: CL1 a CL6.
2 Novembro de 2009
Discussão com os alunos sobre as pesquisas feitas sobre métricas de gramáticas. Alunos de que apresentaram: Jose Luis, Helder Silva, e Daniel Rocha.
26 Outubro de 2009
Apresentação dos resultados encontrados na pesquisa sobre métricas de gramáticas.
Revisão da utilização de entradas bibtex num ficheiro latex.
Resolução do exercício 2, alínea f4.
Introdução do princípio da Tradução Dirigida pela Semântica e diferenças em relação à Tradução Dirigida pela Sintaxe.
Introdução ao conceito de Gramáticas de Atributos como tuplo (GIC, A, RC, CC, RT), onde A=Atributos, RC=Regras de Contexto, CC=Condições de Contexto, RT=Regras de Tradução.
Exemplificação do uso de Gramáticas de Atributos (GA) com a gramática declarations.g
19 Outubro de 2009
Discussão do duplo papel de uma Gramática, a propósito do Exercício 2 da aula anterior e das suas alíneas a) a c) (comparação com o Exercício 1):
a gramática como especificação formal de uma linguagem (papel do utilizador final da linguagem e do engenheiro gramatical);
a gramática como especificação formal de um programa, o processador/compilador da linguagem e o recurso a Geradores automáticos de Compiladores (papel do engenheiro gramatical).
Introdução à noção e relevância do tema Qualidade de Gramáticas (em ambas as vertentes acima identificadas) e da necessidade imperiosa de se definirem Métricas Gramaticais para se poder discutir a qualidade com objectividade.
Revisão dos conceitos de Parsing Top-Down (Recursivo-Descendente, RD, e LL(1)) e de Parsing Bottom-Up (LR); funções e tabelas de parsing e autómato LR(0) -- resolução das alíneas d) e e) do Exercício 2.
12 Outubro de 2009
Introdução da notação AnTLR e comparação com a escrita de gramáticas em Lex/Yacc.
Escrita em notação AnTLR de uma Gramática para uma linguagem que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
inclua Acções Semânticas e Atributos para calcular a Soma dos números na lista e Comprimento da Lista.
Discussão das diferenças entre o formato BNF e EBNF e comparação das respectivas árvores de derivação.
Discussão das diferenças entre Recursividade à Esquerda e Recursividade à Direita.
Gramática Recursiva não-LL(1) (BNF-puro)
Lista --> "[" Nums "]"
Nums --> int
| int',' Nums
Gramática Iterativa (BNF-extendido) --- com resolução em ANTLR
lista : '[' nums ']' {
System.out.println("Soma: " + $nums.soma +
"\nContador: " + $nums.conta);
}
;
nums returns [int soma, int conta=0]
: a = INT {
$soma = Integer.parseInt($a.text);
$conta++;
}
(',' b = INT { $soma += Integer.parseInt($b.text);
$conta++;
}
)*
;
INT : ('+' | '-')? ('0'..'9')+
;
WS : (' ' | '\t' | '\n' | '\r') { channel=HIDDEN; };
28 de Setembro de 2009
1. Apresentação da UCE30-EL e em particular do Módulo de EG:
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.
2. Revisão do conceito de Linguagem e sua relação com Gramática:
Apresentação dos critérios a observar quando se faz o design de uma Linguagem:
Satisfação dos Requisitos pedidos no enunciado
Satisfação das Restrições explicitadas no enunciado
Procura de Legibilidade
Procura de Simplicidade na utilização para escrever frases.
Resolução do Exemplo1: desenho de uma Linguagem
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo2 (inicio, discussão do enunciado): leitura e análise de uma Gramática
1. Apresentação da UCE30-EL e em particular do Módulo de EG e ATS:
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.
11 de Outubro de 2010
2. Revisão do conceito de Linguagem e sua relação com Gramática:
Apresentação sumária dos critérios a observar quando se faz o design de uma Linguagem:
Satisfação dos Requisitos pedidos no enunciado
Satisfação das Restrições explicitadas no enunciado
Procura de Legibilidade
Procura de Simplicidade na utilização para escrever frases.
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo1: desenho de uma Linguagem e escrita da respectiva Gramática com variantes (ver aqui GIC e GT).
18 de Outubro de 2010
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo1: desenho de uma Linguagem e escrita da respectiva Gramática com variantes (ver aqui Exemplos-de-Frases e GT).
25 de Outubro de 2010 (aula dada pelo prof. Eric Van Wyk)
3. Introdução (prática/pragmática) o conceito de Gramática de Atributos (GA)para especificar a semântica estática e dinâmica de uma linguagem.
Introdução ao Gerador de Processadores de Linguagens baseado em GAs Silver.
Exemplo1 (Gramática Genea para definir uma Linguagem para Genealogia e Demografia): desenho de uma Linguagem e escrita da respectiva Gramática com variantes.
GUIÃO DA AULA:
Attribute Grammars (AGs):
- support Semantic Analysis specifications;
- as opposed to Translation Grammars, TG (as those supported by Yacc and other parser generators) that are primarily used for syntactic analysis, although can describe some limited semantic work, AGs are more general and more powerful.
Main phases of a Compiler or Translator:
Syntactic Analysis
- scanning and parsing
- verify or determine the syntactic structure of the program/expression
- generate a tree representing this structure
Semantic Analysis
- compute concrete values and types for variables and expressions
- non-syntactic checks - semantic constraints:
* are all variables in a program declared ?
* are all expressions type correct ?
- report the errors
- report on some characteristics of the program
Optimization
- rewrite the program into a more efficient form
Code Generation
- generate a translation to another language
AGs
- are really for semantic analysis, but can be useful for other tasks as well.
- aim is to decorate the syntax tree with attributes describing the semantics
- think of each node in a syntax tree as an object; we want to compute values for fields (attributes) on these objects such as "type", "isCorrect", "errors", etc.
Yacc semantic actions give us a single unnamed, untyped attribute
Silver is a research prototype AG system developed by my group at Minnesota.
An AG is a CFG with
- set of attributes; attributes have a name and a type
- occurrence relation - what attributes appear on what nonterminals
- defining equations - for computing the value of those attributes
Example 1
Consider a familiar example, the Genealogia language introduced in the previous lessons.
- show Silver code for Genealogia (no attributes, only parsing)
- show what errors look like in Silver specs
- parse errors, binding errors, type errors ...
Consider also the following valid sentence of Genealogia language:
( "Joe" "Smith" M 1955, "Beth" "Johnson" F 1957 )
( "Jane" "Martin" F 1940, "Sam" "Smith" M 1935 )
{
"Mike" M 1965, "Betty" F 1967
}
( "Marvin" "Van Wyk" M 1945, "Lois" "Ter Louw" F 1945 )
{
"Eric" M 1967,
"Kevin" M 1970,
"Stacie" F 1971
}
Next, add report attribute
- only one synthesized attribute:
synthesized attribute report :: String occurs on Geneology, Families, Family,....
- print simple report
- the solution (more verbose than the Yacc solution, but much more fomal and clear) is split
into the following files:
Geneology.sv +
Person.sv +
Children.sv +
Terminals.sv and
Main.sv plus
silver-compile .
Example 2
Count the number of children and add it the part of the report
generated on the parents
- add one more synthesized attribute:
synthesized attribute numChildren :: Integer occurs on ChildList;
- then the solution is obtained just changing the following file:
Children.svExercise (Example 3)
- use the birth data associated with each child, and compute the year of oldest child's birth
"First child born in ..." - if any children.
- the solution developed by one student, composed by the following files:
Geneology.sv +
Person.sv +
Children.sv .
Example 4
Semantic constraints can be specified as Boolean attributes,
or a "list of errors" attribute
Compute "isCorrect :: Boolean" to check that oldest child born
at least 15years before the youngest parent.
- now some more synthesized attributes must be added:
synthesized attribute isCorrect::Boolean occurs on Geneology, Families, Family ;
synthesized attribute youngestBirthYear:: Integer occurs on Parent, Parents ;
synthesized attribute year::Integer occurs on Year ;
synthesized attribute oldestBirthYear :: Integer occurs on ChildList, Children ;
synthesized attribute birthYear :: Integer occurs on Child ;
- then the solution is obtained changing the following file:
Geneology.sv +
Person.sv +
Children.svExercise (Example 5)
- resulting error message is not so good. Instead replace isCorrect
with errors :: String
Example 6
Inherited attributes, the way to make contextual information accessible after or before the substring where it appears avoiding any global variable.
- Evolve the previous grammar because the resulting error message is still not as good as it could be.
Maybe we'd like a message of the form "Child X born in Y after parents born in Z"
- pass down age of youngest parent (plus 15years) as an inherited attribute
- generate the error message, arguably, at the point in which the error occurs.
- now an inherited attribute must be defined and some additional synthesized attributes must be added:
inherited attribute earliestPossibleBirthYear::Integer occurs on Children, ChildList, Child ;
synthesized attribute errors::String occurs on Geneology, Families, Family, Children, ChildList, Child ;
synthesized attribute youngestBirthYear::Integer occurs on Parent, Parents ;
attribute birthYear::Integer occurs on Child ;
- then the solution is obtained changing the following file:
Geneology.sv +
Children.sv and
Main.svExercise (Example 7)
- add an inherited attribute "currentYear" - set it at the root and
pass it down to all children so that we can compute the child ages
and put them into the report.
- the solution developed by one student, composed by the following files:
Geneology.sv +
Person.sv +
Children.sv +
Terminals.sv and
Main.sv plus
Sample source-text
08 de Novembro de 2010
3. Definição formal de Gramática de Atributos (GA) para especificar a semântica estática e dinâmica de uma linguagem (consolidação teórica da introdução prática da última aula).
Continuação da exploração do Gerador de Processadores de Linguagens baseado em GAs Silver.
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver (fazer aqui o download da versão mais recente: SilverNov2010), agora com um novo exemplo para criar uma calculadora de expressões "dc -- desktop calculator language".
GUIÃO DA AULA:
A simple arithmetic expression language.
Consider the Silver specification for "dc" (directory grammars/tutorials/dc ans subdirectory bin).
1. The concrete syntax in Expr.sv (respective terminal symbols in TerminalsDC.sv) ensures that operator precedence and
associativity is preserved.
Notice that this Expr.sv version already includes the extension proposed to the students as an working example during the class -- DC Expr now support Logical (and, or, not) and Relational Operators (at moment, jut Equal)
2. A higher order attribute, ast_Expr, is used to compute a tree using
the abstract productions. On this, we compute the value of the
expression since the grammar is simpler. See again Expr.sv and also the functions defined in DC.sv
3. In BetterPP.sv we see the use of inherited attributes. These are
passed down the tree and used to determine when parenthesis need to be used.
To obtain a Compiler and use it, the common files Main.sv and silver-compile are also developed and included in the directory.
22 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis, Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JJ, a compensar ainda em dezembro).
29 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis, Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JJ, a compensar ainda em dezembro).
06 de Dezembro de 2010
Introdução ao tópico Qualidade de Linguagens
Enquadramento do tema e justificação da sua necessidade enquanto propósito geral da engenharia aquando do desenvolvimento de um novo produto;
Caracterização do produto em causa: protocolo de comunicação para um Emissor transmitir a um Recetor determinada informação no sentido de obter uma resposta/reação do Receptor após processar a mensagem (frase da linguagem);
Identificação dos Critérios que permitem definir qualidade de uma linguagem: Legibilidade (aprendizagem, escrita e compreensão) e Eficácia;
Factores que tem impacto nos critérios de qualidade -- a identificar e caracterizar na proxima aula;
Identificação dos factores que determinam a aceitação de uma linguagem: cultura/experiência anterior; disponibilidade do processador e da documentação; dimensão e envergadura do ambiente de desenvolvimento.
13 de Dezembro de 2010
Esta aula foi totalmente aproveitada para os Grupos fazerem a apresentação (1ªfase) do Projecto Integrado.
03 de Janeiro de 2011
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver (fazer aqui o download da versão mais recente Silver-0.3.1: http://melt.cs.umn.edu/silver/downloads.html), agora com um novo exemplo para desenvolver um compilador para a linguagem de programação "simple".
10 de Janeiro de 2011
Esta aula foi aproveitada para os Grupos fazerem a apresentação (1ªfase/2ªetape - demo) do Projecto Integrado.
17 de Janeiro de 2011
Continuação do estudo do tópico Qualidade de Linguagens
Revisão dos Critérios que permitem definir qualidade de uma linguagem: Legibilidade (aprendizagem, escrita e compreensão) e Eficácia;
Razões para se estudar uma Linguagem de Programação de segundo Sebesta:
Aumentar a capacidade de exprimir ideias por escrito;
Aumentar a sabedoria para fazer uma boa escolha da LP a usar num caso concreto;
Aumentar a capacidade de aprender novas linguagens;
Aumentar a percepção sobre a importância da implementação;
Melhorar a compreensão sobre todo o domínio da programação;
Classificação das Linguagens de Programação:
Quanto à cronologia e grau de abstracção (1ª, 2ª, 3ª e 4ª gerações)
Quanto ao estilo do processamento (compilada/interpretada)
Quanto ao estilo de programação (imperativa/declarativa)
Quanto à forma de organizar código (monolítica/modular)
Quanto à forma de execução (sequencial/concorrente)
Quanto ao sistema de tipos (fracamente/fortemente tipadas)
Quanto à forma de expressão (textuais/visuais)
Quanto à abrangência (domínio geral, GPL/específico, DSL)
* 2º SEMESTRE ***
21 de Fevereiro de 2011
Continuação do estudo do tópico Qualidade de Linguagens
Etudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
28 Fevereiro 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensao
Reconhecimento
Expressividade
+
+
+
-
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
CL3-Unicidade
CL4-Consistência
CL5-Extensibilidade
CL6-Escalabilidade
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
07 de Março de 2011
Não houve aula --- 2ªf de Entrudo.
14 de Março de 2011
Esta aula foi aproveitada para os Grupos fazerem a apresentação (2ªfase/1ªetape) do Projecto Integrado.
21 Março 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
Documentação (comentários de linha e bloco, anotações para manuais e meta-informação);
Unicidade (singularidade de formas para expressar a mesma coisa).
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
CL5-Extensibilidade
CL6-Escalabilidade
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
28 Março 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Consistência
Escalabilidade
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
Escalabilidade
X
X
X
X
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
4 Abril 2011
Discussão do processo de avaliação; ponto de situação.
Abertura de uma discussão/investigação alargada sobre o processo de Avaliação de Qualidade e Métricas em Engenharia:
Receção das monografias escritas pelos alunos sobre métricas em geral, métricas em linguagens de modelação (UML) e gramáticas; apreciação geral e definição dos desenvolvimentos futuros --- ver relatórios escritos inseridos na parte final do item "Questões, Fichas Práticas e Notas" da página deste módulo.
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Extensibilidade léxica, sintática e semântica.
Modularidade
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
-
++
?
-
Escalabilidade
X
X
X
X
Modularidade
x
++
+
X
Fiabilidade
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
s
s
s
S
B
S
S
B
B
B
S
s
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Modularidade
nS
nS
nS
S
s
nS
S
B
B
B
S
nS
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
11 Abril 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Fiabilidade: type-checking; verificação dinâmica de limites; error-handling
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
-
++
?
-
Escalabilidade
X
X
X
X
Modularidade
X
++
+
X
Fiabilidade
x
+
X
-
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
s
s
s
S
B
S
S
B
B
B
S
s
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Modularidade
nS
nS
nS
S
s
nS
S
B
B
B
S
nS
CL8-Fiabilidade
S
B
S
B
nS
nS
B
B
nS
nS
nS
B
nS - não Satisfaz, B - Bom, S - Satisfaz
18 Abril 2011
Não houve aula: férias de Páscoa.
25 Abril 2011
Não houve aula: feriado nacional para comemorar a Revolução dos Cravos.
02 Maio 2011
Introdução do estudo do tópico Qualidade de Gramáticas
Apresentação dos Critérios que permitem definir qualidade de uma linguagem -- Compreensão, Derivação e Manutenção; Eficiência no Processamento e na Geração -- tendo em consideração o duplo papel de uma Gramática (GIC e GA): especificação formal de uma linguagem (para ser consumida por um Ser Humano que vai escrever frases nessa linguagem); e especificação formal de um programa/processador (para ser consumida por um Gerador).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
09 Maio 2011
Introdução do estudo do tópico Qualidade de Gramáticas
Apresentaçãoos Critérios que permitem definir a qualidade de uma linguagem -- Compreensão, Derivação e Manutenção; Eficiência no Processamento e na Geração -- tendo em consideração o duplo papel de uma Gramática (GIC e GA): especificação formal de uma linguagem (para ser consumida por um Ser Humano que vai escrever frases nessa linguagem); e especificação formal de um programa/processador (para ser consumida por um Gerador).
Apresentação dos Factores que mais influenciam Critérios introduzidos na última aula para definir a qualidade de uma linguagem: número de símbolos e de produções; clareza dos identificadores dos símbolos; número de produções unitárias; comprimentos dos lados esquerdos das produções; notação usada (pure/extended BNF); esquema de recursividade; modularidade; e complexidade sintática.
16 Maio 2011
Palestra sobre Gramáticas de Atributos e Geradores de Compiladores dada pelo Prof. Eric van Wik:
Extensão de GA com novo símbolos e produções; forma de lida com a extensão durante a geração.
Estudo do tópico Qualidade de Gramáticas e Métricas
Apresentação das Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática.
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
23 Maio 2011
Estudo do tópico Qualidade de Gramáticas e Métricas
Revisão das Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática.
Resolução de vários exercícios sobre calculo de Métricas aplicadas a diferentes GIC (com base nos exercícios da edição 2009/2010).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
30 Maio 2011
Manhã totalmente dedicada ao projeto integrado (PI).
06 de Junho 2011
Conclusão do Ano Letivo relativo ao Módulo de EG.
Fecho do tópico Qualidade de Gramáticas e Métricas
Balanço sobre as Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática através da resolução e discussão do exercício 5 de transformação e cálculo de métricas de uma dada GIC (da edição 2009/2010).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
13 de Junho 2011
Manhã parcialmente dedicada ao fecho de ATS e ao projeto integrado (PI).
Submissão do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos UML (paper CoRTA2011)
Escrita do sumário da aula, incluindo o XML dos dois exercícios realizados.
Utilização dos módulos: url; listings; graphicx; hyperref
19 de Outubro de 2009
A aula foi usada para avançar com o Projecto integrado.
26 de Outubro de 2009
A aula foi usada para avançar com o Projecto integrado.
02 de Novembro de 2009 (aula dada por PRH)
Linguagens de Anotação de Documentos:
a noção de texto semi-estruturado por contra-ponto com texto completamente estruturado (frases de uma linguagem formal) e texto não-estruturado (frases de uma linguagem natural);
os princípos por trás da anotação de documentos; um pouco de histórica -- as linguagens de anotação LaTeX, SGML, HTML e XML;
análise de exemplos concretos de documentos históricos e sua interpretação -- a definição de marcas que explicitem a forma de interpretar diversos termos (simples e compostos);
o princípio básico de separar a anotação do seu processamento.
A Linguagem de Anotação XML:
XML como uma meta-linguagem para definir linguagens de anotação -- os dialectos XML e dos DTDs;
XML como a linguagem franca ou o esperanto dos Sistemas de Informação -- interoperabilidade entre bases de dados e outras aplicações.
Sistemas de Produção:
as 3 componentes básicas: base de regras de reacção"condição/acção" + base de factos + motor de produção;
conceitos e exemplos (Prolog, Lex/Flex, Awk, Perl, XSL).
Enunciado de um Trabalho Prático para a próxima aula -- verna rúbrica "Questões, Fichas Práticas e Notas"
Breve apresentação da linguagem de domínio específico (DSL) BibTeX: uma linguagem para bases de dados bibliográgficas. A sua relação com o sistema LaTeX.
9 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
Objectivos da apresentação que os grupos de trabalho farão a 7 de Dezembro.
16 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
23 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
30 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
Apresentação de uma lista de aspectos do projecto que serão analisados na apresentação da semana seguinte
7 de Dezembro de 2009 ( as apresentações realizamram-se das 9:30 às 12:00)
Apresentação pelos 4 grupos da 1ª fase do projecto integrado.
14 de Dezembro de 2009
Breve comentário sobre a apresentação e relatório de cada grupo
Sugestão de uma nota a cada grupo sobre o estado do projecto nesta altura.
4 de Janeiro de 2009
Acompanhamento do desenvolvimento do projecto.
11 de Janeiro de 2009
Acompanhamento do desenvolvimento do projecto.
Breve discussão sobre técnicas genéricas de parsing.
18 de Janeiro de 2010
Acompanhamento do desenvolvimento do projecto.
25 de Janeiro de 2010
Apresentação dos objectivos a atingir na 2a fase do projecto integrado para cada um dos módulos da UCE.
Continuação da apresentação do projecto e suas etapas.
Definição de datas de aprentação e avaliação intercalares.
11 de Outubro
Não houve aula (participação na conf. em Eindhoven)
18 de Outubro
Palestras do Prof. Dr. Janis Voigtlaender sobre "Semantic Bidirectionalization" e "Type-based Program Reasoning", no contexto do programa doutoral MAP-i.
Estas palestras tiveram a duração de 3 horas, compensando assim a aula não leccionada na semana anterior.
25 de Outubro
Discussão com os alunos do projecto e possíveis abordagens a seguir e sistemas de software a utilizar.
1 de Novembro
Não houve aula: feriado
8 de Novembro
Continuação da análise das sub-tarefas envolvidas no projecto integrado.
Um sistema para definição e travessia de ASTs na linguagem C
TWiki's Education/EL1011 webThe Education/EL1011 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011Copyright 2020 by contributing authors2011-10-02T22:36:16ZAlunosGrupos10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos102011-10-02T22:36:16ZEngenharia de Linguagens (2010/11) Alunos/Grupos Gr Nome Email 4 André Manuel Pereira Pedra da Cruz Lopes andre.pclopes at gmail dot com 4 Bruno ... (last changed by PedroRangelHenriques)PedroRangelHenriquesHorario10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/Horario102011-10-02T22:33:29ZEngenharia de Linguagens (2010/2011) Horário Anual (1º 2º Semestres) 08h00 10h00 Módulo I Engenharia Gramatical 10h00 ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosEG102011-09-17T23:42:05ZEngenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ... (last changed by PedroRangelHenriques)PedroRangelHenriquesWebHomehttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/WebHome2011-09-05T14:31:00ZUnidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ... (last changed by PedroRangelHenriques)PedroRangelHenriquesProgramaATS10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaATS102011-09-03T15:29:44ZEngenharia de Linguagens (2010/2011) Análise e Transformação de Software Programa Resumido Análise de programas: Extracção de dados Armazenamento ... (last changed by PedroRangelHenriques)PedroRangelHenriquesProgramaEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaEG102011-09-03T14:49:02ZEngenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosATS10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS102011-06-19T05:38:30ZEngenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosATS09http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS092011-05-27T21:52:54ZEngenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ... (last changed by PedroRangelHenriques)PedroRangelHenriquesFichasEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/FichasEG102011-04-04T22:44:05ZEngenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosPED10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosPED102010-11-29T09:22:20ZEngenharia de Linguagens TITLE (last changed by JorgeGustavo)JorgeGustavoSumariosProjecto10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto102010-11-11T10:29:14ZEngenharia de Linguagens (2010/2011) Projecto Integrado Sumários 27 de Setembro de 2010 Apresentação geral do projecto 4 de Outubro Continuação da ... (last changed by JoaoSaraiva)JoaoSaraivaAlunosGrupos09http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos092010-10-23T08:15:32ZEngenharia de Linguagens (2009/10) Alunos/Grupos 4 Andre da Silva Rocha 2 André Fernandes dos Santos 1 Daniel Carvalho da Rocha 3 Hélder de ... (last changed by PedroRangelHenriques)PedroRangelHenriquesMetodoAvaliacaohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/MetodoAvaliacao2010-10-23T08:13:59ZEngenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosProjectohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto2010-10-18T09:11:25ZEngenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ... (last changed by PedroRangelHenriques)PedroRangelHenriquesObjectivosProjectohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto2010-10-18T09:09:57ZEngenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ... (last changed by PedroRangelHenriques)PedroRangelHenriquesObjectivosProjecto10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto102010-10-18T08:52:41ZEngenharia de Linguagens (2010/2011) Projecto Integrado Objectivos Gerais: Sistema: Criar ..... Documentação Relatório de Desenvolvimento ... (last changed by PedroRangelHenriques)PedroRangelHenriques
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ...
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ...
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ...
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ...
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Exemplos para as aulas Notas sobre !AnTLR Configurar CLASSPATH para permitir a invoca ...
Engenharia de Linguagens (2009/2010) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2009/10) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 5: A gramática independente de contexto GIC5, abaixo apresentada ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 31 Maio de 2010 !GraAlEditor, um editor analisador de Gramáticas: Preparação de ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Alfresco Descarregar a versão Edition Requisitos: Java !MySQL !ImageMagick ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Sumários 28 de Setembro de 2009 Apresentação do Módulo de PED: Apresenta ...
Engenharia de Linguagens Sumários 28 de Setembro de 2009 Apresentação geral do módulo 12 Outubro de 2009 Alguns conceitos gerais acerca de linguagem natural ...
Engenharia de Linguagens Scripting no Processamento de Linguagem Natural Programa Resumido Linguagens de scripting: características, objectivos e conceitos ...
Education/EL1011 Web Preferences The following settings are web preferences of the Education/EL1011 web. These preferences overwrite the site level preferences ...
Engenharia de Linguagens Projecto Integrado Aulas de Gestão Sumários 6 Outubro 2008 Modo de funcionamento do Projecto Integrado; Apresentação do enunciado ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Escreva, em notação !AnTLR, uma Gramática para uma linguagem ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Programa Resumido O paradigma da Programação baseada em Gramáticas (PG). Conceitos sobre Gramáticas ...
Engenharia de Linguagens Bibliografia: Scripting Livros Randal L. Schwartz, Tom Phoenix, brian d foy, Learning Perl , O'Reilly Media Larry Wall, Tom Christiansen ...
Engenharia de Linguagens Projecto Integrado Aulas Tecnológicas Sumários 29 Setembro 2008 Necessidade de um ambiente de programação eficiente: Editor, linha ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Sumários 29 de Setembro de 2008 Apresentação da Disciplina de EG: Apresentação da Equipe Docente ...
Engenharia de Linguagens Análise e Transformação de Software Sumários 02 de Março de 2009 I.1 Introdução e Motivação para a área de Análise e Transformação ...
Engenharia de Linguagens Análise e Transformação de Software 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Neste primeiro exemplo pretende se analisar ...
Engenharia de Linguagens Etapas do Projecto As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ...
Engenharia de Linguagens GraphViz no XP/Vista Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo !GraphViz ...
Engenharia de Linguagens Projecto Integrado Aulas do 2ºSemestre, 2ªparte Sumários 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre ...
Engenharia de Linguagens Sumários Segundo Semestre, Aulas da Manhã 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre. Discuss ...
Engenharia de Linguagens Sumários Segundo Semestre, Aulas da Manhã 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre. Discuss ...
Engenharia de Linguagens Projecto Integrado Aulas do 2ºSemestre, 2ªparte Sumários 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre ...
Engenharia de Linguagens Projecto Integrado Aulas de Gestão Sumários 6 Outubro 2008 Modo de funcionamento do Projecto Integrado; Apresentação do enunciado ...
Engenharia de Linguagens Projecto Integrado Aulas Tecnológicas Sumários 29 Setembro 2008 Necessidade de um ambiente de programação eficiente: Editor, linha ...
Engenharia de Linguagens Bibliografia: Scripting Livros Randal L. Schwartz, Tom Phoenix, brian d foy, Learning Perl , O'Reilly Media Larry Wall, Tom Christiansen ...
Engenharia de Linguagens Etapas do Projecto As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ...
Engenharia de Linguagens Análise e Transformação de Software 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Neste primeiro exemplo pretende se analisar ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Exemplos para as aulas Notas sobre !AnTLR Configurar CLASSPATH para permitir a invoca ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Escreva, em notação !AnTLR, uma Gramática para uma linguagem ...
Engenharia de Linguagens (2009/10) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 5: A gramática independente de contexto GIC5, abaixo apresentada ...
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Alfresco Descarregar a versão Edition Requisitos: Java !MySQL !ImageMagick ...
Engenharia de Linguagens GraphViz no XP/Vista Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo !GraphViz ...
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Programa Resumido O paradigma da Programação baseada em Gramáticas (PG). Conceitos sobre Gramáticas ...
Engenharia de Linguagens (2009/2010) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens Scripting no Processamento de Linguagem Natural Programa Resumido Linguagens de scripting: características, objectivos e conceitos ...
Engenharia de Linguagens Análise e Transformação de Software Sumários 02 de Março de 2009 I.1 Introdução e Motivação para a área de Análise e Transformação ...
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Sumários 29 de Setembro de 2008 Apresentação da Disciplina de EG: Apresentação da Equipe Docente ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 31 Maio de 2010 !GraAlEditor, um editor analisador de Gramáticas: Preparação de ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Sumários 28 de Setembro de 2009 Apresentação do Módulo de PED: Apresenta ...
Engenharia de Linguagens Sumários 28 de Setembro de 2009 Apresentação geral do módulo 12 Outubro de 2009 Alguns conceitos gerais acerca de linguagem natural ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ...
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ...
Education/EL1011 Web Preferences The following settings are web preferences of the Education/EL1011 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/EL1011 web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
Related topics:WebChangesAlert, TWikiUsers, TWikiRegistration
These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.
Web-specific background color: (Pick a lighter one of the StandardColors).
Set WEBBGCOLOR = #D0D0D0
Note: This setting is automatically configured when you create a web
Image, URL and alternate tooltip text of web's logo. Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.
List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/EL1011.Topic links. Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
Set SITEMAPLIST = on
Set SITEMAPWHAT =
Set SITEMAPUSETO = Engenharia de Linguagens
Note: Above settings are automatically configured when you create a web
Exclude web from a web="all" search: (Set to on for hidden webs).
Set NOSEARCHALL =
Note: This setting is automatically configured when you create a web
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
#Set NOAUTOLINK =
Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics for this web:
WebTopicEditTemplate: Default template for new topics in this web. (Site-level is used if topic does not exist)
Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
Set WEBFORMS =
Users or groups who are not / are allowed to view / change / rename topics in the Education/EL1011 web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce your own preferences variables and use them in your topics and templates.
TWiki search results for \.*
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011
The Education/EL1011 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/EL1011
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011
/twiki/pub/Main/LocalLogos/um_eengP.jpgAlunosGrupos10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos10
Engenharia de Linguagens (2010/11) Alunos/Grupos Gr Nome Email 4 André Manuel Pereira Pedra da Cruz Lopes andre.pclopes at gmail dot com 4 Bruno ... (last changed by PedroRangelHenriques)2011-10-02T22:36:16ZPedroRangelHenriquesHorario10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/Horario10
Engenharia de Linguagens (2010/2011) Horário Anual (1º 2º Semestres) 08h00 10h00 Módulo I Engenharia Gramatical 10h00 ... (last changed by PedroRangelHenriques)2011-10-02T22:33:29ZPedroRangelHenriquesSumariosEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosEG10
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ... (last changed by PedroRangelHenriques)2011-09-17T23:42:05ZPedroRangelHenriquesWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/WebHome
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ... (last changed by PedroRangelHenriques)2011-09-05T14:31:00ZPedroRangelHenriquesProgramaATS10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaATS10
Engenharia de Linguagens (2010/2011) Análise e Transformação de Software Programa Resumido Análise de programas: Extracção de dados Armazenamento ... (last changed by PedroRangelHenriques)2011-09-03T15:29:44ZPedroRangelHenriquesProgramaEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaEG10
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ... (last changed by PedroRangelHenriques)2011-09-03T14:49:02ZPedroRangelHenriquesSumariosATS10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS10
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ... (last changed by PedroRangelHenriques)2011-06-19T05:38:30ZPedroRangelHenriquesSumariosATS09
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS09
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ... (last changed by PedroRangelHenriques)2011-05-27T21:52:54ZPedroRangelHenriquesFichasEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/FichasEG10
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ... (last changed by PedroRangelHenriques)2011-04-04T22:44:05ZPedroRangelHenriquesSumariosPED10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosPED10
Engenharia de Linguagens TITLE (last changed by JorgeGustavo)2010-11-29T09:22:20ZJorgeGustavoSumariosProjecto10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto10
Engenharia de Linguagens (2010/2011) Projecto Integrado Sumários 27 de Setembro de 2010 Apresentação geral do projecto 4 de Outubro Continuação da ... (last changed by JoaoSaraiva)2010-11-11T10:29:14ZJoaoSaraivaAlunosGrupos09
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos09
Engenharia de Linguagens (2009/10) Alunos/Grupos 4 Andre da Silva Rocha 2 André Fernandes dos Santos 1 Daniel Carvalho da Rocha 3 Hélder de ... (last changed by PedroRangelHenriques)2010-10-23T08:15:32ZPedroRangelHenriquesMetodoAvaliacao
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/MetodoAvaliacao
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ... (last changed by PedroRangelHenriques)2010-10-23T08:13:59ZPedroRangelHenriquesSumariosProjecto
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ... (last changed by PedroRangelHenriques)2010-10-18T09:11:25ZPedroRangelHenriquesObjectivosProjecto
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ... (last changed by PedroRangelHenriques)2010-10-18T09:09:57ZPedroRangelHenriquesObjectivosProjecto10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto10
Engenharia de Linguagens (2010/2011) Projecto Integrado Objectivos Gerais: Sistema: Criar ..... Documentação Relatório de Desenvolvimento ... (last changed by PedroRangelHenriques)2010-10-18T08:52:41ZPedroRangelHenriques
Modo de funcionamento do Projecto Integrado no 2ºSemestre, 2ªParte.
Apresentação dos 3 Casos de Estudo que servirão de suporte à disciplina:
CS1 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): neste caso a entidade principal é 'Candidatura' que tem uma 'Equipe' de investigadores que pertencem a 'Instituições Parceiras' e participam num projecto organizado em 'Tarefas' que tem 'Resultados' avaliados em 'Milestones' -- o sistema permite carregar candidaturas, lacrar, avaliar, aprovar, fazer os pagamentos e as medidas de execução, fechar.
CS2 (Gestão de Marcação de Consultas numa Clínica Médica): neste caso a entidade central é 'Consulta' que envolve 'Paciente', 'Médico' e 'Ficha Clínica' -- além de manter a informação sobre Médicos e Pacientes, é preciso Marcar Consultas e Registar Episódio Clínico na ficha.
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): aqui a entidade principal, não é uma, são duas. Na 1ªfase é a 'Ficha de Documento' à qual estão associadas as fichas com descrições individuais dos Clérigos; na 2ªfase é a 'Ficha Prosopográfica de cada Clérigo' com as sua referências para as fontes documentais -- neste caso o objectivo, além de carregar e mostrar a informação, é fazer a 'Normalização' das fichas e a 'Fusão' das várias fichas com descrições individuais dos Clérigos na respectiva Ficha Prosopográfica.
Apresentação do enunciado da componente do projecto integrado, Sistema DRAW, que será trabalhada nesta 2ªparte --- uma linguagem para especificação do Modelo de DadosdreqL:
Análise de Requisitos: a linguagem deve permitir definir os Tipos Atómicos (Primitivos, Renomeados, Enumerados), Tipos Estruturados (Set, Seq, Tree, Tuple e Map), Relações implícita ou explicitamente. Além disso, alguns atributos dos campos devem ser especificados (editável, nulo, visível, comprimento máximo, mascarado, chave, auto-increment).
TPC: a) Criar o Modelo de Dados (UML ou VDM) para os 3 Casos de Estudo; b) terminar a análise de requisitos para dreqL.
09 de Março de 2009
Recapitulação dos objectivos e modo de funcionamento do Projecto Integrado no 2ºSemestre, 2ªParte.
Revisão do enunciado da componente do projecto que vai ser trabalhada nesta parte: a linguagem dreqL para descrição da estrutura de dados de uma aplicação e sua integração com a linguagem DRAW.
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo que servirão de suporte à disciplina:
CS1 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): apuramento do Modelo proposto por Miguel Esteves (em comparação com o do Sérgio e outros) -- ver Diagrama de Classes Final.
TPC: terminar os modelos para os 2 outros casos e entregar em papel o 1ºmodelo.
16 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo que servirão de suporte à disciplina:
CS2 (Gestão de Candidaturas de projectos de I&D a financiamento da FCT): apuramento do Modelo final -- ver Diagrama de Classes Final.
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): discussão do modelo inicial e dos conceitos envolvidos.
Discussão muito calorosa sobre Modelação de Sistemas de Informação; o Modelo Relacional e o DER versus o Modelo Orientado a Objectos e o DClasses.
TPC: terminar o modelo para o último caso e entregar em papel e em formato electrónico o Diagrama dos 3 Modelos.
23 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 3 Casos de Estudo, já propostos, que servirão de suporte à disciplina:
CS3 (Sistema para estudo Prosopográfico do Clero Catedralício): discussão do modelo final; comparação de interpretações e abordagens diversas.
Apresentação de mais 2 Casos de Estudo que servirão de suporte à disciplina:
CS4 (Gestão de Aquisições num Organismo Público): neste caso a entidade principal é 'Ficha de Aquisição', a qual se associa a unidades organicas e produtos, fornecedores e orçamento, de modo a poder-se fazer a sua cabimentação nas rubricas orçamentais e a respectiva autorização de compra.
CS5 (Gestão de Correspondência): neste caso a entidade principal é 'Correspondência' estando ligada a 'Funcionarios' de modo a permitir fazer o registo completa de cada correspondencia que chega à institução, identificando o destinatário interno e fazendo os eu tracking até ser arquivada.
Enquadramento desta componente de PI com o trabalho já feito, em realização e futuro:
para o efeito foi revista a Arquitectura geral de uma Aplicação Web do tipo Data-centric, formada por 3 camadas: a camada de interacção (dita o Front-Office do sistema); o repositório de dados (em torno do qual se centram as operações); e a camada intermédia (o Middleware) que estabelece a ligação entre as outras duas camadas.
a linguagem DRAW serve para especificar a camada de interacção;
para interligação das duas será definida uma outra linguagem, interL, que mapeia os dados da interface com os dados contidos no repositório;
a linguagem dreqL surge para especificar o repositório -- sua estrutura e manutenção (ou seja, o conjunto de operações que formam o Back-Office do sistema).
TPC1: fazer o modelo para os dois novos casos e entregar em papel e em formato electrónico o respectivo Diagrama.
TPC2: propor uma definição para a linguagem dreqL; apresentar a sua GIC.
30 de Março de 2009
Discussão muito detalhada do TPC realizado pelos alunos no sentido de criar um Modelo Lógico (DER ou Diagrama de Classes UML) para os 5 Casos de Estudo, já propostos, que servirão de suporte à disciplina:
CS4 (Sistema para estudo Gestão de Aquisições num Organismo do Estado): discussão do modelo final; comparação de interpretações e abordagens diversas.
CS5 (Sistema para estudo Gestão de Corresondência num Organismo do Estado): discussão do modelo final; comparação de interpretações e abordagens diversas.
Discussão muito detalhada das propostas para a linguagem dreqL apresentadas por cada grupo; análise da gramática e de frases concretas.
TPC1: apresentar a versão final da gramática para definição da linguagem dreqL e frases de sua instanciação aplicadas aos 5 Casos de Estudo.
20 de Abril de 2009
Discussão e avaliação, grupo a grupo, da linguagem dreqL proposta, da sua gramática e parser gerado pelo AnTLR e análise de frases concretas aplicadas a cada um dos 5 Casos de Estudo.
TPC1: gerar código SQL para Criar as Tabelas de uma Base de Dados que implemente o sistema de informação especificado em dreqL
27 de Abril de 2009
1ªetape de avaliação (do 2ºsemestre) do Projecto Integrado: estado de definição das linguagens DRAW e dreqL e de desenvolvimento dos respectivos processadores (geração do código SQL para criação das Tabelas correspondentes ao modelo descrito); aplicação aos Casos de Estudo.
04 de Maio de 2009
Conclusão da 1ªetape de avaliação (do 2ºsemestre) do Projecto Integrado.
Início do desenvolvimento do Gerador de Código associado à dreqL para realizar as funções de CRUD.
11 de Maio de 2009
Não houve aula devido às festividades do Enterro da Gata.
18 de Maio de 2009
Aula dada pelo JJ.
25 de Maio de 2009
Discussão e continuação do desenvolvimento do Gerador de Código associado à dreqL para geração das funções em Perl que invocam as instruções SQL para implementar as funções de CRUD (uma função por tabela).
02 de Junho de 2009
Discussão e continuação do desenvolvimento do Gerador de Código associado à dreqL para geração das funções em Perl que invocam as instruções SQL para implementar as funções de CRUD (uma função por tabela).
Preparação da 3ªcamada de interacção que vai usar objectos para ligar a descrição DRAW à dreqL oferecendo ao programador uma série de operações e interrogadores de alto nivel (próximo do modelo OO).
As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ter uma ideia do andamento dos vossos projectos.
Sugere-se a visita regular a esta página, já que poderão surgir actualizações/adições de sugestões de implementação.
27 de Outubro - Implementação de uma linguagem básica para a representação de grafos (por exemplo, inspirada na do graphviz), e uma ferramenta que gere um conjunto de CGI capazes de navegar sobre este grafo. A implementação desta etapa será iniciada nas aulas de 20 de Outubro.
3 de Novembro - Especificação de um conjunto base de tipos (STR, INT, TEXT, FLOAT, DATE, PASSWORD, EMAIL, URL). Adição sobre a linguagem da etapa anterior de parâmetros em cada aresta. Cada estado (CGI) deve mostrar um formulário por acção (aresta) existente. Por exemplo, se do vértice A partem duas arestas, uma com os campos Nome: STR, Morada: TEXT, e uma outra com os campos Nome: STR, Pass: PASSWORD, a CGI referente ao vértice A deverá apresentar dois formulários, um para cada uma das possíveis acções. Depois de escolhida uma acção, o estado de destino dessa aresta deverá imprimir os valores preenchidos no formulário anterior.
Sugestão 1: colocar em evidência os campos com nomes iguais, de forma a que sejam partilhados pelos dois formulários.
Sugestão 2: procurar módulos de validação/geração de formulários no CPAN como o HTML::FormFu ou o CGI::FormBuilder.
Sugestão 3: validar os valores submetidos de acordo com o seu tipo (ver sugestão 2, ou JavaScript).
10 de Novembro - Avaliação das etapas anteriores. Esta avaliação será feita das 11h00 em diante.
17 de Novembro - Adição de funções de processamento nas arestas do grafo. Estas funções estarão presentes num outro documento Perl (por exemplo num módulo Perl) e serão invocadas sempre que necessário. Assim, cada transição entre estados deixa de conter apenas os parâmetros, mas sim uma assinatura de uma função: nome da função, parâmetros necessários (que correspondem à etapa do dia 3 de Novembro), e o tipo de retorno da função. Quando um utilizador utilizar um formulário, os dados serão usados para invocar a função, e o resultado final será mostrado. Por exemplo: soma(a: INT, b:INT): INT
24 de Novembro - Não há garantias que uma função invocada durante a transição entre estados não dê erro. Ou seja, uma função de inserir que, teoricamente, não devolve nada (apenas altera o estado na base de dados) pode dar um erro. Como esta função, qualquer outra pode dar erro. Assim, implicitamente o DRAW deve considerar que todas as funções retornam um "maybe": o tipo especificado se não der erro, ou undef no caso de ter ocorrido um erro. Em caso de erro, a variável especial do Perl $@ será usada para guardar a mensagem de erro. O nodo de destino deverá verificar o retorno da função invocada. Se o valor for undef, a mensagem de erro é mostrada. Caso contrário, é mostrado o resultado de invocar a função.
1 de Dezembro - NOTA: Não há aula por ser feriado, mas há trabalho programado! Em caso de dúvidas procurem-nos durante o resto da semana, ou usem e-mail! Uma função não retorna necessariamente um tipo escalar. Por exemplo, uma pesquisa numa base de dados retorna uma lista de registos. Torna-se, pois, imprescindível adicionar tipos estruturados à linguagem DRAW:
Tuplo: uma sequência de tipos (básicos, para já!). Por exemplo: ProcuraRegisto(Nome: STR):(Nome: STR, Idade: INT, Morada: STR)
Lista: uma sequência homogénea de tipos (básicos ou tuplos). Por exemplo: Alunos():(Nome: STR, Idade: INT)*
Os exemplos usam uma sintaxe ilustrativa. Usem a vossa sintaxe!
8 de Dezembro - NOTA: Não há aula por ser feriado, mas há trabalho programado! Em caso de dúvidas procurem-nos durante o resto da semana, ou usem e-mail! A framework já deve ser capaz de suportar uma aplicação simples! Implementem uma aplicação simples usando a vossa própria framework. Isso permitirá encontrar erros ou limitações. Alguns exemplos de possíveis aplicações:
Lista telefónica: permitir adicionar nomes e números de telefone. Permitir apagar registos, e listar nomes de acordo com um padrão de pesquisa.
Dicionário Online: permitir consultar e adicionar palavras e respectivas definições. Permitir alterar a definição. Permitir listar palavras de acordo com um padrão de pesquisa.
Mais sugestões com o tempo...
15 de Dezembro - Avaliação das etapas anteriores.
Janeiro - Permitir que em cada transição, para além da invocação de uma função, seja possível propagar variáveis entre estados. Deste modo será possível, por exemplo, que o username de um utilizador introduzido na página de login possa ser propagado por todas as restantes páginas. Note-se que as variáveis propagadas só são mostradas se fizerem parte de um formulário. Os formulários deverão ser preenchidos caso existam definidas variáveis com os nomes dos campos respectivos.
Fevereiro - Permitir que as funções de transição retornem um tipo especial, chamado 'VARS' que corresponda a uma tabela associativa, que mapeie nomes de variáveis em valores. Isto permitirá, por exemplo, que depois de um formulário em que se peça a chave de uma tabela, seja possível mostrar o formulário para editar o registo da base de dados, preenchendo automaticamente o formulário com os respectivos valores.
Abril - Definição da linguagem DReqL? , e criação do Parser;
27 de Abril - Avaliação!
Propagação de variáveis, entre estados e a partir de funções
Gerador de código SQL para criação do modelo relacional a partir do DReqL? .
Exemplo 1:
Neste primeiro exemplo pretende-se analisar gramáticas,
escritas de acordo com a meta-gramática seguinte antlr3.g.
Para efeitos de análise pretende-se extrair, armazenar e visualizar a seguinte informação:
Tabela de identificadores
Grafo de dependências
Métricas de tamanho
Posteriormente pretende-se reescrever a gramática, eliminando produções inúteis e normalizando
a forma de recursividade removendo os operadores próprios do extended-BNF.
Questões colocadas nas aulas
Q1:
(2009.03.16) Diga qual a relação entre a Compreensão de Programas, usada a nível da Engenharia de Software (na manutenção, re-utilização e certificação de aplicações), e os sistema para Avaliação da Qualidade de Documentos Anotados eXVisXML ?
Q2:
(2009.03.16) Escolha um dialecto XML definido pelo grupo no módulo de PED do 1ºSemestre e escolha uma documento concreto escrito nesse dialecto XML e calcule manualmente as Métricas previstas no eXVisXML.
Fichas Práticas para resolver fora das aulas
Ficha I (Data de Entrega: 2009.XX.XX --- relatório em Literate Programming)
Calcule o backward slicing relativamente à instrução
printf("Maximo: %d\nMinimo: %d\n", max, min);
com respeito à variável max.
Calcule o forward slicing relativamente à instrução
int i, max, min;
com respeito à variável min.
int main()
{
int array[MAX];
int i, max, min;
for (i = 0; i < MAX; i++)
{
printf("Introduza numero:\n");
scanf("%d", &i);
}
max = array[0];
min = array[0];
for (i = 1; i < MAX; i++)
{
if (array[i] < min) { min = array[i]; }
if (array[i] > max) { max = array[i]; }
}
printf("Maximo: %d\nMinimo: %d\n", max, min);
return 0;
}
Calcule o System Dependency Graph para o seguinte programa:
void Add(int* a, int b)
{
*a = *a + b;
}
void Increment(int* z)
{
Add(z,1);
}
int main()
{
int sum = 0;
int i = 1;
while(i < 11)
{
Add(&sum,i);
Increment(&i);
}
printf("Sum: %d\n", sum);
}
Calcule o Program Dependency Graph para o seguinte programa:
Calcule o Control Flow Graph para o seguinte programa:
int main()
{
int n, i, sum, product;
scanf("%d",&n);
i=1;
sum=0
product=1;
while(i <= n)
{
sum += i;
product *= i;
i++;
}
printf("Sum: %d\n", sum);
printf("Product: %d\n", product);
}
Notas sobre AnTLR
Configurar CLASSPATH para permitir a invocação via linha de comandos (Windows): set CLASSPATH = %CLASSPATH%;pathANTLR; onde a pathANTLR é a respectiva path para o ANTLR (.jar).
Sobre a gramática family.g e a tree grammar familyTree.g, executar "Generate code".
Fazer download dos seguintes ficheiros Test.java e input.txt para a pasta "output" para onde foram gerados os ficheiros na alínea anterior.
Executar "javac *.java" e finalmente "java Test".
Fichas de Avaliaçao
Ficha IV
Após a pesquisa genérica sobre o tema "Transformação de Programas" estude em concreto uma das ferramentas enocntradas e prepare uma pequena apresntação à turna sobre ela: filosofia, campos de aplicação, funcionalidades e utilização.
Mostre, a título de exemplo, como implementaria o problema de transformação de um programa em C-- proposto na Ficha II.
Ficha III
Faça uma pesquisa sobre o tema "Transformação de Programas" e procure em concreto abordagens, ferramentas e aplicações.
Depois identifique lacunas de modo a defnir o projecto que vai levar a cabo para colmatar essas fraquezas.
Por fim implemente o sistema de transformação idealizado.
Ficha II
Partindo de uma versão "light" da gramática do C (C--) disponível no site do AnTLR, pretende-se que os alunos manipulem um dado programa de entrada, cumprindo os seguintes requisitos:
Construir a Tabela de identificadores;
Adicionar a respectiva declaração de tipo (infira o tipo se necessário), por cada variável usada não declarada.
Construir o Data Dependence Graph (DDG), usando a técnica de Single Static Assignment (SSA)
Construir o Control Flow Graph (CFG)
Ficha I
Com a intenção de levar os alunos a fazer um exercício de transformação de SW que os obrigue a pensar no problema, nas fases, nas estratégias e nas ferramentas -- percebendo a necessidade de fazer a análise sintatica e semantica, de construir uma representação intermédia (RI), tipo ASD+TabDefs, e de criar uma Base de Regras de Transformação e um Sistema de Reescrita de ASDs para facilitar a especificação e sistematizar a implementação -- pretende-se que crie uma ferramenta para fazer o upgrade de programas escritos em SQL1 para SQL2.
A questão está que em SQL1 não existe a instrução UPDATE TABLE para alterar um ou mais campos não-chave de um registo.
Isso leva a que a actualização é sempre feita à custa de uma remoção (REMOVE FROM T WHERE chv="X") seguida de uma inserção (INSERT INTO T (chv="X", a1=...) ).
O upgrader a implementar deve detectar os pares (REMOVE,INSERT) na mesma chaves e substituir por um UPDATE nessa mesma chaves.
Configurar CLASSPATH para permitir a invocação via linha de comandos (Windows): set CLASSPATH = %CLASSPATH%;pathANTLR; onde a pathANTLR é a respectiva path para o ANTLR (.jar).
Sobre a gramática family.g e a tree grammar familyTree.g, executar "Generate code".
Fazer download dos seguintes ficheiros Test.java e input.txt para a pasta "output" para onde foram gerados os ficheiros na alínea anterior.
Exemplo 1:
Escreva, em notação AnTLR, uma Gramática para uma linguagem que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
Acrescente Acções Semânticas (e depois Atributos) para calcular o Comprimento da Lista.
Exemplo 2:
Escreva, em notação AnTLR, uma Gramática para a famosa linguagem funcional Lisp(1) que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
Acrescente Atributos para:
calcular a quantidade de números e palavras da lista;
construir uma lista plana (todos os elementos ao mesmo nível) com os elementos originais associados ao nível a que aparecem;
verificar que todos os elementos da lista sejam do mesmo tipo do 1ºelemento
gerar código post-fix(2) como se a SExp fosse calculada numa máquina de stack.
(1) Considere para este exemplo que a gramática de uma Symbolic Expression (na qual assenta a linguagem Lisp) escrita numa notação geral (livre) é:
T = { num, pal, "(", ")" }
N = { SExp, SExplist }
S = SExp
P = {
p1: SExp --> num
p2: SExp --> pal
p3: SExp --> "(" SExplist ")"
p4: SExplist --> SExp SExplist
p5: SExplist --> &
}
(2) Considere que o código-máquina a gerar (para traduzir as S-Expressions para uma máquina de stack) é uma Linguagem Assembly simples apenas com as 3 instruções seguintes:
LAB pal // LABel significa que o operando 'pal' é uma constante
// alfanumérica (identificador)
CONS num // CONS significa que o operando 'num' é uma constante
// numérica
OPER op // OPER significa que o operando 'op' é um operador
Para melhor compreender o que se pretende, mostra-se abaixo o resultado de processar duas frases válidas da Linguagem Lisp:
Exemplo 3:
Nos tempos que correm, a utilização da linguagem SQL (Structured Query Language) é comummente aceite na comunidade informática
para a interrogação de bases de dados. São várias as ferramentas que fazem
uso desta linguagem: SQL Server, MySQL, Apache Derby, etc.
A gramática da linguagem SQL não é mais do que uma lista de comandos.
Pretende-se neste exercício que implemente a gramática da linguagem SQL com pelo menos 4 comandos à sua escolha.
Em relação aos comandos escolhidos, pode simplificar a sua sintaxe real, incluindo apenas a parte obrigatória (p.ex., no SELECT pode
omitir a parte ORDER-BY ou GROUP-BY).
Depois de implementar a sua gramática, recorrendo ao AnTLR, pretende-se que:
Construa a Árvore de Sintaxe Abstracta (ASA, ou em inglês AST) utilizando o mecanismo próprio do ANTLR;
Depois de ter a AST, deverá:
construir a Tabela de Identificadores (TabId) constituída pelos nomes das Tabelas e pelos nomes dos Campos
gerar uma S-Expr (Lisp) a partir da árvore (uma espécie de pretty-print da AST).
Exemplo 4:
Análise da Qualidade da Gramática de uma Linguagem para Gestão Científica II (Projectos de Investigação): enunciado
Questões colocadas nas aulas
Q1:
(2008.09.29) "Explique porque se constata, ao fazer debug visual no AnTLRWorks, que o parser gerado pelo AnTLR é Top-Down?"
Q2:
(2008.09.29) "O que é preciso acrescentar à Gramática da Lista de Números, do Exemplo 1, para calcular o comprimento da lista (ou contar os seus elementos)?"
Q3:
(2008.10.06) "Porque é que, após analisar o código produzido pelo ANTLR, se pode afirmar que o Parser gerado é um recursivo-descendente (RD) e não um LL?"
Q4:
(2008.10.06) "Porque é que a declaração dos atributos numa gramática AnTLR devia ser introduzida pela palavra-reservada 'synthesizes' e não 'returns' ?"
Q5:
(2008.10.18) Considere a gramática da linguagem Lisp definida na última aula (download aqui) para responder à seguinte questão. Substituindo a produção p4: sExpr -> '(' sExpr* ')' por p4: sExpr -> '(' sExpr sExpr+ ')' como procederia ao cálculo do atributo soma?
Q6:
(2008.10.20) "Porque é que o termo PROPAGAR 'expressa correctamente' o conceito de herança em Gramáticas de Atributos (GAs)?"
Q7:
(2008.10.27) "Os atributos podem ou não ser calculados de uma forma concorrente?"
Q8:
(2008.10.27) "Qual o princípio das GAs que um neto não pode herdar directamente de um(a) avô(ó)?"
Q9:
(2008.10.27) "Qual o inconveniente de alterar código automaticamente gerado?"
Q10:
(2008.10.27) "Qual a diferença de atitude entre JavaDoc (princípio) e Literate Programming?"
Q11:
(2008.11.10) "Qual a diferença entre definir o ';' como Parte integrante dum Comando, ou como Terminador de Comando ? e se for como Separador de Comandos ?"
Q12:
(2008.11.17) "Porque os compiladores actuais e reais não fazem correcção de erros?"
Q13:
(2008.11.17) "Prove, com o autómato LR(0), a diferença entre as seguintes situações: ';' como terminador e ';' como parte integrante do comando."
Q14:
(2008.11.24) "Porque é que o compilador não é um processo interactivo?"
Q15:
(2008.11.24) "Qual o ganho extra que advém do uso de editores sensíveis ao contexto? Diga também qual a diferença entre Editor Sensível ao Contexto e Editor Guiado pela Sintaxe."
Q16:
(2008.11.24) "Qual a diferença entre um compilador à la Pascal e um compilador à la C no que diz respeito ao tratamento de erros em run-time?"
Q17:
(2008.12.15) "Porque é que os Editores Dirigidos pela Sintaxe quase não se utilizam actualmente?"
Q18:
(2008.12.15) "Proponha uma estrutura para construir a Tabela de Identificadores a usar no processamento das Linguagens Orientadas a Objectos."
Q19:
(2009.01.05) Constrúa o Aut-LR(0) para a gramática (GIC) do Exemplo 4.
Q20:
(2009.01.05) Aplique todas as Métricas de Tamanho e de Forma já estudadas à GIC da linguagem Lisp (ver Exemplo 2).
Q21:
(2009.01.26) Explique porque, na prática, se usam 2 gramáticas para a mesma linguagem.
Q22:
(2009.01.26) Calcule as Métricas Lexicográficas e de Forma para as linguagens C, Pascal e XML, usando as gramáticas disponíveis no UltraGram.
Fichas Práticas para resolver fora das aulas
Ficha I (Data de Entrega: 2008.11.10 --- relatório em Literate Programming)
Geração de um Processador para Gestão Científica (Teses e Orientadores): enunciado
Ficha II: Faça um relatório detalhado, recorrendo ao Literate Programming, sobre o Exercício 3 descrito acima.
Ficha III (Data de Entrega: 2009.02.05 --- relatório em Literate Programming):
Pesquise na Internet o que há sobre Métricas para Avaliação da Qualidade em Gramáticas e Linguagens; integre no seu relatório um capítulo específico (mas claro e bem estruturado) sobre o estudo feito.
Avaliação da Qualidade de Gramáticas; Métricas
Retome a Gramática da DSL GCI apresentada no enunciado da Ficha I e estude a sua qualidade avaliando as Métricas que foram ensinadas nas aulas.
Pretende-se repetir a avaliação da sua qualidade depois de efectuar cada uma das 3 transformações abaixo (as alterações são não-cumulativas, isto é, são independentes e realizadas sempre sobre a gramática original):
(T1)
Reduza a gramática G eliminando as produções inúteis.
(T2)
Altere a gramática G de modo a simplificar o lado direito da produção p3, permitindo escrevê-lo
na forma:
p3: Pg --> TWiki.IdOrient TWiki.DescOrientac Periodo
(T3)
Altere a gramática G para agrupar numa única descrição todas as orientações do mesmo Orientador.
Exemplo 5:
A gramática independente de contexto GIC5, abaixo apresentada, define uma linguagem específica (DSL) para apoio à contabilização de todos os PIs de um dado grupo de investigação, permitindo descrever cada projecto concluído ou em
andamento dentro do grupo, financiado pela FCT, pelo GRICES ou pela ADI.
O Símbolo Inicial é PIs, os Símbolos Terminais são escritos em minúsculas (pseudo-terminais), ou em maiúscula
(palavras-reservadas), ou entre apóstrofes (sinais de pontuaçãao) e a string nula é denotada por &; os restantes serão os Símbolos Não-Terminais.
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> TWiki.InvPs
p3: | Lst ';' TWiki.InvPs
p4: TWiki.InvPs --> TWiki.SglInv TWiki.LstIds
p5: TWiki.SglInv --> id
p6: TWiki.LstIds --> TWiki.SglProj
p7: | TWiki.SglProj ',' TWiki.LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> TWiki.SglProj Desc FINANC Entidad Valor INIC Ano FIM Ano
p11: TWiki.SglProj --> id
p12: Desc --> str
p13: Entidad --> FCT
p14: | GRICES
p15: | ADI
p16: Ano --> num
p17: Valor --> num
sabendo-se ainda que os símbolos terminais variáveis e os comentários válidos são definidos pelas seguintes expressões regulares:
num : [0-9]+
id : [a-zA-Z]+
str : \"[^"]*\"
comentario1 : "%".*
Afira a qualidade de GIC5 calculando todas as métricas estudadas (tamanho, forma, lexicográficas).
Pretende-se repetir a avaliação da qualidade depois de efectuar cada uma das 3 transformações abaixo (as alterações são não-cumulativas, isto é, são independentes e realizadas sempre sobre a gramática original):
(GIC5T1) reescreva a gramática eliminando todas as produções unitárias e a recursividade (à custa de usar notação ex-BNF);
(GIC5T2) por questões de legibilidade e outras razões, não é desejável ter produções tão longas (com tantos símbolos do lado direito), como a p10 acima. Modifique a gramática G de modo a permitir reescrever p10 da seguinte forma:
p10: Proj --> TWiki.SglProj Desc Financiament Period
(GIC5T3) complete a gramática G para permitir incluir na descrição detalhada de cada projecto (símbolo Proj) a lista de todos os seus membros (sigla dos investigadores que nele colaboram);
Exemplo 4:
Repita o mesmo exercício do Exemplo 3 para medição e aferição de qualidade aplicado à sua gramática do Exemplo 1.
Exemplo 3:
Considere a gramática independente de contexto abaixo apresentada no Exemplo 2, designada por GIC2, e calcule as métricas dos 3 tipos de modo a poder pronunciar-se sobre a qualidade da GIC em causa.
Repita o mesmo exercício de medição e aferição de qualidade para as gramáticas GIC2T1, GIC2T2, GIC2T3, GIC2T4 e GIC2T5 obtidas da original (GIC2) por aplicação das sequintes transformações:
(T1) remova todas as produções unitárias;
(T2) transforme a gramática em LL(1);
(T3) reescreva a gramática usando ex-BNF, de modo a eliminar toda a recursividade directa ou indirecta;
(T4) reescreva a gramática de modo a permitir que a derivação do símbolo Descrição na produção p4 seja assim:
p4: Descricao --> TWiki.IdentObra '(' Autor ')' TWiki.IdentEdicao
(T5) altere a gramática de modo a permitir que cada livro tenha mais de um Autor.
----PedroRangelHenriques - 23 Jan 2010 - 23 Jan 2010
Exemplo 2:
A gramática independente de contexto, GIC, abaixo apresentada, define
uma linguagem específica para descrever os livros e CDs disponíveis
numa biblioteca e os estados
que lhe são associados (livres ou emprestados), à semelhança
do que acontece nas bibliotecas da UM.
O Símbolo Inicial é Biblioteca, os Símbolos Terminais são
escritos em maiúsculas (pseudo-terminais) ou em maiúscula
entre apostrofes (palavras-reservadas e sinais de pontuação),
e a string nula é denotada por &;
os restantes (sempre em minúsculas) serão os Símbolos Não-Terminais.
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
P5: Referencia --> id
p6: Tipo --> LIVRO
p7: | CDROM
p8: | OUTRO
p9: Titulo --> string
p10: Autor --> string
p11: Editora --> string
p12: Ano --> num
p13: Catalogo --> BGUM
p14: | ALFA
p15: | OUTRO
p16: Existencias --> LOCAL Local '(' Estados ')'
p18: Local --> string
p19: Estados --> Estado
p20: | Estados ',' Estado
p21: Estado --> TWiki.CodigoBarras Disponib
p22: TWiki.CodigoBarras --> id
p23: Disponib --> ESTANTE
p24: | PERMANENTE
p25: | EMPRESTADO TWiki.DataDev
p26: TWiki.DataDev --> Ano '-' Mes '-' Dia
p27: Mes --> num
p28: Dia --> num
Neste contexto e após analisar a GIC dada, responda às alíneas seguintes.
a) Escreva uma Frase válida da linguagem gerada pela GIC dada, mostrando a respectiva Árvore de Derivação.
b) Altere a gramática de modo a permitir que cada livro tenha mais de um Autor.
c) O par de produções p1/p2 define uma lista com recursividade à esquerda. Altere esse par para usar recursividade à direita e mostre, através das árvores de derivação, a diferença entre ambos os esquemas iterativos.
d) (TPC)Escreva as funções de um parser RD-puro (recursivo-descendente) para reconhecer o Símbolo Estado e seus derivados.
e) (TPC)Construa o estado inicial do autómato LR(0) pra gramática dada e os estados que dele saiem.
f) Transforme a GIC dada numa gramática tradutora, GT, reconhecível pelo AnTLR, para:
calcular e imprimir: o número de registos; e o número de livros existentes para cada registo.
o número total de livros com estado RESERVADO/PERMNENTE/ESTANTE.
identificar e listar por ordem alfabética os títulos dos livros.
verificar se não existem registos com a mesma referência.
g) repita a alinea anterior usando agora uma gramática de atributos, GA, recorrendo também ao AnTLR, para gerar o processador, criando primeiro uma árvore de sintaxe abstracta (ASA).
Exemplo 1:
Black é uma jovem empresa portuguesa que desenha, produz e
comercializa tudo para Góticos,
desde vestimentas, meias e sapatos até adereços e tatuagens.
A Black quer ter um sitio WWW, como agora é moda, mas
que seja alimentado facilmente por eles
(cada época que a colecção é alterada) sem contudo saberem nada de
HTML, nem terem eles de
montar o site.
Para isso pretende-se definir uma nova Linguagem que permita à
Black descrever a sua colecção.
Além da data da última actualização, a linguagem deverá permitir
descrever acessórios e vestimentas.
No caso de se tratar de um acessório, além da referência e descrição,
deverá ser possível incluir
o url para uma ou mais imagens (opcional), o tipo do acessório
(bracelete, colar, bolsa, anel, piercing);
o seu preço e o material de que é feito (pele, cabedal, tecido, metal).
No caso de se tratar de vestimenta, deverá ser possível diferenciar
entre Para Ele e Para Ela.
Além da referência e descrição da vestimenta, deverá ser incluído o
url para uma ou mais imagens,
o tipo da vestimenta (vestido, calça, t-shirt),
o preço e os tamanhos disponíveis (XS, S, M, L, XL).
Após ler o enunciado acima, pede-se que:
a) Escreva então uma Gramática Independente de Contexto, GIC, que especifique a Linguagem pretendida (note que o estilo da linguagem (mais ou menos verbosa) e o seu desenho são da sua responsabilidade).
b) Transforme a GIC acima em notação do AnTLR e gere um parser para reconhecer frases válidas da linguagem que criou e para detectar os erros em frases inválidas.
Questões colocadas nas aulas
Q1:
(2009-10-19) Investigue o que existe sobre métricas para avaliar a qualidade de gramáticas (apresente na próxima aula uma síntese das referências que encontrou).
Fichas Práticas para Avaliação (a resolver fora das aulas)
F4:
Escreva uma pequena monografia em formato de artigo, e entregue para efeitos de avaliação, sobre Editores Estruturais (structure-editors) e Editores Orientados pela Sintaxe (syntax-directed editors): resumo do conceito, abordagens e estado actual (nível académico e comercial).
F3:
Desenvolva um sistema (GraAlEditor) para edição, visualização e medição de gramáticas. Nesse sistema deve implementar os várioa parametros de aferição e as várias métricas estudadas.
F2:
Escreva uma pequena monografia em formato de artigo, e entregue para efeitos de avaliação, sobre Parsing: resumo do conceito, abordagens e algoritmos.
F1:
O resultado da investigação solicitada na Q1 acima, deve ser escrito em formato de artigo e entregue (após apresentação oral na aula) para efeitos de avaliação --- Classe Latex para formatar o documento a apresentar: llncs2e.zip
Exemplo 1:
Para apoio a um projecto de Genealogia pretende-se que crie uma linguagem simples que permita descrever Famílias.
Cada Família será formada pela identificação dos Progenitores (nome próprio e apelido, separados)
e pela lista dos filhos (apenas nome próprio).
Em fases posteriores pretende-se que a sua linguagem permita distinguir entre os Progenitores, a Mãe e o Pai, e depois a Data do casamento (para que o registo genealógico possa também suportar um projecto de investigação em Demografia Histórica).
Após ler o enunciado acima, pede-se que:
a) Escreva então uma Gramática Independente de Contexto, GIC, que especifique a Linguagem pretendida (note que o estilo da linguagem (mais ou menos verbosa) e o seu desenho são da sua responsabilidade). Essa GIC deve ir sendo sucessivamente transformada para mostrar diferentes formas de definir a mesma linguagem e ainda para fazer a evolução da linguagem inicial, conforme acima pedido.
b) Transforme a GIC numa Gramática Tradutora (GT) para calcular o número de filhos por casal, apresentando esse valor emparelhado com a data do casamento.
c) Transforme a GIC numa Gramática Tradutora (GT) para gerar instruções SQL que carreguem para a Tabela "Pessoas" de uma base de dados a informação de cada membro do agregado familiar: Chave, NomeProprio, Apelido, Género (se conhecido); Note que a Chave deve ser gerada pelo seu Processador e que o Apelido dos Filhos deve ser inferido também por esse Processador a partir dos Apelidos dos Progenitores.
d) Reescreva as GTs anteriores mas agora usando Gramáticas de Atributos (GA).
Exemplo 2:
Considere a linguagem de programação Lisp na qual um programa é uma Symbolic-Expression (SExp).
Sabe-se que uma SExp é um valor atómico (palavra ou numero) ou é uma lista e que cada elemento da lista é uma SExp.
A GIC abaixo define formalmente a linguagem Lisp, de acordo com a descrição acima:
T = { num, pal, "(", ")" }
N = { Lisp, SExp, SExplist }
S = Lisp
P = {
p1: Lisp --> SExp
p2: SExp --> num
p3: SExp --> pal
p4: SExp --> "(" SExplist ")"
p5: SExplist --> SExp SExplist
p6: SExplist --> &
}
Pede-se então que escreva uma Gramática de Atributos, GA, para
a) calcular o nível de aninhamento de cada lista (comece em 1 para a lista principal).
b) construir uma lista com todos os "operadores" presentes (considera-se "operador" o 1ºelemento de cada lista).
c) verificar se todos os "operadores" usados pertencem ao conjunto de operadores válidos de acordo com uma "biblioteca" fornecida no inicio.
d) verificar se o numero de argumentos ("operandos") com que cada operador é invocado condiz com a cardinalidade associada aos operadores válidos na referida "biblioteca".
e) substituir todos os "identificadores" usados como operandos pelo valor que lhes é associado nas operações "let".
f) gerar código post-fix para o programa ser executado por uma máquina-de-stack (que primeiro carrega os "operandos" e depois os transforma pelos "operadores", substituindo-os pelo resultado).
Exemplo 3:
Considere a linguagem para descrever uma Factura.
Sabe-se que uma Factura é composta por um cabeçalho e um corpo, e este é composto por um ou mais movimentos.
A GIC abaixo define formalmente uma primeira versão da linguagem Factura, de acordo com a descrição acima:
T = { id, str, num}
N = { Factura, Cabec, Corpo, TWiki.IdFact, TWiki.IdE, TWiki.IdR, ...... }
S = Factura
P = {
p1: Factura --> Cabec Corpo
p2: Cabec --> TWiki.IdFact TWiki.IdE TWiki.IdR
p3: TWiki.IdFact --> TWiki.NumFact
p4: TWiki.NumFact --> id
p5: TWiki.IdE --> Nome NIF Morada NIB
p6: TWiki.IdR --> Nome NIF Morada
p7: Nome --> str
p8: NIF --> str
p9: Morada --> str
p10: NIB --> str
p11: Corpo --> ...
}
Pede-se então que escreva uma Gramática de Atributos, GA, para
a) calcular o total por linha e total geral.
b) estender a linguagem original para permitir mais do que uma factura (calculando os mesmos totais).
c) modificar a linguagem de modo a suportar inicialmente a descrição do stock (referência, descrição, preço unitário e quantidade em stock); neste caso, cada linha só terá a referência e a quantidade vendida.
d) estender a semântica da nova linguagem de modo a também actualizar o stock.
Questões colocadas nas aulas
Q1:
(2010-10-18) ...
Fichas Práticas para Avaliação (a resolver fora das aulas)
F1 (2010-11-08):
Concluir as alíneas a) b) c) d) do Exercico 2 e entregar devidamente documentado.
F2 (2010-12-06):
Resolva o Exemplo 3 devidamente documentado para efeitos de avaliação.
F3 (2011-02-21):
Resolva o Exemplo da Calculadora com declarações devidamente documentado para efeitos de avaliação.
F4 (2011-03-01):
Resolva o Exercício do LogoLISS devidamente documentado para efeitos de avaliação
F5 (2011-03-21):
Faça um estudo sobre métricas e avaliação de qualidade em linguagens de Modelação / Especificação.
Notas e Links úteis
(2011-04-04) Monografias feitas pelos grupos de trabalho sobre Qualidade e Métricas:
(2010-11-08) Novas Scripts (funcionam em sistemas Unix) para agilizar a compilação em Silver:
O primeiro script, parse, deve ser colocado na directoria da gramática e permite testar o compilador correspondente a essa gramática com um ou vários ficheiros de input; para executar usar o seguinte comando:
parse input1 [input2 ...]
O segundo, cpgr, deve ser colocado na pasta grammars e duplica uma gramática para outra pasta garantindo a compilação; para executar usar o seguinte comando:
1) Descarregar o tracker
wget http://ftp.gnome.org/pub/GNOME/sources/tracker/0.7/tracker-0.7.21.tar.gz
2) Instalar um monte de dependências, entre as quais, o sqlite3
2.x) sudo apt-get install libsqlite3-dev
3) ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
4) make
5) [sudo make install]
6) ./src/tracker-utils/tracker-sparql
Exercícios 2010 01 18
http://etherpad.com/Bb4DSKte8x
Paper para o XATA (nova deadline: 14 DE MARÇO)
"faziam uma pequena script que recursivamente
extrair informação dos ficheiros que vai encontrando e guarda a parte
relevante num documento XML. Depois, todos esses documentos XML são
submetidos ao Solr para indexação. Por fim, usando o Solr, procuram-se
os documentos."
(a)Seleccione o título das músicas que contêm a palavra "Jesus".
//tit[contains( text() , 'Jesus')]
(b)Seleccione a província das músicas que contêm a palavra "Jesus" no título.
//prov[contains( ../tit/text() , 'Jesus')]//prov[../tit[contains( text() , 'Jesus')]]
(c)Seleccione o título de todas as músicas de Castelo Branco.
//tit[ contains( ../local/text() , 'Castelo Branco')]
(d)Seleccione todos os instrumentos referenciados no arquivo.
//intxt|//inst
(e)Seleccione o nome de todos os músicos referidos.
//musico
(f)Seleccione todos os instrumentos das músicas do Minho.
//inst[../prov/text() = 'Minho'] | //intxt[../prov/text() = 'Minho']
Exercícios e Exemplos para as aulas
Exemplo 1:
Considere o seguinte texto histórico (retirado de "Concelho Medieval de Monte Longo e o seu Foral", de José Carlos P. Gonçalves, ed. CMF, 2002, pg 223):
" Contratos de Emprazamento
Eis alguns rendimentos do Mosteiro de S. Gens de Monte Longo, provenientes dos contratos de emprazamento dos bens imóveis: casais, herdades e vinhas, que o mosteiro e os seus prelados possuíam e eram evidentemente uma fonte de proventos e de sustentação destes clérigos:
- Novembro de 1240,Contrato de emprazamento em três vidas de uma vinha sita em Lordelo, feito pelo prelado Gonçalo Gonçalves. Paga de foro anual uma libra de cera, no dia de S. Bartolomeu de S. Gens e a quarta parte do vinho.
- Setembro de 1247, emprazamento em uma vida da herdade sita no lugar de Infesta, Vale do Bouro, para edificar casas ou plantar vinha. Paga de foro anual uma libra de cera, no dia de S. Bartolomeu.
- Janeiro de 1249, emprazamento em três vidas de uma herdade sita em Villa Ouresi, termo de Celorico de Basto. Paga de foro anual um maravidi e para seus filhos dois aureos, no mesmo dia de S. Bartolomeu.
- Abril de 1250, emprazamento em uma vida do casal denominado: casal do meio casal de Trás-do-Rio, sito na Villa Bruela. Não refere o foro. "
Exemplo 2:
Considere o seguinte texto histórico (retirado de "Concelho Medieval de Monte Longo e o seu Foral", de José Carlos P. Gonçalves, ed. CMF, 2002, pg 224-225):
" Sentenças
Sentenças proferidas directamente relacionadas com o Mosteiro de S. Gens de Monte Longo e seus prelados.
- A 9 de Maio de 1238 temos uma sentença proferida pelo Arcebispo de Braga, D. Silvestre, decidindo a questão de padroado e hospitalidade entre D. Rodrigo Gomes de Briteiros e Gonçalo Gonçalves reitor da igreja de S. Gens de Monte Longo. Em resultado da inquirição que mandou fazer por D. Pedro Fernades de Villa Cova e D.Fernando Raimundo de Sousa, Cónegos de Braga, e por Pedro Ervilhom e Rodrigo Vides, Cavaleiros.
O Arcebispo julgou e sentenciou que D. Rodrigo Gomes de Briteiros não possuia o direito de padroado que pretendia ter.
Foi proferida a sentença na Igreja de S. Clemente.
- Sentença proferida em 26 de Agosto de 1335 por Lourenço Martins, dito calado, vedor dos Coutos e Honras de Entre-Douro e Minho, cargo para que foi nomeado por carta régia datada de Lisboa a 6 de Abril da era de 1335, mandando conservar à igreja de S. Gens do Monte Longo as honras que até então esta possuía nas freguesias de Armil, Estorãos, Ribeiros, Quinchães e S.Gens. A sentença foi precedida de inquirição testemunhal em que foram ouvidos: Pedro Lopes, juiz de Monte Longo, Acenço Esteves, tabelião de Monte Longo, e outros Bons-Homens.
- Em 26 de Maio de 1350 foi proferida uma sentença por João Peres, juiz de Monte Longo, acerca das águas do casal de Pardelhas.
A sentença foi lavrada em Ruivães por Vasco Esteves, tabelião de Monte Longo, sendo testemunhas entre outros Martim Affonso, tabelião do mesmo julgado. "
Questões colocadas nas aulas
Q1:
(2009-11-02) Após ler os textos dos dois exemplos acima, escolha um dos deles e:
a) Defina um contexto específico de trabalho, isto é um enquadramento e finalidade para o tratamento que quer dar aos documentos da família do exemplo escolhido;
b) Escreva então um DTD para definir um dialecto XML que lhe permita anotar documentos dessa família;
c) Anote o exemplo escolhido com o dialecto XML defindo na alínea anterior.
Fichas Práticas para Avaliação (a resolver fora das aulas)
F1:
....
Notas e Links úteis
museu.tgz: Ficheiros XML para a construção de um Museu
Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo GraphViz 2.03 do CPAN. Descobri que se trata de um pequeno bug, no ficheiro de configuração do módulo.
Portanto após instalar o GraphViz (www.graphviz.org) no Windows e o módulo GraphViz no CPAN (force install GraphViz):
Criar a base do sistema FOSSAT para receber e analisar pacotes de software.
Documentação
Relatório de Desenvolvimento detalhado, escrito em NoWed, de forma modular.
Apresentção
Acompanhada de um conjunto de slides em PPT ou PDF
Objectivos Específicos para a 1ª Fase:
PLN:
Criação de uma script para expandir os pacotes comprimidos cujas localizações serão passadas numa lista de parâmetros, colocando os ficheiros componentes em pastas diferenntes conforme seu tipo;
Criação de um Repositório de ficheiros ReadMe (ou de ChangeLog);
EG/ATS:
Desenvolvimento de um Processador de MakeFiles, com base na Gramática de Atributos da Linguagem Make e no Gerador AnTLR, que construa o Grafo de Dependências dos ficheiros e o represente graficamente usando Dot/Graphviz.
PED:
Defina um família de documentos anotados XML para armazenar o manifesto de cada pacote recebido e expandido.
Constrúa um sistme de pesquisa sofisticado, usando o SolR? ,para indexar uma colecção de manifestos (documentos XML)
Objectivos Específicos para a 2ª Fase:
PLN:
Construir um processador para páginas man do Unix/Linux. Considerar estes documentos definidos na própria notação do man, nmor formato pod (do perl) e em nrof. O processador deve extrair informação sobre o nome e pequen o resumo da ferramenta, noção de auotr, url e ainda sobre ferramentas relacionadas (secção "see also").
Para testar o processador desenvolvido os alunos devem usar todos os man do sistema operativo Linux. Como resultado devem produzir uma representação "pretty printed" da informação extraída de um ficheiro man.
EG/ATS:
Definir uma DSL (escrever a respectiva GIC) que permita:
descrever 1 ou mais pacotes de SW de acordo com os critérios definidos para o manifesto;
definir operações de Intersecção, União e Diferença entre manifestos de pacotes, dando um manifesto-resultado;
Usando uma GA, tomando por base a GIC anterior, e recorrendo ao AnTLR, implemente um procesador que leia um texto com descrições de pacotes e realize as operações indicadas. No fim deve gerar em XML o pacote-resultado por cada operação pedida.
PED:
Preparação conjunta de um artigo a submeter à XATA 2010.
Conjunto de Pacotes para a fase final do projecto:
No relatório final os alunos devem incluir uma secção com os resultados que obtém processando os 10 pacotes propostos a seguir.
Nessa secção devem incluir uma tabela com uma versão simplificada do manifesto produzido, que idealmente permitirá a um potencial programador ter toda a informação que precisa sobre esse pacote (o que faz, em que linguagem está escrito, qual a sua homepage, etc).
Devem ainda incluir nessa secção um comentário detalhado dos resultados obtidos.
Em relação a uma abordagem mais específica de uma dada comunidade de programadores, os alunos devem contactar o Prof. José João para verem como e que pacotes devem considerar.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Exploração de Ambientes de Trabalho usando os paradigmas explicitados nos items acima.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
monografias, com sinteses dos temas pesquisados;
trabalhos de implementação.
Bibliografia recomendada
Flemming Nielson, Hanne Riis Nielson, Chris Hankin, "Principles of Program Analysis. Springer, 452 pages, ISBN 3-540-65410-0, 2005.
Paradigmas para visualização de dados e de conhecimento:
visualização de informação, de dados e de software.
modelos de visualização.
visualização/navegação em árvores, grafos, hiper-cubos, petri-nets.
visualização/navegação em ontologias.
animação de algoritmos.
Resultados de Aprendizagem Específicos
Capacidade de construir front-ends poderosos para a análise de linguagens de programação (ambíguas ou não).
Capacidade de desenvolver software como uma tarefa de transformar programas e/ou especificações em implementações eficientes.
Capacidade de utilizar métricas e técnicas de transformação de programas para optimizar programas (e.g. cálculo parcial, detecção de código morto), efectuar debugging de programas (e.g. slicing), melhorar a estrutura dos programas (e.g. refactoring).
Capacidade de definir testes para software e testar automaticamente programas em diferentes linguagens de programação.
Capacidade para criar representações visuais adequadas à compreensão clara do conhecimento complexo detido.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
monografias, com sinteses dos temas pesquisados;
trabalhos de implementação.
Bibliografia recomendada
Flemming Nielson, Hanne Riis Nielson, Chris Hankin, "Principles of Program Analysis. Springer, 452 pages, ISBN 3-540-65410-0, 2005.
O paradigma da Programação baseada em Gramáticas (PG).
Conceitos sobre Gramáticas de Atributos (GA); definição formal.
Desenvolvimento modular/incremental de GAs (aproximação OO e AO).
Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para representar, armazenar e manipular eficientemente o Conhecimento com base em árvores de sintaxe ou grafos.
Capacidade para medir gramáticas e avaliar a sua qualidade.
1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber.
2. Conceitos sobre Gramáticas de Atributos (GA); definição formal; desenvolvimento de GAs (aproximação monolítica versus modular, incremental).
3. Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
3.1 Notações gramaticais;
3.2 Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
4. O paradigma da Programação baseada em Gramáticas (PG).
5. Qualidade de Linguagens; dimensões de avaliação e definição; critérios.
6. Qualidade de Gramáticas; dimensões de avaliação e definição; critérios.
6.1 Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
7. Ambientes para Manipulação de Gramáticas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para discutir a qualidade de Linguagens e Gramáticas,
Capacidade para medir Gramáticas e avaliar a sua qualidade.
Capacidade para desenvolver ambientes para Manipulação de Gramáticas.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992.
Waite & Carter, "An Introduction to Compiler Construction", HarperCollin? College Publishers, 1993.
James F. Power and Brian A. Malloy, "A metrics suite for grammar-based software". Journal of Software Maintenance and Evolution: Research and Practice, Vol 16, Nº 6, pp 405-426, 2004.
Julien Cervelley, Matej Crepin¨ek, Rémi Foraxy, Toma¸ Kosar, Marjan Mernik and Gilles Roussel, "On Defining Quality Based Grammar Metrics". Proceedings of the International Multiconference on Computer Science and Information Technology, pp. 651–658, 2009.
Tiago Alves and Joost Visser, "A Case Study in Grammar Engineering". Lecture Notes in Computer Science, Volume 5452/2009, pp 285-304, 2009.
John M. Roche, "Software metrics and measurement principles", SIGSOFT Softw. Eng. Notes, ACM, volume 19, number 1, 1994.
Tom Mens, Serge Demeyer, "Future trends in software evolution metrics", Proceedings of the 4th International Workshop on Principles of Software Evolution, ACM, 2001.
Norman Fenton, Martin Nail, "Software metrics: roadmap", Proceedings of the Conference on The Future of Software Engineering, ACM 2000.
1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber.
2. Conceitos sobre Gramáticas de Atributos (GA); definição formal; desenvolvimento de GAs (aproximação monolítica versus modular, incremental).
3. Processamento de Linguagens baseado em GAs (tradução dirigida pela semântica).
3.1 Notações gramaticais;
3.2 Geração de Programas (processadores de Linguagens, protótipos rápidos) a partir de GAs.
4. O paradigma da Programação baseada em Gramáticas (PG).
5. Qualidade de Linguagens; dimensões de avaliação e definição; critérios.
6. Qualidade de Gramáticas; dimensões de avaliação e definição; critérios.
6.1 Métricas para Avaliar a Qualidade das Gramáticas, quer enquanto formalismo de especificação e geração de linguagens, quer enquanto suporte à geração de programas.
7. Ambientes para Manipulação de Gramáticas.
Resultados de Aprendizagem Específicos
Capacidade para desenvolver especificações da sintaxe/semântica de linguagens e problemas em geral com gramáticas de atributos.
Capacidade para gerar programas (protótipos) usando ferramentas automáticas baseadas em gramáticas de atributos.
Capacidade para gerar ou utilizar ambientes de desenvolvimento estruturais e orientados à semântica.
Capacidade para discutir a qualidade de Linguagens e Gramáticas,
Capacidade para medir Gramáticas e avaliar a sua qualidade.
Capacidade para desenvolver ambientes para Manipulação de Gramáticas.
Metodologia de Ensino e Avaliação
As aulas de 2h tem sempre um cariz teórico-prático. Em cada aula:
no início é sempre feito um balanço da aula anterior e discutidos os trabalhos ou questões propostos;
depois algum tempo é dedicado a levantar questões teóricas e a apresentar as diferentes aproximações e metodologias que suportam a sua resolução; esta parte, embora de carácter teórico, desenvolve-se sempre em forma de diálogo com os alunos.
continua-se a aula numa parte mais prática em que os alunos são convidados a pesquisar e fazer uma sintese do que há já escrito sobre o assunto; ou então a desenvolver experimentação de ferramentas ou implementação de algorimtos.
A avaliação é feita com base em trabalhos entregues pelos alunos, resolvidos foras das aulas mas defendidos perante a turma. Os trabalhos para avaliação são de dois tipos:
Pittman & Peters, "The Art of Compiler Design: theory and pratice", Prentice-Hall, 1992.
Waite & Carter, "An Introduction to Compiler Construction", HarperCollin? College Publishers, 1993.
James F. Power and Brian A. Malloy, "A metrics suite for grammar-based software". Journal of Software Maintenance and Evolution: Research and Practice, Vol 16, Nº 6, pp 405-426, 2004.
Julien Cervelley, Matej Crepin¨ek, Rémi Foraxy, Toma¸ Kosar, Marjan Mernik and Gilles Roussel, "On Defining Quality Based Grammar Metrics". Proceedings of the International Multiconference on Computer Science and Information Technology, pp. 651–658, 2009.
Tiago Alves and Joost Visser, "A Case Study in Grammar Engineering". Lecture Notes in Computer Science, Volume 5452/2009, pp 285-304, 2009.
John M. Roche, "Software metrics and measurement principles", SIGSOFT Softw. Eng. Notes, ACM, volume 19, number 1, 1994.
Tom Mens, Serge Demeyer, "Future trends in software evolution metrics", Proceedings of the 4th International Workshop on Principles of Software Evolution, ACM, 2001.
Norman Fenton, Martin Nail, "Software metrics: roadmap", Proceedings of the Conference on The Future of Software Engineering, ACM 2000.
I.1 Introdução e Motivação para a área de Análise e Transformação de SW; sua inserção no contexto da Engenharia de Software:
noção de análise de código-fonte (outras hipóteses para análise de código intermédio ou máquina);
avaliação do software analisado -- métricas;
transformação como meio para melhorar o software avaliado.
I.2 As quatro grandes componentes envolvidas na disciplina:
extracção de informação do código (fase de análise);
armazenamento da informação extraída;
visualização (paradigmas/exemplos);
transformação.
P.1 Resolução do Exemplo 1:
análise do enunciado; estudo da meta-gramática do AnTLR proposta.
09 de Março de 2009
I.3 Recapitulação dos objectivos da disciplina:
Revisão dos principais conceitos ligados à Análise de Código, tomando como motivação a Comprensão de Programas (necessária à sua Manutenção, Re-utilização e Certificação):
Extracção nao-invasiva, estática vs Extracção invasiva, dinâmica.
Resultados da Extração e da Exploração do Conhecimento (Métricas).
P.1 Resolução do Exemplo 1 (cont.):
análise do enunciado; estudo da meta-gramática do AnTLR proposta; inicio da implementação de um Analisador muito básico.
TPC: terminar a escrita da 1ªfase do graAl, sistema para Análise de Gramáticas.
16 de Março de 2009
I.4 Recapitulação dos objectivos da disciplina:
Revisão dos principais conceitos ligados à Análise de Código e à Comprensão de Programas, extrapolando agora as ideias para a Compreensão e Avaliação de Documentos Anotados em XML:
Apresentação do Sistema para Análise de Documentos eXVisXML; os conceitos de extração de informação, Visualização, Slicing e Métricas subjacentes; as funcionalidades implementadas.
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das duas abordagens mais avançadas, apresentadas:
pelo Hélder (para cálculo de várias Métricas, com base em atributos H/S, um para cada métrica);
pelo César (para desenho do Grafo de Dependências, com base na construção de uma Tabela de Identificadores que recolhe toda a informação extraída durante o parsing da gramática).
TPC1: terminar a escrita da fase de análise do graAl.
TPC2: responder às seguintes questões Q1 e Q2 sobre o eXVixXML (a apresentação está disponível aqui).
23 de Março de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das abordagens seguidas por alguns dos grupos.
apresentação e discussão do sistema genérico para análise de gramáticas a partir de XAGra em desenvolvimento por Sérgio e Hugo Areias.
TPC1: terminar a escrita da fase de análise do graAl.
TPC2: responder à seguinte questão Q1 e Q2 sobre o eXVixXML.
30 de Março de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
estudo detalhado das abordagens seguidas pelos vários grupos.
TPC1: terminar a escrita da fase de análise do graAl relativa às restantes métricas e pensar na transformação conducente à optimização da gramática
20 de Abril de 2009
A Aula desta semana foi totalmente dedicada a avançar com o Projecto Integrado (processamento da Linguagem dreqL com vista à geração de código SQL).
27 de Abril de 2009
P.1 Resolução do Exemplo 1 (cont.) -- O Analisador de GramáticasgraAl:
conclusão da 1ªetape (construção da Tabela de Identificadores, do Grafo de Dependências entre Símbolos e das Métricas de Tamanho e Forma): avaliação do trabalho desenvolvido pelos vários grupos.
Introdução ao Slicing (Backward vs Forward, Estático vs Dinâmico); critério de Slicing.
Slicing de Gramáticas.
04 de Maiode 2009
P.1-f2 Exemplo 1 - fase2 -- extensão do Analisador de GramáticasgraAl para suportar o slicing de Gramáticas a partir de um dado símbolo:
discussão dos resultados atingidos pelos grupos para o caso de BW slicing (visualização em formato texto corrido e por coloração de caminhos sobre o Grafo de Dependências).
Slicing de Gramáticas com Atributos e suas regras de cálculo.
11 de Maio de 2009
Não houve aula devido às festividades do Enterro da Gata.
18 de Maio de 2009
Aula dada por JJ.
25 de Maio de 2009
P.1-f2 Exemplo 1 - fase2 -- extensão do Analisador de GramáticasgraAl para suportar o slicing de Gramáticas a partir de um dado símbolo:
discussão dos resultados atingidos pelos grupos para o caso de BW slicing (visualização em formato texto corrido e por coloração de caminhos sobre o Grafo de Dependências), no caso do FW slicing e do slicing de Gramáticas com Atributos e suas regras de cálculo.
proposta de nova extensão do graAl com a capacidade para transformar uma dada gramática eliminando produções inuteis e normalizando a recursividade.
Extensão do graAl com a capacidade para transformar uma dada gramática eliminando produções inuteis e normalizando a recursividade; discussão dos resultados atingidos pelos grupos que já implementaram tal funcionalidade.
Discussão sobre a data e o formato da avaliação
Construção de uma artigo colectivo (para enviar à CoRTA'2009) sobre o graAl.
Apresentação do Laboratório online GamaSlicer para verificação de componentes Java anotados em JML e realização de Slicing Semântico (specification-based, assertion-based e contract-based): arquitectura, discussão da abordagem e exemplificação.
Apresentação do sistema integrado para edição, análise, transformação e slicing de programas em C-- desenvolvido pelo aluno José Luis Freitas, usando a representação intermédia como uma hierarquia de classes discutida na aula anterior.
24 Maio de 2010
Apresentação do sistema genérico para análise, visualização e exploração de documentos anotados em XML, eXVisXML: arquitectura, discussão da abordagem e exemplificação.
Discussão da resolução do exercício prático da última aula backward slice de um programa em C--: representação intermédia como uma hierarquia de classes.
17 Maio de 2010
Apresentação do sistema genérico para visualização e animação de programas, Alma: arquitectura, discussão da abordagem e demonstração.
Proposta de exercício prático: backward slice de um programa em C--
Formulação de um exemplo:
Em relação ao programa C-- abaixo
0 void fun() {
1 int a, b, flag;
2 float res;
3 scanf("%d",&flag);
4 scanf("%d %d",&a,&b);
5 if (flag)
6 { res = a/2; }
7 else
8 { res = b/2; }
9 printf("%f",res);
10 printf("%f",res++)
}
Faço o slice em relação aos critérios:
SC1: ( i8, {b} )
SC2: ( i8, {res} )
SC3: ( i9, {res} )
SC4: ( i10,{res} )
03 Maio de 2010
Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 3ªfase.
26 de Abril de 2010
Introdução formal ao Slicing:
o conceito de Slicing Estático clássico, Backward e Forward.
Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
System Dependence Graph (SDG) --- construção de exemplos
19 de Abril de 2010
Introdução informal ao Slicing:
o papel do Slicing na Análise de Programas -- como instrumento de debug; como instrumento de cálculo incremental.
Apresentação e Definição formal de algumas estruturas clássicas para Análise de Programas:
Control Flow Graph (CFG); construção de um exemplo.
Program Dependence Graph (PDG); construção de um exemplo.
System Dependence Graph (SDG).
12 de Abril de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
FermaT: pelos alunos André Santos e Miguel Regedor --- PDF.
Discussão (à laia de balanço dos trabalhos práticos e estudos anteriores) em torno dos requisitos desejáveis para uma Ferramentas de Transformação de Programas (FTP, ou PTT) tendo sido identificados os seguintes:
Existem duas abordagens possíveis que podem ser integradas no mesmo ambiente de transformação:
1 - Filtro de texto para pequenas transformações dirigidas ao padrão. Neste caso era importante poder integrar a definição de gramaticas incompletas (fuzzy?) no filtro, tipo:
X -> ... (Decls) ...
2 - Processador de linguagens com a definição da gramática da linguagem do programa que se tenciona transformar. Neste caso, a transformação poderá ocorrer caso a regra seja verificada sintacticamente e também semanticamente (a pensar) e deve ser especificada na forma:
Padrão(regra) -> Acção
Deve haver a possibilidade de integrar transformações pre-definidas (standard?); por exemplo:
substituição sistemática de palavras-chave;
troca de ordem de sub-árvores.
15 de Março de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
DMS: pelos alunos André Santos e Miguel Regedor --- PDF.
Distribuição de novas tarefas pelos 4 grupos, na sequência das apresentações feitas; desenvolvimento de uma solução para a transformação de C-- nas 3 primeiras ferramentas e procura de uma alternativa para o último caso.
Resolução de exercícios:
Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos alunos José Luis Freitas (inserção na escrita) e Daniel Rocha (inserção na árvore).
08 de Março de 2010
Apresentação e discussão sobre ferramentas de transformação e análise de programas. Ferramentas apresentadas:
Stratego/XT pelos alunos Jorge Mendes e Daniel Rocha --- PDF.
01 de Março de 2010
Resolução de exercícios:
Ficha II -- o 2ª requisito (cont.): detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos: definição clara dos objectivos a atingir com este estudo (comparação de "filosofias" de trabalho e de capacidades oferecidas); discussão da possibilidade de esrita de um artigo conjunto sobre esta temática, para submissão ao CoRTA2010.
22 de Fevereiro de 2010
Resolução de exercícios:
Ficha II -- o 2ª requisito: detecção de usos de identificadores não-declarados em programas escritos na linguagem C-- e geração de declarações; análise e discussão das propostas apresentadas pelos vários grupos.
Distribuição de 4 ferramentas de análise e transformação de código pelos 4 grupos:
Jorge + Daniel: Stratego
José Luís + Hélder: TXL
André + Miguel: DMS
André + Márcio: Meta-Environment/Rascal
25 de Janeiro de 2010
Cont. da Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas": discussão de tipos de transformação; ferramentas.
Introdução à novidade do AnTLR para transformação de programas por Tree Pattern Matching: conceito básico e exemplo.
18 de Janeiro de 2010
Discussão com os alunos sobre os trabalhos realizados com o tema "Transformação de Programas".
Discussão de tipos de transformação:
Translation: nesta categoria incluem-se os seguintes processos - program synthesis, program migration, reverse engineering e program analysis.
Rephrasing: nesta categoria incluem-se os seguintes processos - Program Normalization, Program Optimization, Program Refactoring, Program Reflection e Software Renovation.
Discussão dos paradigmas introduzidos pelos alunos Márcio Coelho e André Rocha:
Mesmo input, diferentes outputs;
Diferentes inputs, mesmo outputs;
Mesmo input, mesmo outputs;
Diferentes inputs, diferentes outputs.
11 de Janeiro de 2010
Continuação da Resolução da Ficha da aula anterior.
04 de Janeiro de 2010
Resolução de exercícios:
Ficha II -- continuação da discussão sobre o 1ª requisito: implementação em AnTLR da construção de uma Tabela de Identificadores para a linguagem C--; análise e discussão das propostas apresentadas por todos os grupos que, de uma forma geral:
implementaram a TabId como uma HashMap em Java indexado por uma chave dupla formada pelo Id e pelo seu Scope, recorrendo a um VectorArray para guardar os respectivos atributos;
usaram uma Tree-Grammar (GA Abstracta);
recorreram a atributos herdados para fazer descer na árvore a TabId actual e o Scope;
recorreram a atributos sintetizados para trazer para a raiz da árvore a nova TabId e as características de cada identificador (de variável, de parâmetro, ou de função) encontrado.
Para continuar a resolver a Ficha II (transformação do código fonte, para reorganizar declarações de variáveis face ao seu uso), foi apreentada a nova, muito recente, funcionalidade do AntLR (3ª estratégia disponível) que permite implementar a transformação usando Tree-Patterns.
14 de Dezembro de 2009
Resolução de exercícios:
Ficha II -- continuação da discussão sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, possíveis implementações deste mapping em Java; implementação em AnTLR, possíveis estratégias clássicas (usando apenas 1 GA concreta, ou usando uma Tree-Grammar abstracta com atributos).
07 de Dezembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; sistematização das diferentes abordagens possíveis (cálculo durante o parsing e cálculo em fase posterior, sobre a AST).
Resolução de exercícios:
Ficha II -- discussão muito profunda e detalhada sobre o 1ª requisito: construção de uma Tabela de Identificadores em C--, conceito, atributos a armazenar e estrutura; aproximação conceptual/abstracta e estratégia de implementação em AnTLR.
30 de Novembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; implementação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
Resolução de exercícios:
Ficha I -- Discussão/comparação das soluções já desenvolvidas por alguns dos alunos e continuação do trabalho nesse problema.
Ficha II -- apresentação do enunciado.
23 de Novembro de 2009
Transformação e manipulação de Programas usando gramáticas de atributos; implentação em AnTLR com LAGs, ou com construção e travessia de Árvores (TreeGrammars em AnTLR).
GAs de ordem superior em AnTLR: uso de um atributo do tipo Tree.
Resolução de exercícios:
Ficha I: Conversão de um programa de SQL1 (sem UPDATES) para SQL2 (substituindo sequências de REMOVE/INSERT na mesma chaves por UPDATE).
16 de Novembro de 2009
Classificação das Gramáticas de Atributos e sua relação com o cálculo---*PureS, LAG, OAG*; o impacto das classes no Grafo de Dependências Global e o problema da determinação de uma ordem topológica (e total); as classes e os Geradores de Compiladores (Calculadores de Atributos); manuseamento de gramáticas OAG em AntLR -- as TreeGrammars.
Resolução de exercícios sobre gramáticas de atributos em AnTLR:
Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai (conclusão deste exerc+icio da aula anterior).
Processar uma Declaração de Variáveis em Pascal (lista de identificadores seguidos do seu tipo) inserindo na Tabela de Identificadores os pares (IdVar? ,IdTipo).
9 de Novembro de 2009
Resolução de exercícios sobre gramáticas de atributos em AnTLR:
Processar uma lista de items (números inteiros ou palavras) e calcular a soma dos números encontrados na respectiva lista. Porém o somatório só deve iniciar-se após surgir a 1ª ocorrência da palavra "agora"; a resolução em AnTLR deste exercício pode ser encontrada aqui: (listaAgora.g). No fim da aula foi proposta, como trabalho para casa, uma alteração a este exercício em que a palavra "agora" actuasse como "toggle", i. é, começa a adicionar quando aparece a palavra "agora" e deixa de adicionar quando chega ao fim ou aparece de novo a palavra "agora" e assim sucessivamente para as próximas corrências dessa palavra.
Processar uma lista de nomes próprios (correspondentes a Filhos de uma família), seguida do nome e apelido da mãe, bem como do nome e apelido do pai. Para cada um dos filhos na lista, gerar uma instrução SQL para adionar a uma base de dados um registo para o filho compondo o seu nome próprio com o apelido do pai seguido do apelido da mãe (à espanhola).
2 de Novembro de 2009
Introdução à construção de Árvores de Sintaxe Abstractas (AST, Abstract Syntax Tree) em ANTLR. Construção da gramática em AnTLR com ouput AST para o exemplo da aula anterior: (declarations.g)
Introdução à utilização de Tree Grammars em AnTLR. Introdução dos operadores ->, ^ e !
Construção da respectiva Tree Grammar para o exemplo anterior: (declarationsAST.g)
Introdução de atributos, na Tree Grammar, para cálculo da Tabela de Identificadores.
26 de Outubro de 2009
Resolução das alínea f1-4) do Exercício 2 com recurso às Gramáticas de Atributos.
Discussão com os alunos das diferenças em relação às Gramáticas Tradutoras.
19 de Outubro de 2009
Resolução da alínea f1,2) do Exercício 2 ( a alínea f3) ficou como trabalho de casa e f4) será desenvolvida na próxima aula):
criação de uma Gramática Tradutora, juntando Acções Semânticas (com um ou mais atributos sintetisados associados ao LHS) à GIC optimizada escrita pelo Daniel (ver aqui GICexe2) para calcular e imprimir diversos resultados que se podem extrair de frases concretas da linguagem-fonte;
exploração de todas as facetas do ambiente AnTLR-Works.
12 de Outubro de 2009
Resolução do Exercício 1 (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
I.1 Introdução e Motivação para a área de Análise e Transformação de SW.
11 de Outubro de 2010
Resolução do Exercício 1 sobre Gramáticas, GIC e GT (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
18 de Outubro de 2010
Continução da Resolução do Exercício 1 sobre Gramáticas, GIC e GT (enunciado descrito nas Fichas Práticas de Engenharia Gramatical).
25 de Outubro de 2010
Continução da Resolução do Exercício 1 sobre Gramáticas, agora para introdução às GA e à ferramenta Silver (enunciado descrito nas Fichas Práticas de Engenharia Gramatical; e conteúdo da aula descrito no Módulo de EG (sumários)).
08 de Novembro de 2010
Resolução do Exercício 2 sobre Gramáticas, para introdução às GA e à ferramenta Silver (enunciado descrito nas Fichas Práticas de Engenharia Gramatical; e conteúdo da aula descrito no Módulo de EG (sumários)).
15 de Outubro de 2010
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver, agora com um novo exemplo da calculadora de expressões "dc -- desktop calculator languag" (conteúdo da aula descrito no Módulo de EG (sumários)).
22 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis? , Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JGR, a compensar ainda em dezembro).
29 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis? , Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JGR, a compensar ainda em dezembro).
06 de Dezembro de 2010
Resolução do Exercício 3 sobre Linguagens e Gramáticas, para sedimentar os conhecimentos já introduzidos sobre GAs. Análise da estrutura fisica de uma factura para escolha dos simbolos não-terminais e terminais e dos atributos que permitam descrever o processamento que traduza a semântica desejada; construção das variantes linguisticas pedidas por extensão ou adaptação da gramática; definição das regras para cálculo dos atributos sintetizados.
Continuação da discussão sobre ferramentas para geração de processadores de linguaguens como o sistema Silver, o LISA ou o AnTLR --- a linguagem de programação para escrita das regras de cálculo dos atributos: escolha entre uma linguagem própria e específica ou uma GPL (General Purpose Language), vantagens e inconvenientes.
13 de Dezembro de 2010
Introdução à ferramenta para geração de processadores de linguaguens AnTLR --- filosofia geral, alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Utilização do Exercício 2 sobre Linguagens e Gramáticas (a linguagem Lisp e as SExpressions), para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
03 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) --- alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Utilização do Exercício 3 sobre Facturas para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
10 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) --- alguma regras básicas e as funcionalidades do ambiente de desenvolvimento AnTLRWorks. Desenvolvimento de um compilador para uma linguagem de cálculo de expressões, para sedimentar os conhecimentos já introduzidos sobre GAs e para explicar o uso do AnTLR.
17 de Janeiro de 2011
Introdução à ferramenta para geração de processadores de linguaguens AnTLR (cont.) e ao ambiente de desenvolvimento AnTLRWorks; sedimentação dos conhecimentos já introduzidos sobre GAs.
Cont. do Desenvolvimento de um compilador para uma linguagem de cálculo de expressões: escolha dos atributos herdados e sintetizados para análise semântica estática---construção da TabId por recolha dos pares <identificador,tipo>; verificação de re-declarações; type-checking .
**2º SEMESTRE***
21 de Fevereiro de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks.
Sedimentação dos conhecimentos já introduzidos sobre GAs e introdução aos exercícios sobre Análise de Programas---enunciado do problema para as próximas aulas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR.
Cont. do Desenvolvimento de um compilador para uma linguagem de cálculo de expressões: escolha dos atributos herdados e sintetizados para análise semântica estática---construção da TabId por recolha dos pares <identificador,tipo>; verificação de re-declarações; type-checking .
28 de Fevereiro de 2011
Apresentação teórico-prática do trabalho de mestrado do Hugo Areias: retargetting da ferramenta AnTLR de modo a gerar Processadores de Linguagens em Perl --- o problema, a estratégia (ou o caminho) seguido, os resultados atingidos.
Discussão da forma como usar Perl para se comportar como o Java (a run-time Library).
07 de Março de 2011
Não houve aula --- 2ªf de Entrudo.
14 de Março de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks.
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR.
21 de Março de 2011
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita de um programa para transporte da gramática Yacc para AnTLR (cont. do projeto).
28 de Março de 2011
Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto).
04 de Abril de 2011
A ferramenta para geração de processadores de linguaguens AnTLR e o ambiente de desenvolvimento AnTLRWorks: introdução aos construtores para criar árvores de sintaxe abstrata com atributos (AST) e para sua manipulação; filosofia de trabalho usando o par "grammar / tree-grammar".
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto).
11 de Abril de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos).
a noção de Bloco e do Nível de aninhamento; o âmbito de validade das declarações (scope) e as regras de visibilidade.
18 de Abril de 2011
Não houve aula --- férias de Páscoa.
25 de Abril de 2011
Não houve aula --- feriado nacional comemorativo da Revolução dos Cravos.
02 de Maio de 2011
Aula usada para apresentação e avaliação parcial do Projeto Integrado (PI) -- 3ª fase (apresentação teórica).
09 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos) --- exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por alguns dos grupos.
16 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; escrita da gramática AnTLR e eliminação de conflitos (cont. do projeto); definição de atributos para construção da Tabela de Identificadores (definição da sua estrutura em termos genéricos) --- exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por alguns dos grupos.
23 de Maio de 2011
Cont. do projeto para Sedimentação dos conhecimentos já introduzidos sobre GAs e exercícios sobre Análise de Programas: análise de programas em LogoLISS; exploração das facilidades do AnTLR para construir e manipular AST; discussão da solução seguida por cada grupo.
Manhã totalmente dedicada ao projeto integrado (PI).
06 de Junho de 2011
Manhã parcialmente dedicada ao fecho de EG e ao projeto integrado (PI).
13 de Junho de 2011
Fecho da Disciplina, Balanço final:
Análise, Representação Intermédia (tabela de identificadores, árvore de sintaxe (decorada com atributos), grafos de fluxo e de dependências), Estratégias de Travessia e Transformações.
Análise Estática versus Análise Dinâmica; Instrumentação de Código e Inspétores.
Slicing: conceito e definição; estático versus dinâmico; sintático versus semântico; aplicações tradicionais e novas aplicações (verificação de programas anotados com contratos); Slicing de código fonte e de código intermédio e slicing de outras linguagens; slicing de documentos XML.
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.
Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Apresentação da Ferramenta para geração de compiladores (que será usada ao longo de todo o ano) AnTLR e do ambiente de desenvolvimento associado AnTLRWorks usando o Exemplo 1.
06 de Outubro de 2008
Discussão das respostas enviadas pelos alunos às questões Q1 e Q2.
Continuação da exploração do Gerador AnTLR usando como base o Exemplo 1: análise do código Java gerado; o algoritmo de parsing com backtracking e sem backtracking mas com o valor de K (para o cálculo do comprimento do LookAhead) explicitado.
Conclusão da resolução em AnTLR do Exemplo 1, recorrendo agora a um atributo sintetizado para calcular o comprimento da Lista; teste da solução, quer com a forma recursiva não LL(1), em BNF-puro, da gramática, quer com a versão iterativa, em BNF-extendido; incremento da solução com um novo atributo para cálculo da soma dos valores da lista (os atributos intrínsecos dos Terminais "text", "line" e "column").
Gramática Recursiva não-LL(1) (BNF-puro)
Lista --> "[" Nums "]"
Nums --> int
| int',' Nums
Gramática Iterativa (BNF-extendido) --- com resolução em ANTLR
options { k=2; }
lista : '[' nums ']' {
System.out.println("Soma: " + $nums.soma);
System.out.println("Contador: " + $nums.conta);
}
;
nums returns [int soma, int conta=0]
: a = INT {
$soma = Integer.parseInt($a.text);
$conta++;
}
(',' b = INT { $soma += Integer.parseInt($b.text);
$conta++;
}
)*
;
INT : ('+' | '-')? ('0'..'9')+
;
WS : (' ' | '\t' | '\n' | '\r') { channel=HIDDEN; };
Inicio da resolução do Exemplo 2: construção de um parser para a gramática da linguagem Lisp (versão iterativa em BNF-extendido).
Gramática Recursiva LL(1) (BNF-puro)
Lisp --> SExp
SExp --> num
| pal
| "(" SExplist ")"
SExplist --> SExp SExplist
| &
Gramática Iterativa (BNF-extendido)
Lisp --> SExp;
SExp --> num
| pal
| "(" SExp* ")"
13 de Outubro de 2008
Análise das respostas dadas pelos alunos às questões Q3 e Q4; discussão detalhada sobre os conceitos básicos do parsing Top-Down: condição (de não-ambiguidade) LL(1); Algoritmo Recursivo-Descendente (RD) e Algorimto guiado-por-tabela (iterativo e genérico) LL(1).
Continuação da resolução do Exemplo 2:
definição dos atributos para resolver a primeira questão: calcular a quantidade de números e palavras da lista
definição dos atributos para resolver a segunda questão: construir uma lista plana (todos os elementos ao mesmo nível) com os elementos originais associados ao nível a que aparecem.
20 de Outubro de 2008
Análise das respostas dadas pelos alunos à questão Q5 e discussão muito detalhada da solução: sistematização do processo de definição de regras de cálculo em produções iterativas.
Continuação da resolução do Exemplo 2:
definição dos atributos e condições de contexto para validar a semântica estática da linguagem (neste exemplo, verificar que todos os elementos são do tipo do primeiro elemento da lista); discussão de alternativas para construir os atributos relevantes e para colocar as condições de contexto, mais acima ou mais abaixo na árvore), como se vê nos exemplos seguintes.
inicio da geração de código
Como funciona, mas não se deve fazer:
grammar TWiki.LispCheckFirstBad;
/*
verificar que todos os elementos da lista sejam do mesmo tipo do 1.elemento
*/
@header {
import java.util.ArrayList;
}
lisp returns[ArrayList<String> array_out]
@init{ TWiki.ArrayList<String> array_in = new TWiki.ArrayList<String>(); }
: sExp[array_in] { String a = $sExp.array_out.get(0);
if (a.equals("int") && $sExp.array_out.contains("pal")) {
System.out.println("FALSE");
}
else if (a.equals("pal") &&
$sExp.array_out.contains("int")) {
System.out.println("FALSE");
}
else {
System.out.println("TRUE: " + a);
}
}
;
sExp[ArrayList<String> array_in] returns [ArrayList<String> array_out]
: INT { $array_in.add("int"); $array_out = $array_in;}
| PAL { $array_in.add("pal"); $array_out = $array_in; }
| '('
( vez_anterior = sExp[array_in] {
$array_in = $vez_anterior.array_out; } )*
')' { $array_out = $array_in; }
;
Como funciona e se deve fazer para ficar uma solução elegante e eficiente:
grammar TWiki.LispCheckFirstGood;
/*
verificar que todos os elementos da lista sejam do mesmo tipo do
primeiro elemento
*/
lisp returns[String type_out]
@init{ String type_in = new String(""); }
: sExp[type_in] { System.out.println($sExp.type_out); }
;
sExp[String type_in] returns [String type_out]
: INT { if ($type_in.equals("pal") ||
$type_in.equals("FALSE: pal")) {
$type_in = "FALSE: pal";
}
else {
$type_in = "int";
}
$type_out = $type_in;
}
| PAL { if ($type_in.equals("int") ||
$type_in.equals("FALSE: int")) {
$type_in = "FALSE: int";
}
else {
$type_in = "pal";
}
$type_out = $type_in;
}
| '('
( vez_anterior = sExp[type_in] {
$type_in = $vez_anterior.type_out; } )*
')' { $type_out = $type_in; }
;
27 de Outubro de 2008
Análise das respostas dadas pelos alunos à questão Q6; discussão detalhada sobre os conceitos básicos da gramática de atributos, distinguindo a dispersão (propagação) de valores pela árvore abaixo (para transmissão de informação contextual de pai para filhos, ou entre irmãos) da síntese do significado da frase (inferindo informação semântica a partir dos valores extraídos da frase através das folhas da árvore de derivação); Reflexão alongada sobre todo o processo de cálculo de atributos, o que levou à formulação das questões Q7 a Q9.
Utilização de Literate Programming (LitPrg) na resolução das Fichas Práticas para produção do respectivo relatório (que constituirá o objecto de avaliação neste módulo de EG); apresentação do conceito e do princípio de desenvolvimento subjacente; referência a algumas ferramentas de LitPrg e introdução ao Nuweb; formulação da Q10.
Conclusão da resolução do Exemplo 2:
definição dos atributos para resolver a última questão, gerar código post-fix para representar um programa Lisp, discussão de alternativas e implementação do processo de tradução.
Introdução ao Exemplo 3: processamento de linguagens através da construção explícita e travessias da Árvore de Sintaxe Abstracta (AST)
apresentação das facilidades do AnTLR para construção de uma AST durante o parsing.
03 de Novembro de 2008
Análise das respostas dadas pelos alunos à questão Q7 a Q10: continuação da discussão sobre cálculo de atributos (inferência de uma ordem parcial, sua totalização para o cálculo sequencial e detecção da independência para o cálculo concorrente); questões práticas associadas à utilização de programas gerados automaticamente; distinção clara entre escrever um documento que expões um problema e discute a sua resolução através do desenvolvimento de um programa (Literate Programming) próprio do acto de escrever um programa e o comentar detalhadamente (incluindo alguma meta-informação nos comentários, como é o caso do JavaDoc).
Processamento de Linguagens através da construção explícita de uma Árvore de Sintaxe Abstracta (AST) e suas travessias
Continuação do estudo das facilidades do AnTLR para construção de uma AST durante o parsing -- ilustração através da aplicação de vários operadores ao Exemplo 2 (Linguagem Lisp).
Exploração da facilidade anterior para fazer o slicing sintático da Árvore de Derivação ('Parsing Tree') concreta e completa do texto-fonte.
Introdução às Tree-Grammars para definir Travessias à AST que a processam -- construção de Sistemas de Produção (sistena de regras Condição-Reacção, por pattern-matching nos nodos da árvore) para transformação do texto-fonte.
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo.
Sistematização da utilização de Gramáticas Tradutoras (GT) vs Gramáticas de Atributos (GA); cálculo de atributos on-the-fly (durante o parsing) e cálculo a-posteriori através de travessias à árvore. Ainda na utilização de GAs, discussão da utilização da Tradução Dirigida pela Semântica conjugada com a construção da Árvore de sintaxe abstracta.
Discussão sobre a forma de construir um relatório. Cada relatório deverá ser composto por:
Introdução
Problema a resolver e Objectivos
Análise
Concepção da Solução
Implementação
Conclusão
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
17 de Novembro de 2008
Discussão breve (a propósito da Q11) do Tratamento de Erros num Compilador. Referência a cada uma das fases:
Detecção (implícita nos algorítmos de cada uma das 3 etapes de Análise;
Sinalização do erro: localização, diagnóstico e terapia;
Correcção (os modelos formais de correcção) e Recuperação (Ponto-de-Recomeço e Terminais-Fidedignos).
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
Linguagens Visuais, VisualLISA:
Exemplificação dos Editores/compiladores gerados automaticamente com o Devil: VisualTopicMaps e VisualDRAW;
Apresentação e Testes com a Linguagem Visual para especificação de Gramáticas de Atributos, VisualLISA;
Resposta a um inquérito sobre a "usabilidade" deste editor.
24 de Novembro de 2008
A propósito da Q12, continuação da discussão mais aprofundada sobre Tratamento de Erros no Processamento de Linguagens e mais específicamente num Compilador:
ainda, Correcção versus Recuperação.
referência a Editor Sensível ao Contexto e Editor Guiado pela Sintaxe.
Continuação da resolução do Exemplo 3: elaboração da CFG (GIC) com os comandos SQL escolhidos por cada grupo; construção da respectiva AST e início da definição de transformações.
Linguagens Visuais, VisualLISA:
Definição de Linguagem Visual e Gramática Visual; exemplo da gramática da VisualLISA? em notação PLG (Picture Layout Grammar).
Breve introdução ao sistema gerador de Editores/Reconhecedores de Linguagens Visuais, DEVIL (Development Environment for Visual Languages), baseado no Eli e no gerador de compiladores para gramática de atributos LIGA.
Apresentação da especificação completa da Linguagem VisualLIGA incluindo a sintaxe, semântica estática, geração de código e o editor.
15 de Dezembro de 2008
A propósito da Q14, Q15 e Q16 continuação da discussão aprofundada sobre Tratamento de Erros no Processamento de Linguagens (mais específicamente num Compilador), bem como sobre Edição Assistida:
erros de run-time (versus erros em compile-time).
discussão do binómio Editor Sensível ao Contexto e Editor Guiado pela Sintaxe.
Introdução à Qualidade de Linguagens (QL) e Qualidadade de Gramáticas (QG); Métricas:
Discussão sobre critérios para Avaliar a QG e a QL.
Critérios apresentados para avaliar a QG:
Legibilidade da gramática (identificadores, documentação, meta-linguagem),
como formalismo que descreve uma linguagem,
como especificação de um processador;
Características da linguagem gerada pela gramática
Portabilidade da gramática (nas 2 perspectivas acima);
Adaptabilidade (para Evolução da Linguagem);
Eficiência como suporte à Geração Automática dum Processador para a respectiva Linguagem (tempo+memória);
Eficiência do Reconhecedor (Processador) gerado com base nessa gramática(tempo+memória).
Critérios apresentados para avaliar a QL:
Legibilidade dos textos (programas) escritos nessa linguagem;
Expressividade;
Abstracção;
Consistência;
Unicidade;
Documentação;
Extensibilidade / Adaptabilidade;
Escalabilidade.
Métricas de Tamanho relativas à gramática:
Numero de Terminais (#T)
Numero de Não-Terminais (#NT)
Numero de Produções (#P)
Numero de Produções Inuteis (#PI)
Numero Médio de Alternativas para um NT ($Alt-med)
Comprimento Médio do RHS de cada Produção ($RHS-med)
05 de Janeiro de 2009
Dado faltar um grande número de alunos, não foram discutidas as últimas questões Q17 e Q18.
Para colmatar a discussão sobre o tratamento de erros (recuperação) e preparar as métricas relativas à qualidade das gramáticas, foi feita uma introdução muito sucinta ao conceito de Autómato Determinista de Parsing LR(0) e ao processo de construção:
exemplo apresentado: Aut-LR(0) da linguagem Lisp (Exemplo 2);
exemplo proposto para fazer para a próxima aula (ver Q19).
Introdução à Qualidade de Linguagens (QL) e Qualidadade de Gramáticas (QG); Métricas:
Métricas de Tamanho ao Parser:
Numero de Funções do Parser RD (#NT+#T)
Dimensão da Tabela de Parsing LL(1) (#NT*(#T+1))
Dimensão da Tabela de Parsing LR(0) (#Q*(#T+1) + #Q*#NT)
Métricas de Forma:
Forma de Recursividade (Directa, Indirecta, Mista)
Tipo de Recursividade (Esq, Dir, Dir-LL, Mista, Implicita)
Notação (BNF, exBNF, Mista)
Factor de Coesão -- Dependência entre Símbolos (FanOut? / FanIn? )
12 de Janeiro de 2009
Construção do Autómato Determinista de Parsing LR(0) para a gramática do Exercício 4.
Cálculo das métricas de tamanho para duas variantes da gramática Lisp (Lispv1.g e Lispv2.g) anteriomente apresentadas na aula (BNF/EBNF).
Estudo do impacto de cada uma das variantes quanto à legibilidade de G como geradora de L e quanto à legibilidade em termos de manutenção. Relativamente às duas versões da gramática do Lisp apresentadas, os alunos concordaram que a 2ª versão era mais legível e mais fácil de manter do que a 1ª.
Preparação de um artigo a submeter ao CoRTA2010: discussão dos contributos dos 4 grupos em termos de funcionalidades (visualização incluida, ou não) e da arquitectura;
Próxima tarefa: desenvolver a secção especific distribuida a cada grupo.
24 Maio de 2010
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: discussão dos contributos dos 4 grupos, definição dos objectivos do artigo e da sua estrutura (secções e seu conteúdo) e escrita do Abstract;
Próxima tarefa: definir e enviar proposta de arquitectura.
17 Maio de 2010
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: foi decidido que cada grupo enviaria por email um Abstract completo em inglês até 5ªf à noite para ser depois feita a fusão (PRH+DCC).
Introdução às Métricas para Gramáticas de Atributos
Métricas de Tamanho:
(MTA1) #A = #AS + #AH
(MTA2) #RC (regras de cálculo)
(MTA3) #CC (condições de contexto)
(MTA4) #RT (regras de tradução)
(MCA1) FanIN (valor médio considerando os GDLocais a todos as p em P)
(MCA2) FanOUT (valor médio considerando os GDLocais a todos as p em P)
Revisão dos elementos já disponíveis para avaliação dos alunos a este módulo.
Revisão dos Critérios para avaliar a qualidade das gramáticas, GIC e GA: usabilidade (em termos de leitura, derivação de frases e manutenção); e eficiência (em termos reconhecedor/processor gerado, e geração) e métricas; Discussão da relação das métricas obtidas com a qualidade da linguagem.
GraAlEditor, um editor-analisador de Gramáticas:
Preparação de um artigo a submeter ao CoRTA2010: definição do título, abstratct e estrutura (LaTeX distribuido por email para todos os alunos).
26 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
André Rocha e Márcio Gomes
19 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
Daniel Rocha e Jorge Mendes
12 Abril de 2010
GraAlEditor, um editor-analisador de Gramáticas (ficha 3):
Discussão dos Trabalhos realizados pelos grupos:
André Santos e Miguel Regedor
José Luis Freitas e Helder Silva
15 Março de 2010
Cálculo das métricas para a gramática do Exemplo 5 :
Original
GIC5T1
GIC5T2
#T
14
14
14
#NT
12
7
14
#P
17
9
19
#PU
5
0
5
#R
3
0
3
$RHS
38/17=2.24
27/9=3
40/19=2.11
$ALT
17/12=1.42
9/7= 1.29
19/14=1.36
#Modulos
1
1
1
Fan-in
Fan-out
#RD
12+1=13
7 +1 = 8
14+1=15
#TabLL1
12*14=168
7*14= 98
14*14= 196
F1
3+0
0+0
3+0
F2
2+1+0
0+0+0
2+1+0
F3
3+0
0+3
3+0
L1
8E + 4NE em NT, 3E + 0 NE em Tv
5E + 2NE em NT, 3E + 0 NE em Tv
10E + 4NE em NT, 3E + 0 NE em Tv
L2
11E+0NE em PR+Sinais
...
...
L3
0F + 2I
...
...
L4
1 +0+0
...
...
TWiki.GIC5T1 (GIC5 sem produções unitárias e usando exBNF)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> TWiki.InvPs (';' TWiki.InvPs)*
p3: TWiki.InvPs --> id TWiki.LstIds
p4: TWiki.LstIds --> id (',' id)*
p5: Projs --> (Proj '.')+
p6: Proj --> id str FINANC Entidad num INIC num FIM num
p7: Entidad --> FCT
p8: | GRICES
p9: | ADI
TWiki.GIC5T2 (GIC com a produção p10 modificada para ficra mais curta)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> TWiki.InvPs
p3: | Lst ';' TWiki.InvPs
p4: TWiki.InvPs --> TWiki.SglInv TWiki.LstIds
p5: TWiki.SglInv --> id
p6: TWiki.LstIds --> TWiki.SglProj
p7: | TWiki.SglProj ',' TWiki.LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> TWiki.SglProj Desc Financiament Period
p11: Financiament --> FINANC Entidad Valor
p12: Period --> INIC Ano FIM Ano
p13: TWiki.SglProj --> id
p14: Desc --> str
p15: Entidad --> FCT
p16: | GRICES
p17: | ADI
p18: Ano --> num
p19: Valor --> num
TWiki.GIC5T3 (GIC5 permitindo incluir a lista de todos os Membros do projecto)
p1: PIs --> RESUMO Lst DETALHE Projs '.'
p2: Lst --> TWiki.InvPs
p3: | Lst ';' TWiki.InvPs
p4: TWiki.InvPs --> TWiki.SglInv TWiki.LstIds
p5: TWiki.SglInv --> id
p6: TWiki.LstIds --> TWiki.SglProj
p7: | TWiki.SglProj ',' TWiki.LstIds
p8: Projs --> Proj '.'
p9: | Projs Proj '.'
p10: Proj --> TWiki.SglProj Desc FINANC Entidad Valor INIC Ano FIM Ano MEMBROS Membros
p11: Membros --> TWiki.SglInv
p12: | TWiki.SglInv ',' Membros
p13: TWiki.SglProj --> id
p14: Desc --> str
p15: Entidad --> FCT
p16: | GRICES
p17: | ADI
p18: Ano --> num
p19: Valor --> num
8 Março de 2010
Cálculo das métricas para a gramática do Exemplo 5:
Projectos
#T
14
#NT
12
#P
17
#PU
5
#R
3
$RHS
38/17=2.24
$ALT
17/12=1.42
#Modulos
1
Fan-in
Fan-out
#RD
12+1=13
#TabLL1
12*14=168
F1
3+0
F2
2+1+0
F3
3+0
L1
8E + 4NE em NT, 3E + 0 NE em Tv
L2
11E+0NE em PR+Sinais
L3
0F + 2I
L4
1 +0+0
1 Março de 2010
Introdução às métricas de forma:
Forma da recursividade (F1):
Recursividade Directa: X -> α X ou X -> X α
Recursividade Indirecta: X -> α Y β e Y -> γ X
Recursividade Mista
Tipo de recursividade (F2):
Recursividade Esquerda: X -> X α
Recursividade Direita: X -> α X
Recursividade Direita-LL: X -> α Y e Y -> ε | α Y
Recursividade Mista
Notação (F3):
BNF
EBNF
Misto
Introdução às métricas lexicográficas
Identificadores dos Terminais (T) e Não-Terminais (NT) esclarecedores (L1)
Palavras-Peservadas (PR) e Sinais esclarecedores (L2)
Identificadores + Literais da Linguagem Flexíveis (L3)
Possibilidade de inserir comentários (L4)
Comentários inline
Comentários blocos
Comentários mistos
Cálculo de Métricas de Forma e Lexicográficas para estudo comparativo de gramáticas:
métricas para a Gramática Black, GBla (EG -- Exemplo 1);
métricas para a versão original (v0) da Gramática Biblioteca, GBib (EG -- Exemplo 2).
Black
Biblioteca (v0)
F1
0+0
2+0+0
F2
0+0+0
2+0+0
F3
0+3
2+0
L1
NT: 8E(1) + 2NE(2), T: 2E + 0NE
NT: 19E + 1NE (DataDev), T: 3E + 0NE
L2
PR(3): 25E + 0NE, Sinais: 5E + 0NE
12E + 0NE, Sinais: 6E + 0NE
L3
2
NA
L4
NA(4)
NA
(1) Esclarecedores
(2) Não Esclarecedores
(3) Palavras-Reservadas
(4) Não aplicável
22 Fevereiro de 2010
Cálculo de métricas para estudo comparativo de gramáticas:
métricas para a versão original (v0) da Gramática Biblioteca (2ª coluna da Tabela da aula anterior).
métricas para a versão v1 da Gramática Biblioteca, após remoção das produções unitárias.
métricas para a versão v2 da Gramática Biblioteca, após alteração para gramática LL(1).
métricas para a versão v3 da Gramática Biblioteca, após alteração para uso de notação ex-BNF.
métricas para a versão v4 da Gramática Biblioteca, alterada de modo a permitir que cada livro tenha mais de um Autor.
Conclusão: deixando de lado v4 que altera a Linguagem original, é interessante notar que a gramática menos clara (mais dificl de aprender e manter) é a v1, a qual conduz ao Reconhecedor menor e pt mais eficiente; quanto às outras três (v0, v2 e v3) são muito semelhantes, sendo a versão LL(1) a maior e tv por isso menos "ágil" e a versão ex-BNF um pouco menor e consequentemente mais fácil de usar. Curiosamente, a versão v4 estende a Linguagem original, mantendo uns indicadores de qualidade muito semelhantes aos das suas antecessoras (v0, v2 e v3).
(v0)
(v1)
(v2)
(v3)
(v4)
#T
18+3=21
21
21
21
21
#NT
20
11
22
20
21
#P
28
19
30
26
30
#PU
9
0
9
9
9
#R
2
2
2
0
3
$RHS
55/28=1.96
46/19 = 2.42
58/30 = 1.93
56/26=2.15
57/30=1,9
$ALT
28/20=1.4
19/11 = 1.73
30/22 = 1.36
26/20=1.3
30/21=1.43
#Modulos
1
1
1
1
1
#RD
20+21=41 ou 20+1=21
11+1=12
22+1
20+1
21+1
#TabLL1
(20+21)*21 ou 20*21=420
11*21 = 231
22*21=462
20*21=420
21*21=441
Gramática da v4
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> Referencia Tipo Titulo '(' Autores ')'
Editora Ano Catalogo
...........
p28: Autores --> Autor
p29: | Autores ',' Autor
Gramática da v3
p0: Biblioteca --> Registos
p1: Registos --> Registo (',' Registo)*
p2: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p3: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
p4: Referencia --> id
p5: Tipo --> LIVRO
p6: | CDROM
p7: | OUTRO
p8: Titulo --> string
p9: Autor --> string
p10: Editora --> string
p11: Ano --> num
p12: Catalogo --> BGUM
p13: | ALFA
p14: | OUTRO
p15: Existencias --> LOCAL Local '(' Estados ')'
p16: Local --> string
p17: Estados --> Estado (',' Estado)*
p18: Estado --> TWiki.CodigoBarras Disponib
p19: TWiki.CodigoBarras --> id
p20: Disponib --> ESTANTE
p21: | PERMANENTE
p22: | EMPRESTADO TWiki.DataDev
p23: TWiki.DataDev --> Ano '-' Mes '-' Dia
p24: Mes --> num
p25: Dia --> num
Gramática da v2
p0: Biblioteca --> Registos
p1: Registos --> Registo TWiki.RegistosAux
p2: TWiki.RegistosAux --> ',' Registo
p3: |
p4: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p5: Descricao --> Referencia Tipo Titulo '(' Autor ')'
Editora Ano Catalogo
p6: Referencia --> id
p7: Tipo --> LIVRO
p8: | CDROM
p9: | OUTRO
p10: Titulo --> string
p11: Autor --> string
p12: Editora --> string
p13: Ano --> num
p14: Catalogo --> BGUM
p15: | ALFA
p16: | OUTRO
p17: Existencias --> LOCAL Local '(' Estados ')'
p18: Local --> string
p19: Estados --> Estado TWiki.EstadosAux
p20: TWiki.EstadosAux --> ',' TWiki.EstadosAux
p21: |
p22: Estado --> TWiki.CodigoBarras Disponib
p23: TWiki.CodigoBarras --> id
p24: Disponib --> ESTANTE
p25: | PERMANENTE
p26: | EMPRESTADO TWiki.DataDev
p27: TWiki.DataDev --> Ano '-' Mes '-' Dia
p28: Mes --> num
p29: Dia --> num
Gramática da v1
p0: Biblioteca --> Registos
p1: Registos --> Registo
p2: | Registos ',' Registo
p3: Registo --> '[' REGISTO Descricao EXISTENCIAS
Existencias ']'
p4: Descricao --> id Tipo string '(' string ')'
string num Catalogo
p5: Tipo --> LIVRO
p6: | CDROM
p7: | OUTRO
p8: Catalogo --> BGUM
p9: | ALFA
p10: | OUTRO
p11: Existencias --> LOCAL string '(' Estados ')'
p12: Estados --> Estado
p13: | Estados ',' Estado
p14: Estado --> id Disponib
p15: Disponib --> ESTANTE
p16: | PERMANENTE
p17: | EMPRESTADO TWiki.DataDev
p18: TWiki.DataDev --> num '-' num '-' num
25 Janeiro de 2010
Discussão da relação das métricas obtidas com a qualidade da linguagem.
Cálculo de métricas para estudo comparativo de gramáticas:
métricas para a Gramática Black, GBla (EG -- Exemplo 1);
métricas para a versão original (v0) da Gramática Biblioteca, GBib (EG -- Exemplo 2).
Black
Biblioteca (v0)
#T
30+2=32
18+3=21
#NT
10
20
#P
25
28
#PU
0
9
#R
0
2
$RHS
60/25=2.4
55/28=1.96
$ALT
2.5
28/20=1.4
#Modulos
1
1
#RD
10+32=42 ou 10+1=11
20+21=41 ou 20+1=21
#TabLL1
(10+32)*32=1344 ou 10*32=320
(20+21)*21 ou 20*21=420
Conclusão: verificou-se que as gramáticas são sensivelmente do mesmo tamanho (GBla com mais terminais, mas Gbib com mais não-terminais e produções), mas que GBla (com lados direitos mais longos, mais alternativas e com um grafo de dependências mais fechado) é mais complexa que a GBib, sendo esta ultima é mais clara/mais fácil de ler/manter (mais produções unitárias e GD mais simples). Em termos do Reconhecedor, o da segunda (GBib) é um pouco maior (devido a mais NTs e Prods).
18 Janeiro de 2010
Continuação da definição de critérios para avaliar a qualidade das gramáticas: usabilidade (em termos de leitura, derivação de frases e manutenção); e eficiência (em termos reconhecedor/processor gerado, e geração).
Critérios definidos em relação a uma Gramática Independente do Contexto (GIC):
complexidade em termos de dependências entre símbolos
modularidade
Critérios definidos em relação a uma Gramática de Atributos (GA):
identificadores dos símbolos
nº de atributos (nº de regras de cálculo)
complexidade dos atributos
complexidade das acções semânticas
nº, complexidade e localização das condições de contexto
notação
recursividade
suporte em gramática concreta/gramática abstracta
complexidade em termos de dependências entre símbolos
Métricas para GIC:
Tamanho: #T, #NT, #P, #PU, média do nº de símbolos no lado direito das produções ($RHSmed), nº médio de alternativas para cada símbolo ($Altmed), número de módulos (#mod), nº dependências entre símbolos usando o grafo de dependências (fan-in, fan-out), tamanho das tabelas de parsing LL(1) = ((N+T)*T), tamanhos das tabelas de parsing LR = (Q*T)+(Q*N), tamanho do recursivo descendente = (#N+#T)
Forma:
Lexicográficas:
11 Janeiro de 2010
Discussão sobre técnicas de parsing com base nos relatórios apresentados pelos alunos. Revisão dos conceitos de First, Follow, Lookahead, Parsers Top-Down e Bottom-Up.
Revisão dos critérios para aferir a Qualidade de Linguagens.
Introdução aos critérios para aferir a Qualidade das Gramáticas.
Uma gramática G tem 2 fins: Geradora de Linguagem; e Geradora de um Processador de Linguagem. Enquanto Geradora de Linguagem pretende-se que seja fácil de compreender, derivar e manter. Enquanto Geradora de um Processador pretende-se obter: eficiência do processador gerado; e eficiência do processo de geração.
4 Janeiro de 2010
Discussão da relevância do ambiente de desenvolvimento (IDE) para a avaliação de uma Linguagem: embora não sendo considerado um critério de aferição de linguagens por não ser uma característica intrínseca e sim um factor externo complementar, reconheceu-se a sua importância neste estudo visto que influencia directamente a utilização da linguagem (um mau IDE não promove a utilização da linguagem e vice-versa). Foram, entretanto, identificadas as seguintes facetas que caracterizam a qualidade de um IDE:
editor assistido (orientado pela sintaxe, ou com auto-complete, syntax highlight);
editor assistido pela semântica (inteli-sense, snippets);
compilador/interpretador (rapidez, nível de optimização, tratamento de erros);
verificador sintáctico e semântico;
debugger;
gestor de projectos;
controlador de versões;
importador/integrador de bibliotecas (se possível, referenciador para bibliotecas);
apresentador de dicas e sinópsis e leitor de documentação;
possibilidade de configuração e extensibilidade das funcionalidades.
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL8 --- Credibilidade/ Fiabilidade (Reliability): type checking, exception handling
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL5 - Extensibilidade
-
+
-
-
CL6 - Escalabilidade
x
=
=
=
CL7 - Paradigma/Filosofia
impl
impl
impl
impl
CL8 - Credibilidade/ Fiabilidade
-
+
+
-
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL5 - Extensibilidade
bás
bás-
bás+
evol
NA
bás
evol
evol
evol
evol
evol
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
CL7 - Paradigma/Filosofia
I
I
I
S
D
D
D/L
OO/I
OO/I
OO/I
D/F
CL8 - Credibilidade/ Fiabilidade
B
R
S
S
NA
NA
R
B
MB
MB
B
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não, R - Reduzido
bás - básico, evol - evoluído, impl - implica
I - Imperativo, D - Declarativo, L - Lógico, F - Funcional, S - Scripting, OO - Orientado a Objectos
Extensbilidade:
1. Léxico: aliasing (associar um termo/palavra a outra palavra) --- Extensão ao nível do vocabulário
2. Sintáctico
3. Semântica: linguagem de objectos permite estender a semântica (o uso de bibliotecas contribui para a extensibilidade da linguagem).
14 Dezembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL5 --- Extensibilidade
CL7 --- Paradigma/Filosofia
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL5 - Extensibilidade
-
+
-
-
CL6 - Escalabilidade
x
=
=
=
CL7 - Paradigma/Filosofia
impl
impl
impl
impl
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL5 - Extensibilidade
bás
bás-
bás+
evol
NA
bás
evol
evol
evol
evol
evol
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
CL7 - Paradigma/Filosofia
I
I
I
S
D
D
D/L
OO/I
OO/I
OO/I
D/F
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não
bás - básico, evol - evoluído, impl - implica
I - Imperativo, D - Declarativo, L - Lógico, F - Funcional, S - Scripting, OO - Orientado a Objectos
Extensbilidade:
1. Léxico: aliasing (associar um termo/palavra a outra palavra) --- Extensão ao nível do vocabulário
2. Sintáctico
3. Semântica: linguagem de objectos permite estender a semântica (o uso de bibliotecas contribui para a extensibilidade da linguagem).
07 Dezembro de 2009
Aula ocupada com a apresentação, discussão e avaliação do Projecto Integrado (PI) -- 1ªfase.
30 Novembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL6 --- Escalabilidade
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
CL6 - Escalabilidade
x
=
=
=
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
+
CL6 - Escalabilidade
B
+/-
B
B?
NA
N
N
B
B
N
N
MB - Muito Bom, B - Bom, S - Satisfaz, NA - Não Aplicável, N - Não
bás - básico, evol - evoluído
23 Novembro de 2009
Continuação da definição de critérios para aferir a Qualidade de Linguagens:
CL2 --- Documentação:
definição deste critério: comentários --- in-line, multi-line, DSL em comentário (Aumenta doc e produz manuais --- JavaDoc, MSDN, etc; aumenta robustez e produz provas --- VCGen); meta-informação obrigatória.
CL3 --- Unicidade: forma única de escrita.
CL4 --- Consistência
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1 - Expressividade
+
+
+
x
CL2 - Documentação
x
-
+
x/-
CL3 - Unicidade
+
-
+
+
CL4 - Consistência
+
+
+
x
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#/Java
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
CL2-Documentação
bás
bás-
evol
evol-
evol-
bás-
bás-
evol-
evol
bás
CL3-Unicidade
x
x
x
x
+/-
+/-
x
x
x
x
CL4-Consistência
+
+/-
+/-
-
+
-
+
+/-
+
+
MB - Muito Bom, B - Bom, S - Satisfaz
bás - básico, evol - evoluído
16 Novembro de 2009
Qualidade de gramáticas vs Qualidade de linguagens.
Critérios para aferir a Qualidade das Linguagens:
CL1 -- Expressividade:
definição deste critério: facilidade (naturalidade, clareza) com que se exprime uma ideia usando os construtores da linguagem.
impacto de CL1 nos quatro dimensões de avaliação: influencia positivamente a aprendizagem, escrita e compreensão sem ter grande impacto no processamento.
Aprendizagem
Escrita
Compreensão
Reconhecimento
CL1- Expressividade
+
+
+
x
Avaliação (comparativa) da expressividade das seguintes linguagens: Basic, Pascal, C, C#, Perl, Prolog, Haskell, XML, LaTeX; discussão da avaliação histórica e dos paradigmas subjacentes.
Pascal
Basic
C
Perl
XML
Latex
Prolog
C++
C#
Haskell
CL1-Expressividade
mB
S
mB
MB
MB
MB
S
S
MB
MB
MB - Muito Bom, B - Bom, S - Satisfaz
9 Novembro de 2009
Continuação da discussão com os alunos sobre as pesquisas feitas relativas a métricas de gramáticas. Alunos de que apresentaram: Jorge Mendes, André Santos & Miguel Regedor, Márcio Coelho, Paulo Alexandre & Paulo Alexandr e André Rocha.
Introdução ao conceito de qualidade de gramáticas vs qualidade de linguagens (critérios de avaliação e métricas).
Definição de Qualidade de uma Linguagem: uma linguagem diz-se com qualidade se a sua legibilidade (em termos de facilidade na aprendizagem, escrita e compreensão) for grande sem degradar a eficiência do processamento.
Critérios para as Linguagens -- Introdução: CL1 a CL6.
2 Novembro de 2009
Discussão com os alunos sobre as pesquisas feitas sobre métricas de gramáticas. Alunos de que apresentaram: Jose Luis, Helder Silva, e Daniel Rocha.
26 Outubro de 2009
Apresentação dos resultados encontrados na pesquisa sobre métricas de gramáticas.
Revisão da utilização de entradas bibtex num ficheiro latex.
Resolução do exercício 2, alínea f4.
Introdução do princípio da Tradução Dirigida pela Semântica e diferenças em relação à Tradução Dirigida pela Sintaxe.
Introdução ao conceito de Gramáticas de Atributos como tuplo (GIC, A, RC, CC, RT), onde A=Atributos, RC=Regras de Contexto, CC=Condições de Contexto, RT=Regras de Tradução.
Exemplificação do uso de Gramáticas de Atributos (GA) com a gramática declarations.g
19 Outubro de 2009
Discussão do duplo papel de uma Gramática, a propósito do Exercício 2 da aula anterior e das suas alíneas a) a c) (comparação com o Exercício 1):
a gramática como especificação formal de uma linguagem (papel do utilizador final da linguagem e do engenheiro gramatical);
a gramática como especificação formal de um programa, o processador/compilador da linguagem e o recurso a Geradores automáticos de Compiladores (papel do engenheiro gramatical).
Introdução à noção e relevância do tema Qualidade de Gramáticas (em ambas as vertentes acima identificadas) e da necessidade imperiosa de se definirem Métricas Gramaticais para se poder discutir a qualidade com objectividade.
Revisão dos conceitos de Parsing Top-Down (Recursivo-Descendente, RD, e LL(1)) e de Parsing Bottom-Up (LR); funções e tabelas de parsing e autómato LR(0) -- resolução das alíneas d) e e) do Exercício 2.
12 Outubro de 2009
Introdução da notação AnTLR e comparação com a escrita de gramáticas em Lex/Yacc.
Escrita em notação AnTLR de uma Gramática para uma linguagem que:
aceite uma Lista de Números;
gere o respectivo Parser com o AnTLR;
teste o parser com o Debugger visual do AnTLRWorks;
inclua Acções Semânticas e Atributos para calcular a Soma dos números na lista e Comprimento da Lista.
Discussão das diferenças entre o formato BNF e EBNF e comparação das respectivas árvores de derivação.
Discussão das diferenças entre Recursividade à Esquerda e Recursividade à Direita.
Gramática Recursiva não-LL(1) (BNF-puro)
Lista --> "[" Nums "]"
Nums --> int
| int',' Nums
Gramática Iterativa (BNF-extendido) --- com resolução em ANTLR
lista : '[' nums ']' {
System.out.println("Soma: " + $nums.soma +
"\nContador: " + $nums.conta);
}
;
nums returns [int soma, int conta=0]
: a = INT {
$soma = Integer.parseInt($a.text);
$conta++;
}
(',' b = INT { $soma += Integer.parseInt($b.text);
$conta++;
}
)*
;
INT : ('+' | '-')? ('0'..'9')+
;
WS : (' ' | '\t' | '\n' | '\r') { channel=HIDDEN; };
28 de Setembro de 2009
1. Apresentação da UCE30-EL e em particular do Módulo de EG:
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.
2. Revisão do conceito de Linguagem e sua relação com Gramática:
Apresentação dos critérios a observar quando se faz o design de uma Linguagem:
Satisfação dos Requisitos pedidos no enunciado
Satisfação das Restrições explicitadas no enunciado
Procura de Legibilidade
Procura de Simplicidade na utilização para escrever frases.
Resolução do Exemplo1: desenho de uma Linguagem
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo2 (inicio, discussão do enunciado): leitura e análise de uma Gramática
1. Apresentação da UCE30-EL e em particular do Módulo de EG e ATS:
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.
11 de Outubro de 2010
2. Revisão do conceito de Linguagem e sua relação com Gramática:
Apresentação sumária dos critérios a observar quando se faz o design de uma Linguagem:
Satisfação dos Requisitos pedidos no enunciado
Satisfação das Restrições explicitadas no enunciado
Procura de Legibilidade
Procura de Simplicidade na utilização para escrever frases.
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo1: desenho de uma Linguagem e escrita da respectiva Gramática com variantes (ver aqui GIC e GT).
18 de Outubro de 2010
3. Revisão do conceito de Gramática Indepedente de Contexto (GIC) e de Gramática Tradutora (GT); sua definição formal.
Resolução do Exemplo1: desenho de uma Linguagem e escrita da respectiva Gramática com variantes (ver aqui Exemplos-de-Frases e GT).
25 de Outubro de 2010 (aula dada pelo prof. Eric Van Wyk)
3. Introdução (prática/pragmática) o conceito de Gramática de Atributos (GA)para especificar a semântica estática e dinâmica de uma linguagem.
Introdução ao Gerador de Processadores de Linguagens baseado em GAs Silver.
Exemplo1 (Gramática Genea para definir uma Linguagem para Genealogia e Demografia): desenho de uma Linguagem e escrita da respectiva Gramática com variantes.
GUIÃO DA AULA:
Attribute Grammars (AGs):
- support Semantic Analysis specifications;
- as opposed to Translation Grammars, TG (as those supported by Yacc and other parser generators) that are primarily used for syntactic analysis, although can describe some limited semantic work, AGs are more general and more powerful.
Main phases of a Compiler or Translator:
Syntactic Analysis
- scanning and parsing
- verify or determine the syntactic structure of the program/expression
- generate a tree representing this structure
Semantic Analysis
- compute concrete values and types for variables and expressions
- non-syntactic checks - semantic constraints:
* are all variables in a program declared ?
* are all expressions type correct ?
- report the errors
- report on some characteristics of the program
Optimization
- rewrite the program into a more efficient form
Code Generation
- generate a translation to another language
AGs
- are really for semantic analysis, but can be useful for other tasks as well.
- aim is to decorate the syntax tree with attributes describing the semantics
- think of each node in a syntax tree as an object; we want to compute values for fields (attributes) on these objects such as "type", "isCorrect", "errors", etc.
Yacc semantic actions give us a single unnamed, untyped attribute
Silver is a research prototype AG system developed by my group at Minnesota.
An AG is a CFG with
- set of attributes; attributes have a name and a type
- occurrence relation - what attributes appear on what nonterminals
- defining equations - for computing the value of those attributes
Example 1
Consider a familiar example, the Genealogia language introduced in the previous lessons.
- show Silver code for Genealogia (no attributes, only parsing)
- show what errors look like in Silver specs
- parse errors, binding errors, type errors ...
Consider also the following valid sentence of Genealogia language:
( "Joe" "Smith" M 1955, "Beth" "Johnson" F 1957 )
( "Jane" "Martin" F 1940, "Sam" "Smith" M 1935 )
{
"Mike" M 1965, "Betty" F 1967
}
( "Marvin" "Van Wyk" M 1945, "Lois" "Ter Louw" F 1945 )
{
"Eric" M 1967,
"Kevin" M 1970,
"Stacie" F 1971
}
Next, add report attribute
- only one synthesized attribute:
synthesized attribute report :: String occurs on Geneology, Families, Family,....
- print simple report
- the solution (more verbose than the Yacc solution, but much more fomal and clear) is split
into the following files:
Geneology.sv +
Person.sv +
Children.sv +
Terminals.sv and
Main.sv plus
silver-compile .
Example 2
Count the number of children and add it the part of the report
generated on the parents
- add one more synthesized attribute:
synthesized attribute numChildren :: Integer occurs on ChildList;
- then the solution is obtained just changing the following file:
Children.svExercise (Example 3)
- use the birth data associated with each child, and compute the year of oldest child's birth
"First child born in ..." - if any children.
- the solution developed by one student, composed by the following files:
Geneology.sv +
Person.sv +
Children.sv .
Example 4
Semantic constraints can be specified as Boolean attributes,
or a "list of errors" attribute
Compute "isCorrect :: Boolean" to check that oldest child born
at least 15years before the youngest parent.
- now some more synthesized attributes must be added:
synthesized attribute isCorrect::Boolean occurs on Geneology, Families, Family ;
synthesized attribute youngestBirthYear:: Integer occurs on Parent, Parents ;
synthesized attribute year::Integer occurs on Year ;
synthesized attribute oldestBirthYear :: Integer occurs on ChildList, Children ;
synthesized attribute birthYear :: Integer occurs on Child ;
- then the solution is obtained changing the following file:
Geneology.sv +
Person.sv +
Children.svExercise (Example 5)
- resulting error message is not so good. Instead replace isCorrect
with errors :: String
Example 6
Inherited attributes, the way to make contextual information accessible after or before the substring where it appears avoiding any global variable.
- Evolve the previous grammar because the resulting error message is still not as good as it could be.
Maybe we'd like a message of the form "Child X born in Y after parents born in Z"
- pass down age of youngest parent (plus 15years) as an inherited attribute
- generate the error message, arguably, at the point in which the error occurs.
- now an inherited attribute must be defined and some additional synthesized attributes must be added:
inherited attribute earliestPossibleBirthYear::Integer occurs on Children, ChildList, Child ;
synthesized attribute errors::String occurs on Geneology, Families, Family, Children, ChildList, Child ;
synthesized attribute youngestBirthYear::Integer occurs on Parent, Parents ;
attribute birthYear::Integer occurs on Child ;
- then the solution is obtained changing the following file:
Geneology.sv +
Children.sv and
Main.svExercise (Example 7)
- add an inherited attribute "currentYear" - set it at the root and
pass it down to all children so that we can compute the child ages
and put them into the report.
- the solution developed by one student, composed by the following files:
Geneology.sv +
Person.sv +
Children.sv +
Terminals.sv and
Main.sv plus
Sample source-text
08 de Novembro de 2010
3. Definição formal de Gramática de Atributos (GA) para especificar a semântica estática e dinâmica de uma linguagem (consolidação teórica da introdução prática da última aula).
Continuação da exploração do Gerador de Processadores de Linguagens baseado em GAs Silver.
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver (fazer aqui o download da versão mais recente: SilverNov2010), agora com um novo exemplo para criar uma calculadora de expressões "dc -- desktop calculator language".
GUIÃO DA AULA:
A simple arithmetic expression language.
Consider the Silver specification for "dc" (directory grammars/tutorials/dc ans subdirectory bin).
1. The concrete syntax in Expr.sv (respective terminal symbols in TerminalsDC.sv) ensures that operator precedence and
associativity is preserved.
Notice that this Expr.sv version already includes the extension proposed to the students as an working example during the class -- DC Expr now support Logical (and, or, not) and Relational Operators (at moment, jut Equal)
2. A higher order attribute, ast_Expr, is used to compute a tree using
the abstract productions. On this, we compute the value of the
expression since the grammar is simpler. See again Expr.sv and also the functions defined in DC.sv
3. In BetterPP.sv we see the use of inherited attributes. These are
passed down the tree and used to determine when parenthesis need to be used.
To obtain a Compiler and use it, the common files Main.sv and silver-compile are also developed and included in the directory.
22 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis, Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JJ, a compensar ainda em dezembro).
29 de Novembro de 2010
Não dei aula por estar na Universidade Nacional de SanLuis, Argentina, no contexto da visita anual do projecto de cooperação bilateral Quixote (aula dada por JJ, a compensar ainda em dezembro).
06 de Dezembro de 2010
Introdução ao tópico Qualidade de Linguagens
Enquadramento do tema e justificação da sua necessidade enquanto propósito geral da engenharia aquando do desenvolvimento de um novo produto;
Caracterização do produto em causa: protocolo de comunicação para um Emissor transmitir a um Recetor determinada informação no sentido de obter uma resposta/reação do Receptor após processar a mensagem (frase da linguagem);
Identificação dos Critérios que permitem definir qualidade de uma linguagem: Legibilidade (aprendizagem, escrita e compreensão) e Eficácia;
Factores que tem impacto nos critérios de qualidade -- a identificar e caracterizar na proxima aula;
Identificação dos factores que determinam a aceitação de uma linguagem: cultura/experiência anterior; disponibilidade do processador e da documentação; dimensão e envergadura do ambiente de desenvolvimento.
13 de Dezembro de 2010
Esta aula foi totalmente aproveitada para os Grupos fazerem a apresentação (1ªfase) do Projecto Integrado.
03 de Janeiro de 2011
Continuação da introdução às GA, às árvores de sintaxe abstrata (AST) e à ferramenta Silver (fazer aqui o download da versão mais recente Silver-0.3.1: http://melt.cs.umn.edu/silver/downloads.html), agora com um novo exemplo para desenvolver um compilador para a linguagem de programação "simple".
10 de Janeiro de 2011
Esta aula foi aproveitada para os Grupos fazerem a apresentação (1ªfase/2ªetape - demo) do Projecto Integrado.
17 de Janeiro de 2011
Continuação do estudo do tópico Qualidade de Linguagens
Revisão dos Critérios que permitem definir qualidade de uma linguagem: Legibilidade (aprendizagem, escrita e compreensão) e Eficácia;
Razões para se estudar uma Linguagem de Programação de segundo Sebesta:
Aumentar a capacidade de exprimir ideias por escrito;
Aumentar a sabedoria para fazer uma boa escolha da LP a usar num caso concreto;
Aumentar a capacidade de aprender novas linguagens;
Aumentar a percepção sobre a importância da implementação;
Melhorar a compreensão sobre todo o domínio da programação;
Classificação das Linguagens de Programação:
Quanto à cronologia e grau de abstracção (1ª, 2ª, 3ª e 4ª gerações)
Quanto ao estilo do processamento (compilada/interpretada)
Quanto ao estilo de programação (imperativa/declarativa)
Quanto à forma de organizar código (monolítica/modular)
Quanto à forma de execução (sequencial/concorrente)
Quanto ao sistema de tipos (fracamente/fortemente tipadas)
Quanto à forma de expressão (textuais/visuais)
Quanto à abrangência (domínio geral, GPL/específico, DSL)
* 2º SEMESTRE ***
21 de Fevereiro de 2011
Continuação do estudo do tópico Qualidade de Linguagens
Etudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
28 Fevereiro 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensao
Reconhecimento
Expressividade
+
+
+
-
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
CL3-Unicidade
CL4-Consistência
CL5-Extensibilidade
CL6-Escalabilidade
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
07 de Março de 2011
Não houve aula --- 2ªf de Entrudo.
14 de Março de 2011
Esta aula foi aproveitada para os Grupos fazerem a apresentação (2ªfase/1ªetape) do Projecto Integrado.
21 Março 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Expressividade; Clareza e Abstração
Documentação (comentários de linha e bloco, anotações para manuais e meta-informação);
Unicidade (singularidade de formas para expressar a mesma coisa).
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
CL5-Extensibilidade
CL6-Escalabilidade
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
28 Março 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Consistência
Escalabilidade
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
Escalabilidade
X
X
X
X
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Paradigma
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
4 Abril 2011
Discussão do processo de avaliação; ponto de situação.
Abertura de uma discussão/investigação alargada sobre o processo de Avaliação de Qualidade e Métricas em Engenharia:
Receção das monografias escritas pelos alunos sobre métricas em geral, métricas em linguagens de modelação (UML) e gramáticas; apreciação geral e definição dos desenvolvimentos futuros --- ver relatórios escritos inseridos na parte final do item "Questões, Fichas Práticas e Notas" da página deste módulo.
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Extensibilidade léxica, sintática e semântica.
Modularidade
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
-
++
?
-
Escalabilidade
X
X
X
X
Modularidade
x
++
+
X
Fiabilidade
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
s
s
s
S
B
S
S
B
B
B
S
s
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Modularidade
nS
nS
nS
S
s
nS
S
B
B
B
S
nS
CL8-Fiabilidade
nS - não Satisfaz, B - Bom, S - Satisfaz
11 Abril 2011
Continuação do estudo do tópico Qualidade de Linguagens
Estudo das Características que influenciam os Critérios que permitem definir qualidade de uma linguagem:
Fiabilidade: type-checking; verificação dinâmica de limites; error-handling
Tabela que relaciona as Carateristicas da Linguagem com os Critérios de Qualidade:
Característica
Aprendizagem
Escrita
Compreensão
Reconhecimento
Expressividade
++
++
+
-
Documentação
-
-
++
X
Unicidade
+
-
+
+
Consistência
++
+
+
X
Extensibilidade
-
++
?
-
Escalabilidade
X
X
X
X
Modularidade
X
++
+
X
Fiabilidade
x
+
X
-
Tabela que compara várias Linguagens de Programação, segundo as Caraterísticas Identificadas
Característica
Assembly
Fortran
Basic
Pascal
C
Prolog
ML
C#
Perl
Ruby
PHP
SQL
CL1-Expressividade
nS
s
nS
B
B-
s
B
MB
B-
B-
B
MB
CL2-Documentação
s
s
s
s
S
s
s
MB
B
S
S
S
CL3-Unicidade
nS
S
S
nS
NS
S
S
nS
NS
NS
NS
B
CL4-Consistência
S
S
s
B
s
B
B
B
NS
NS
NS
B
CL5-Extensibilidade
s
s
s
S
B
S
S
B
B
B
S
s
CL6-Escalabilidade
nS
S
nS
S
B
S
S
B
B
S
B
B
CL7-Modularidade
nS
nS
nS
S
s
nS
S
B
B
B
S
nS
CL8-Fiabilidade
S
B
S
B
nS
nS
B
B
nS
nS
nS
B
nS - não Satisfaz, B - Bom, S - Satisfaz
18 Abril 2011
Não houve aula: férias de Páscoa.
25 Abril 2011
Não houve aula: feriado nacional para comemorar a Revolução dos Cravos.
02 Maio 2011
Introdução do estudo do tópico Qualidade de Gramáticas
Apresentação dos Critérios que permitem definir qualidade de uma linguagem -- Compreensão, Derivação e Manutenção; Eficiência no Processamento e na Geração -- tendo em consideração o duplo papel de uma Gramática (GIC e GA): especificação formal de uma linguagem (para ser consumida por um Ser Humano que vai escrever frases nessa linguagem); e especificação formal de um programa/processador (para ser consumida por um Gerador).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
09 Maio 2011
Introdução do estudo do tópico Qualidade de Gramáticas
Apresentaçãoos Critérios que permitem definir a qualidade de uma linguagem -- Compreensão, Derivação e Manutenção; Eficiência no Processamento e na Geração -- tendo em consideração o duplo papel de uma Gramática (GIC e GA): especificação formal de uma linguagem (para ser consumida por um Ser Humano que vai escrever frases nessa linguagem); e especificação formal de um programa/processador (para ser consumida por um Gerador).
Apresentação dos Factores que mais influenciam Critérios introduzidos na última aula para definir a qualidade de uma linguagem: número de símbolos e de produções; clareza dos identificadores dos símbolos; número de produções unitárias; comprimentos dos lados esquerdos das produções; notação usada (pure/extended BNF); esquema de recursividade; modularidade; e complexidade sintática.
16 Maio 2011
Palestra sobre Gramáticas de Atributos e Geradores de Compiladores dada pelo Prof. Eric van Wik:
Extensão de GA com novo símbolos e produções; forma de lida com a extensão durante a geração.
Estudo do tópico Qualidade de Gramáticas e Métricas
Apresentação das Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática.
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
23 Maio 2011
Estudo do tópico Qualidade de Gramáticas e Métricas
Revisão das Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática.
Resolução de vários exercícios sobre calculo de Métricas aplicadas a diferentes GIC (com base nos exercícios da edição 2009/2010).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
30 Maio 2011
Manhã totalmente dedicada ao projeto integrado (PI).
06 de Junho 2011
Conclusão do Ano Letivo relativo ao Módulo de EG.
Fecho do tópico Qualidade de Gramáticas e Métricas
Balanço sobre as Métricas de Tamanho, de Forma e Lexicográficas relacionadas com os Factores que mais influenciam os Critérios de Qualidade de uma Gramática através da resolução e discussão do exercício 5 de transformação e cálculo de métricas de uma dada GIC (da edição 2009/2010).
Discussão do estado do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos.
13 de Junho 2011
Manhã parcialmente dedicada ao fecho de ATS e ao projeto integrado (PI).
Submissão do artigo coletivo sobre Métricas para Avaliação de Qualidade de Especificações / Modelos UML (paper CoRTA2011)
Escrita do sumário da aula, incluindo o XML dos dois exercícios realizados.
Utilização dos módulos: url; listings; graphicx; hyperref
19 de Outubro de 2009
A aula foi usada para avançar com o Projecto integrado.
26 de Outubro de 2009
A aula foi usada para avançar com o Projecto integrado.
02 de Novembro de 2009 (aula dada por PRH)
Linguagens de Anotação de Documentos:
a noção de texto semi-estruturado por contra-ponto com texto completamente estruturado (frases de uma linguagem formal) e texto não-estruturado (frases de uma linguagem natural);
os princípos por trás da anotação de documentos; um pouco de histórica -- as linguagens de anotação LaTeX, SGML, HTML e XML;
análise de exemplos concretos de documentos históricos e sua interpretação -- a definição de marcas que explicitem a forma de interpretar diversos termos (simples e compostos);
o princípio básico de separar a anotação do seu processamento.
A Linguagem de Anotação XML:
XML como uma meta-linguagem para definir linguagens de anotação -- os dialectos XML e dos DTDs;
XML como a linguagem franca ou o esperanto dos Sistemas de Informação -- interoperabilidade entre bases de dados e outras aplicações.
Sistemas de Produção:
as 3 componentes básicas: base de regras de reacção"condição/acção" + base de factos + motor de produção;
conceitos e exemplos (Prolog, Lex/Flex, Awk, Perl, XSL).
Enunciado de um Trabalho Prático para a próxima aula -- verna rúbrica "Questões, Fichas Práticas e Notas"
Breve apresentação da linguagem de domínio específico (DSL) BibTeX: uma linguagem para bases de dados bibliográgficas. A sua relação com o sistema LaTeX.
9 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
Objectivos da apresentação que os grupos de trabalho farão a 7 de Dezembro.
16 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
23 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
30 de Novembro de 2009
Acompanhamento do desenvolvimento do projecto.
Apresentação de uma lista de aspectos do projecto que serão analisados na apresentação da semana seguinte
7 de Dezembro de 2009 ( as apresentações realizamram-se das 9:30 às 12:00)
Apresentação pelos 4 grupos da 1ª fase do projecto integrado.
14 de Dezembro de 2009
Breve comentário sobre a apresentação e relatório de cada grupo
Sugestão de uma nota a cada grupo sobre o estado do projecto nesta altura.
4 de Janeiro de 2009
Acompanhamento do desenvolvimento do projecto.
11 de Janeiro de 2009
Acompanhamento do desenvolvimento do projecto.
Breve discussão sobre técnicas genéricas de parsing.
18 de Janeiro de 2010
Acompanhamento do desenvolvimento do projecto.
25 de Janeiro de 2010
Apresentação dos objectivos a atingir na 2a fase do projecto integrado para cada um dos módulos da UCE.
Continuação da apresentação do projecto e suas etapas.
Definição de datas de aprentação e avaliação intercalares.
11 de Outubro
Não houve aula (participação na conf. em Eindhoven)
18 de Outubro
Palestras do Prof. Dr. Janis Voigtlaender sobre "Semantic Bidirectionalization" e "Type-based Program Reasoning", no contexto do programa doutoral MAP-i.
Estas palestras tiveram a duração de 3 horas, compensando assim a aula não leccionada na semana anterior.
25 de Outubro
Discussão com os alunos do projecto e possíveis abordagens a seguir e sistemas de software a utilizar.
1 de Novembro
Não houve aula: feriado
8 de Novembro
Continuação da análise das sub-tarefas envolvidas no projecto integrado.
Um sistema para definição e travessia de ASTs na linguagem C
TWiki's Education/EL1011 webThe Education/EL1011 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011Copyright 2020 by contributing authors2011-10-02T22:36:16ZAlunosGrupos10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos102011-10-02T22:36:16ZEngenharia de Linguagens (2010/11) Alunos/Grupos Gr Nome Email 4 André Manuel Pereira Pedra da Cruz Lopes andre.pclopes at gmail dot com 4 Bruno ... (last changed by PedroRangelHenriques)PedroRangelHenriquesHorario10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/Horario102011-10-02T22:33:29ZEngenharia de Linguagens (2010/2011) Horário Anual (1º 2º Semestres) 08h00 10h00 Módulo I Engenharia Gramatical 10h00 ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosEG102011-09-17T23:42:05ZEngenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ... (last changed by PedroRangelHenriques)PedroRangelHenriquesWebHomehttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/WebHome2011-09-05T14:31:00ZUnidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ... (last changed by PedroRangelHenriques)PedroRangelHenriquesProgramaATS10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaATS102011-09-03T15:29:44ZEngenharia de Linguagens (2010/2011) Análise e Transformação de Software Programa Resumido Análise de programas: Extracção de dados Armazenamento ... (last changed by PedroRangelHenriques)PedroRangelHenriquesProgramaEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaEG102011-09-03T14:49:02ZEngenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosATS10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS102011-06-19T05:38:30ZEngenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosATS09http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS092011-05-27T21:52:54ZEngenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ... (last changed by PedroRangelHenriques)PedroRangelHenriquesFichasEG10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/FichasEG102011-04-04T22:44:05ZEngenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosPED10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosPED102010-11-29T09:22:20ZEngenharia de Linguagens TITLE (last changed by JorgeGustavo)JorgeGustavoSumariosProjecto10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto102010-11-11T10:29:14ZEngenharia de Linguagens (2010/2011) Projecto Integrado Sumários 27 de Setembro de 2010 Apresentação geral do projecto 4 de Outubro Continuação da ... (last changed by JoaoSaraiva)JoaoSaraivaAlunosGrupos09http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos092010-10-23T08:15:32ZEngenharia de Linguagens (2009/10) Alunos/Grupos 4 Andre da Silva Rocha 2 André Fernandes dos Santos 1 Daniel Carvalho da Rocha 3 Hélder de ... (last changed by PedroRangelHenriques)PedroRangelHenriquesMetodoAvaliacaohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/MetodoAvaliacao2010-10-23T08:13:59ZEngenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ... (last changed by PedroRangelHenriques)PedroRangelHenriquesSumariosProjectohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto2010-10-18T09:11:25ZEngenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ... (last changed by PedroRangelHenriques)PedroRangelHenriquesObjectivosProjectohttp://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto2010-10-18T09:09:57ZEngenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ... (last changed by PedroRangelHenriques)PedroRangelHenriquesObjectivosProjecto10http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto102010-10-18T08:52:41ZEngenharia de Linguagens (2010/2011) Projecto Integrado Objectivos Gerais: Sistema: Criar ..... Documentação Relatório de Desenvolvimento ... (last changed by PedroRangelHenriques)PedroRangelHenriques
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ...
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ...
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ...
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ...
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Exemplos para as aulas Notas sobre !AnTLR Configurar CLASSPATH para permitir a invoca ...
Engenharia de Linguagens (2009/2010) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2009/10) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 5: A gramática independente de contexto GIC5, abaixo apresentada ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 31 Maio de 2010 !GraAlEditor, um editor analisador de Gramáticas: Preparação de ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Alfresco Descarregar a versão Edition Requisitos: Java !MySQL !ImageMagick ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Sumários 28 de Setembro de 2009 Apresentação do Módulo de PED: Apresenta ...
Engenharia de Linguagens Sumários 28 de Setembro de 2009 Apresentação geral do módulo 12 Outubro de 2009 Alguns conceitos gerais acerca de linguagem natural ...
Engenharia de Linguagens Scripting no Processamento de Linguagem Natural Programa Resumido Linguagens de scripting: características, objectivos e conceitos ...
Education/EL1011 Web Preferences The following settings are web preferences of the Education/EL1011 web. These preferences overwrite the site level preferences ...
Engenharia de Linguagens Projecto Integrado Aulas de Gestão Sumários 6 Outubro 2008 Modo de funcionamento do Projecto Integrado; Apresentação do enunciado ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Escreva, em notação !AnTLR, uma Gramática para uma linguagem ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Programa Resumido O paradigma da Programação baseada em Gramáticas (PG). Conceitos sobre Gramáticas ...
Engenharia de Linguagens Bibliografia: Scripting Livros Randal L. Schwartz, Tom Phoenix, brian d foy, Learning Perl , O'Reilly Media Larry Wall, Tom Christiansen ...
Engenharia de Linguagens Projecto Integrado Aulas Tecnológicas Sumários 29 Setembro 2008 Necessidade de um ambiente de programação eficiente: Editor, linha ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Sumários 29 de Setembro de 2008 Apresentação da Disciplina de EG: Apresentação da Equipe Docente ...
Engenharia de Linguagens Análise e Transformação de Software Sumários 02 de Março de 2009 I.1 Introdução e Motivação para a área de Análise e Transformação ...
Engenharia de Linguagens Análise e Transformação de Software 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Neste primeiro exemplo pretende se analisar ...
Engenharia de Linguagens Etapas do Projecto As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ...
Engenharia de Linguagens GraphViz no XP/Vista Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo !GraphViz ...
Engenharia de Linguagens Projecto Integrado Aulas do 2ºSemestre, 2ªparte Sumários 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre ...
Engenharia de Linguagens Sumários Segundo Semestre, Aulas da Manhã 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre. Discuss ...
Engenharia de Linguagens Sumários Segundo Semestre, Aulas da Manhã 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre. Discuss ...
Engenharia de Linguagens Projecto Integrado Aulas do 2ºSemestre, 2ªparte Sumários 02 de Março de 2009 Modo de funcionamento do Projecto Integrado no 2ºSemestre ...
Engenharia de Linguagens Projecto Integrado Aulas de Gestão Sumários 6 Outubro 2008 Modo de funcionamento do Projecto Integrado; Apresentação do enunciado ...
Engenharia de Linguagens Projecto Integrado Aulas Tecnológicas Sumários 29 Setembro 2008 Necessidade de um ambiente de programação eficiente: Editor, linha ...
Engenharia de Linguagens Bibliografia: Scripting Livros Randal L. Schwartz, Tom Phoenix, brian d foy, Learning Perl , O'Reilly Media Larry Wall, Tom Christiansen ...
Engenharia de Linguagens Etapas do Projecto As entradas marcadas a vermelho correspondem a avaliações. As restantes correspondem a pontos de controlo, para que possam ...
Engenharia de Linguagens Análise e Transformação de Software 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Neste primeiro exemplo pretende se analisar ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Exemplos para as aulas Notas sobre !AnTLR Configurar CLASSPATH para permitir a invoca ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Exercícios e Exemplos para as aulas Exemplo 1: Escreva, em notação !AnTLR, uma Gramática para uma linguagem ...
Engenharia de Linguagens (2009/10) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 5: A gramática independente de contexto GIC5, abaixo apresentada ...
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Alfresco Descarregar a versão Edition Requisitos: Java !MySQL !ImageMagick ...
Engenharia de Linguagens GraphViz no XP/Vista Para quem usa Windows Vista (e talvez XP ? ) com o Strawberry Perl, e não conseguia por a funcionar o módulo !GraphViz ...
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Programa Resumido O paradigma da Programação baseada em Gramáticas (PG). Conceitos sobre Gramáticas ...
Engenharia de Linguagens (2009/2010) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ...
Engenharia de Linguagens Scripting no Processamento de Linguagem Natural Programa Resumido Linguagens de scripting: características, objectivos e conceitos ...
Engenharia de Linguagens Análise e Transformação de Software Sumários 02 de Março de 2009 I.1 Introdução e Motivação para a área de Análise e Transformação ...
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ...
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ...
Engenharia de Linguagens Engenharia Gramatical 2008/09 Sumários 29 de Setembro de 2008 Apresentação da Disciplina de EG: Apresentação da Equipe Docente ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 31 Maio de 2010 !GraAlEditor, um editor analisador de Gramáticas: Preparação de ...
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ...
Engenharia de Linguagens (2009/2010) Processamento Estruturado de Documentos Sumários 28 de Setembro de 2009 Apresentação do Módulo de PED: Apresenta ...
Engenharia de Linguagens Sumários 28 de Setembro de 2009 Apresentação geral do módulo 12 Outubro de 2009 Alguns conceitos gerais acerca de linguagem natural ...
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ...
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ...
Education/EL1011 Web Preferences The following settings are web preferences of the Education/EL1011 web. These preferences overwrite the site level preferences ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/EL1011 web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
Related topics:WebChangesAlert, TWikiUsers, TWikiRegistration
These settings override the defaults for this web only. See full list of defaults with explanation. Many of the settings below are commented out. Remove the # sign to enable a local customisation.
Web-specific background color: (Pick a lighter one of the StandardColors).
Set WEBBGCOLOR = #D0D0D0
Note: This setting is automatically configured when you create a web
Image, URL and alternate tooltip text of web's logo. Note: Don't add your own local logos to the TWikiLogos topic; create your own logos topic instead.
List this web in the SiteMap. If you want the web listed, then set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Use links that include the name of the web, i.e. Education/EL1011.Topic links. Note: Unlike other variables, the setting of SITEMAPLIST is not inherited from parent webs. It has to be set in every web that is to be listed in the SiteMap
Set SITEMAPLIST = on
Set SITEMAPWHAT =
Set SITEMAPUSETO = Engenharia de Linguagens
Note: Above settings are automatically configured when you create a web
Exclude web from a web="all" search: (Set to on for hidden webs).
Set NOSEARCHALL =
Note: This setting is automatically configured when you create a web
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
#Set NOAUTOLINK =
Note: You can still use the [[...][...]] syntax to link topics if you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics for this web:
WebTopicEditTemplate: Default template for new topics in this web. (Site-level is used if topic does not exist)
Comma separated list of forms that can be attached to topics in this web. See TWikiForms for more information.
Set WEBFORMS =
Users or groups who are not / are allowed to view / change / rename topics in the Education/EL1011 web: (See TWikiAccessControl). Remove the # to enable any of these settings. Remember that an empty setting is a valid setting; setting DENYWEBVIEW to nothing means that anyone can view the web.
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #D0D0D0
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce your own preferences variables and use them in your topics and templates.
TWiki search results for \.*
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011
The Education/EL1011 web of TWiki. TWiki is a Web-Based Collaboration Platform for the Enterprise.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/EL1011
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011
/twiki/pub/Main/LocalLogos/um_eengP.jpgAlunosGrupos10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos10
Engenharia de Linguagens (2010/11) Alunos/Grupos Gr Nome Email 4 André Manuel Pereira Pedra da Cruz Lopes andre.pclopes at gmail dot com 4 Bruno ... (last changed by PedroRangelHenriques)2011-10-02T22:36:16ZPedroRangelHenriquesHorario10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/Horario10
Engenharia de Linguagens (2010/2011) Horário Anual (1º 2º Semestres) 08h00 10h00 Módulo I Engenharia Gramatical 10h00 ... (last changed by PedroRangelHenriques)2011-10-02T22:33:29ZPedroRangelHenriquesSumariosEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosEG10
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Sumários 27 de Setembro de 2010 1. Apresentação da UCE30 EL e em particular do Módulo de EG e ATS ... (last changed by PedroRangelHenriques)2011-09-17T23:42:05ZPedroRangelHenriquesWebHome
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/WebHome
Unidade Curricular de Especialização Engenharia de Linguagens (2010/2011) Responsável pela UCE: Rangel Henriques Propostas de Dissertação para 2011 ... (last changed by PedroRangelHenriques)2011-09-05T14:31:00ZPedroRangelHenriquesProgramaATS10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaATS10
Engenharia de Linguagens (2010/2011) Análise e Transformação de Software Programa Resumido Análise de programas: Extracção de dados Armazenamento ... (last changed by PedroRangelHenriques)2011-09-03T15:29:44ZPedroRangelHenriquesProgramaEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ProgramaEG10
Engenharia de Linguagens (2010/2011) Engenharia Gramatical Programa Resumido 1.Linguagens e Gramáticas; Caracterização destes conceitos e domínios do saber ... (last changed by PedroRangelHenriques)2011-09-03T14:49:02ZPedroRangelHenriquesSumariosATS10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS10
Engenharia de Linguagens (2010/11) Análise e Transformação de Software Sumários 27 de Setembro de 2010 A. Apresentação da disciplina I.1 Introdução ... (last changed by PedroRangelHenriques)2011-06-19T05:38:30ZPedroRangelHenriquesSumariosATS09
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosATS09
Engenharia de Linguagens (2009/10) Análise e Transformação de Software Sumários 31 Maio de 2010 Apresentação do Laboratório online !GamaSlicer para verifica ... (last changed by PedroRangelHenriques)2011-05-27T21:52:54ZPedroRangelHenriquesFichasEG10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/FichasEG10
Engenharia de Linguagens (2010/11) Engenharia Gramatical Exercícios e Exemplos para as aulas Exemplo 1: Para apoio a um projecto de Genealogia pretende se que ... (last changed by PedroRangelHenriques)2011-04-04T22:44:05ZPedroRangelHenriquesSumariosPED10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosPED10
Engenharia de Linguagens TITLE (last changed by JorgeGustavo)2010-11-29T09:22:20ZJorgeGustavoSumariosProjecto10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto10
Engenharia de Linguagens (2010/2011) Projecto Integrado Sumários 27 de Setembro de 2010 Apresentação geral do projecto 4 de Outubro Continuação da ... (last changed by JoaoSaraiva)2010-11-11T10:29:14ZJoaoSaraivaAlunosGrupos09
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/AlunosGrupos09
Engenharia de Linguagens (2009/10) Alunos/Grupos 4 Andre da Silva Rocha 2 André Fernandes dos Santos 1 Daniel Carvalho da Rocha 3 Hélder de ... (last changed by PedroRangelHenriques)2010-10-23T08:15:32ZPedroRangelHenriquesMetodoAvaliacao
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/MetodoAvaliacao
Engenharia de Linguagens (2010/2011) Método de Avaliação A avaliação da UCE de Engenharia de Linguagens é calculada pela seguinte fórmula: NF 15% PED 15% EG ... (last changed by PedroRangelHenriques)2010-10-23T08:13:59ZPedroRangelHenriquesSumariosProjecto
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/SumariosProjecto
Engenharia de Linguagens (2009/2010) Projecto Integrado Sumários 28 de Setembro de 2009 Apresentação geral do projecto 12 de Outubro de 2009 Apresenta ... (last changed by PedroRangelHenriques)2010-10-18T09:11:25ZPedroRangelHenriquesObjectivosProjecto
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto
Engenharia de Linguagens (2009/2010) Projecto Integrado Objectivos Gerais para a 1ª Fase: Sistema: Criar a base do sistema FOSSAT para receber e analisar ... (last changed by PedroRangelHenriques)2010-10-18T09:09:57ZPedroRangelHenriquesObjectivosProjecto10
http://wiki.di.uminho.pt/twiki/bin/view/Education/EL1011/ObjectivosProjecto10
Engenharia de Linguagens (2010/2011) Projecto Integrado Objectivos Gerais: Sistema: Criar ..... Documentação Relatório de Desenvolvimento ... (last changed by PedroRangelHenriques)2010-10-18T08:52:41ZPedroRangelHenriques
2009-07-13 - Defesa oral e apresentação dos trabalhos de ATS e PI.
2009-07-08 - Entrega dos relatórios (em papel) referentes aos trabalhos de ATS e PI.
2009-03-23 - Aula de PLN de 4 de Maio será dada por três membros da Porto Editora, e será sobre criação de ferramentas e dicionários para análise morfológica.
2009-07-13 - Defesa oral e apresentação dos trabalhos de ATS e PI.
2009-07-08 - Entrega dos relatórios (em papel) referentes aos trabalhos de ATS e PI.
2009-03-23 - Aula de PLN de 4 de Maio será dada por três membros da Porto Editora, e será sobre criação de ferramentas e dicionários para análise morfológica.