de produção, onde o tamanho de uma regra é 1 mais o tamanho do seu lado direito.
Sobre a quantidade de derivações, quando a gramática é recursiva a derivação é infinita, devido aos ciclos da gramática, que gera uma linguagem infinita. Quando a gramática não possui recursão, o número de derivações corresponde ao número de árvores
1Assumindo que a gramática não é ambígua, o número de derivações corresponde ao número de
sentenças geradas. No caso de existir ambiguidade, o número de sentenças é, de qualquer maneira, no máximo igual ao número de derivações.
geradas. Para calcular a número de árvores, foi desenvolvido um algoritmo. Este algo- ritmo foi construído para uma gramática que esteja descrita na notação BNF e segue as seguintes regras:
• #: P → N representa uma função que calcula o número de árvores de derivações.
• P é um conjunto de padrões
1. #T = 1, onde T é um símbolo terminal
2. #seq(P1,P2) => #P1 * #P2, onde P1, P2 ∈ P.
3. #alt (P1, P2) = #P1 + #P2, onde P1, P2 ∈ P.
4. #X = #X, onde X ∈ Não-Terminal
Para exemplificar como esse cálculo é realizado, apresentamos um exemplo na listagem 5.1, aplicando as regras anteriormente descritas. O número de derivações para esta gramática é 2.
S -> AB A -> a | B B -> b
Listagem 5.1: Gramática que exemplifica o cálculo da quantidade de derivações
#S => #(A, B) => #A X #B => #(a | B) * #B => #(a | B) * 1 => #a + #B x 1 => 1 + #b * 1 => 1 + 1 * 1 => 2 * 1 = 2
Listagem 5.2: Número de derivações da gramática
A importância em apresentar esta característica é que o uso de gramáticas muito grandes pode gerar o problema de explosão combinatória, inviabilizando a geração de sentenças que satisfaçam os diferentes critérios de cobertura por LGen. Dado que essa característica é determinante para a capacidade de LGen de fornecer essas sentenças, procuramos classificar as gramáticas segundo seu tamanho de maneira a identificar as fronteiras entre as gramáticas para as quais LGen consegue satisfazer os diferentes critérios e as gramáticas com as quais LGen não consegue trabalhar no seu estágio atual de desen- volvimento.
Em relação a esta característica, foi necessário definir uma métrica para classificar o tamanho da gramática, caracterizando a gramática como grande ou pequena. Para
isto, utilizamos os 5 (cinco) parâmetros apresentados anteriormente e utilizamos as 10 gramáticas apresentadas nos estudos de caso apresentados no capítulo 6 e 4 gramáticas de linguagens, sendo 3 gramáticas da notação B e 1 gramática da linguagem Lua. Estas gramáticas estão disponíveis em http://lgen.wikidot.com/repgrammar.
As gramáticas b_grammar_small e b_grammar_ext foram utilizadas em dois estudos de caso apresentados no trabalho de [Hentz, 2010]. Estas gramáticas de linguagens foram utilizadas como referência para fins de comparação. Separamos estas gramáticas em duas categorias: (1) gramáticas gerais e (2) gramáticas de linguagens.
Com estas gramáticas, realizamos um levantamento em relação a quantidade de sím- bolos terminais, quantidade de símbolo não-terminais, quantidade de regras de produção e quantidade de derivações. Além disso, calculamos o tamanho de cada gramática uti- lizando as definições 4.3.2 e 4.3.3. Os resultados estão apresentados nas tabelas 8 e 9 que contém as seguintes colunas: (T) representa o número de símbolos terminais, (NT) representa o número de símbolos não-terminais, (RP) representa o número de regras de produção, (|R| + 1) representa as definições 4.3.2 e 4.3.3 e (D) representa o número de derivações, que apresenta o valor ∞ quando a gramática é recursiva e nos outros casos o valor calculado através do algoritmo que apresentamos anteriormente e que foi exemplificado nas listagens 5.1 e 5.2.
Gramática T NT RP (|R| + 1) D GPL 13 16 28 70 ∞ ATM 24 10 28 71 ∞ DigitalVideo 15 16 28 72 184 HIS 33 45 61 218 62720 Mobile 14 12 21 58 ∞ ModelTransformation 50 72 130 313 ∞ Firewall 30 23 86 643 4398046511104 Call 4 4 8 14 12 RSS 20 10 19 86 26458925342976 PImagem 11 6 18 42 ∞ Média 21 22 36 108 -
Tabela 8: Gramáticas Gerais
Além dos 05 (cinco) parâmetros descritos acima, utilizamos um outro parâmetro que foi decisivo para essa classificação, que foi o comportamento de LGen quanto da execução das gramáticas. Com base nesse parâmetro, estamos classificando uma gramática como
grande quando LGen não consegue terminar o processo de geração. Isso ocorreu com as
gramáticas ModelTransformation, RSS, Firewall e b_grammar_full. Para a gramática
Gramática T NT RP (|R| + 1) D b_grammar_small 19 36 26 61 289 b_grammar_ext 33 40 66 172 ∞ b_grammar_full 167 206 425 1211 ∞ lua_grammar 72 41 103 305 ∞ Média 72 80 155 437 -
Tabela 9: Gramáticas de Linguagens
de cobertura. Quando os dois critérios foram usados, o processo de geração foi concluído e o percentual de cobertura foi de 100%.
5.6
Resumo das aplicações que utilizam gramáticas
Nas Tabelas 10, 11 e 12 apresentamos um resumo dos resultados do levantamento realizado nas seções 4.1 e 4.2. O resumo mostra o tipo de problema, a gramática, as características da gramática e os trabalhos encontrados.
5.6.1
Gramáticas que são utilizadas para descrever configurações
Gramática Características Trabalhos
GPL Pequena, recursiva e ambígua [Bagheri et al., 2012]
HIS Pequena [Bagheri et al., 2012]
Model Transformation Grande e recursiva [Bagheri et al., 2012]
ATM Pequena e recursiva [Bagheri et al., 2012]
Mobile Phone Pequena e recursiva [Bagheri et al., 2012]
Digital Video System Pequena [Bagheri et al., 2012]
Call Pequena [Hoffman et al., 2011]
Firewall Grande [Hoffman et al., 2010]
Tabela 10: Gramáticas identificadas nos trabalhos das áreas de Linha de Produto, Soft- ware VoiP e Firewall
5.6.2
Gramáticas que são utilizadas para reconhecimento de padrões
Gramática Características Trabalhos
RedeDeSensores Pequena e probabilística [Lymberopoulos et al., 2006] Gramática RS Pequena, recursiva e proba-
bilística
[Lymberopoulos et al., 2008]
5.6.3
Gramáticas que são utilizadas para especificações de arquivos
Gramática Características Trabalhos
RSS Grande [Hoffman et al., 2009]
Gramática PImagens Pequena e recursiva [Hamdi, 2012]
Tabela 12: Gramáticas identificadas nos trabalhos das áreas de Analisador Feed RSS, Protocolos de Rede e Processamento de Imagens
Em relação às características, elas se aplicam às gramáticas presentes nos trabalhos encontrados na pesquisa e não a uma área específica.