Engenharia Gramatical 
 Exercícios e Exemplos para as aulas 
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: 
 
-- -- 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
 Notas e Links úteis