Construção de compiladores
34 pág.

Construção de compiladores


DisciplinaConstrução de Compilares3 materiais14 seguidores
Pré-visualização10 páginas
direta das expressões
 a = b + c;
 e = c + d + b;
geraria o seguinte código intermediário:
 a := b + c
 _t1 := c + d
 e := _t1 + b
No entanto, o uso da comutatividade e associatividade da adição permite que o código gerado seja reduzido usando a
eliminação de expressões comuns, resultando em
 a := b + c
 e := a + d
Diversas oportunidades de otimização estão associadas à análise de comandos iterativos. Uma estratégia é a
movimentação de código, aplicado quando um cálculo realizado dentro do laço na verdade envolve valores
invariantes na iteração. Por exemplo, o comando
Otimização de código 28
 while (i < 10*j) {
 a[i] = i + 2*j;
 ++i;
 }
estaria gerando um código intermediário equivalente a
 _L1: _t1 := 10 * j
 if i >= _t1 goto _L2
 _t2 := 2 * j
 a[i] := i + _t2
 i := i + 1
 goto _L1
 _L2: ...
No entanto, a análise de fluxo de dados mostra que o valor de j não varia entre iterações. Assim, o compilador
poderia mover as expressões que envolvem exclusivamente constantes na iteração para fora do laço, substituindo
esse código por
_t1 := 10 * j
 _t2 := 2 * j
 _L1: if i >= _t1 goto _L2
 a[i] := i + _t2
 i := i + 1
 goto _L1
 _L2: ...
Um exemplo de otimização dependente de máquina pode ser apresentado para a expressão
 x := y + K
onde K é alguma constante inteira. Na tradução para o código assembly de um processador da família 68K, a forma
genérica poderia ser algo como
 MOVE.L y,D0
 ADDI.L #K,D0
 MOVE.L D0,x
No entanto, se o compilador verificasse que o valor de K fosse uma constante entre 1 e 8, então a segunda instrução
assembly poderia ser substituída por ADDQ.L, que utilizaria em sua codificação apenas dois bytes ao invés dos seis
bytes que seriam requeridos pela instrução ADDI.L.
Nomes dos colaboradores 29
Nomes dos colaboradores
Nome dos colaboradores deste wikilivro
Lsd76
Fontes e Editores da Página 30
Fontes e Editores da Página
Capa  Fonte: http://pt.wikibooks.org/w/index.php?oldid=137915  Contribuidores: Jorge Morais, Lsd76, Marcos Antônio Nunes de Moura, 2 edições anónimas
O que é um compilador  Fonte: http://pt.wikibooks.org/w/index.php?oldid=204283  Contribuidores: Jorge Morais, Thiago, 4 edições anónimas
Fases de um compilador  Fonte: http://pt.wikibooks.org/w/index.php?oldid=204280  Contribuidores: Jorge Morais, Thiago, 2 edições anónimas
Teoria das linguagens formais  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244176  Contribuidores: Abacaxi
Linguagens regulares e autômatos finitos  Fonte: http://pt.wikibooks.org/w/index.php?oldid=247646  Contribuidores: Abacaxi, 1 edições anónimas
Linguagens livres de contexto  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244177  Contribuidores: Abacaxi
Análise léxica  Fonte: http://pt.wikibooks.org/w/index.php?oldid=265322  Contribuidores: Abacaxi, 1 edições anónimas
Análise sintática  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244172  Contribuidores: Abacaxi
Tradução dirigida por sintaxe  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244175  Contribuidores: Abacaxi
Análise semântica  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244167  Contribuidores: Abacaxi
Geração de código intermediário  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244171  Contribuidores: Abacaxi
Otimização de código  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244170  Contribuidores: Abacaxi
Nomes dos colaboradores  Fonte: http://pt.wikibooks.org/w/index.php?oldid=204282  Contribuidores: Jorge Morais, Lsd76, Thiago, 1 edições anónimas
Fontes, Licenças e Editores da Imagem 31
Fontes, Licenças e Editores da Imagem
Image:Nt-compilador.png  Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Nt-compilador.png  Licença: Creative Commons Attribution-Sharealike 2.5  Contribuidores: User:Nuno
Tavares
Image:Nuvola apps konsole.png  Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Nuvola_apps_konsole.png  Licença: GNU Lesser General Public License  Contribuidores: Alno,
Alphax
Imagem:Parsing-example.png  Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Parsing-example.png  Licença: GNU Free Documentation License  Contribuidores:
en:User:Nathanfulk
Imagem:Rekopis chopin.jpg  Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Rekopis_chopin.jpg  Licença: Public Domain  Contribuidores: Andreagrossmann, Kevyn, Maire, Man
vyi, Niki K, Subitosera, Tsca
Licença 32
Licença
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/