Artigos » Implementação de Compiladores
Enviado em: 04/04/2008
Autor(es): Glaucia Bittencourt Tristão e Cleber Stefanello Pippi
Este artigo descreve a implementação de compiladores, apresentando um resumo de seus conceitos e algumas aplicações.
1. Compiladores
Um compilador é um programa que converte uma linguagem de fácil escrita e leitura, para programadores em uma linguagem que possa ser interpretada e executada pelas máquinas.
O compilador está configurado para não aceitar determinados erros e seguir determinadas regras predeterminadas pela linguagem da qual ele é programado para interpretar. Sendo assim, um compilador deve detectar erros feitos pelo programador, corrigir ou indicar o melhor caminho para a correção do programa, e só então traduzir para linguagem de máquina (Assembly).
Em linguagens de programação híbridas, o compilador tem o papel de converter o código fonte em um código chamado de byte code, que é uma linguagem de baixo nível. Um exemplo deste comportamento é o do compilador da linguagem Java que, em vez de gerar código onde está sendo executado o compilador, gera código chamado Java Bytecode.
Muitos compiladores incluem pré-processadores. Um pré-processador normalmente é responsável por mudanças no código fonte destinadas de acordo com decisões tomadas em tempo de compilação.
2. Organização de um compilador
As fases de um compilador podem ser classificadas em dois grupos: análise e síntese. Na fase de análise, encontram-se as fases de análise léxica, análise sintática e análise semântica. Já na fase de síntese encontram-se as fases de geração de código intermediário, otimização e geração de código. Adicionalmente as estas fases, existem ainda duas fases adicionais que interagem com todas as fases do compilador: o gerenciamento de tabelas e o tratamento de erros. A Figura abaixo ilustra todas as fases de um compilador.
A fase de análise léxica (varredora) tem por objetivo ler o programa fonte e transformar seqüências de caracteres em uma representação interna, denominada itens léxicos.
Os itens léxicos a serem reconhecidos pelo analisador léxico são determinados pela gramática da linguagem-fonte. Deste modo, caso um item léxico não seja definido por esta gramática, um erro léxico é gerado.
A análise Sintática responsabiliza-se por traduzir os Tokens, e descobrir a relação de uns com os outros. Se você escreve writeln, um espaço, e um identificador, seu programa passará pela análise léxica (writeln e identificador existem), mas não passará pela análise sintática, que informa a necessidade de um abre-parênteses logo após esta procedure.
A fase de análise semântica analisa a árvore sintática para a informação context-sensitive, gerada pelo analisador sintático em busca de inconsistências semânticas. Uma das tarefas mais importantes é a verificação de tipos, ou análise de contexto. É nesta fase que são detectadas, por exemplo, os conflitos entre tipos, a ausência de declarações de variáveis, funções e procedimentos.
A saída da fase de análise semântica, é anotada na árvore do analisador gramatical. As gramáticas de atributo são usadas para descrever a semântica de estática de um programa.
A fase de geração de código intermediário permite a geração de instruções para uma máquina abstrata, normalmente em código de três endereços, mais adequadas a fase de otimização. Esta forma intermediária não é executada diretamente pela máquina alvo.
A fase de otimização analisa o código no formato intermediário e tenta melhorá-lo de tal forma que venha a resultar um código de máquina mais rápido em tempo de execução, usando as réguas que denotam a semântica da linguagem-fonte. Uma das tarefas executadas pelo otimizador é a detecção e a eliminação de movimento de dados redundantes e a repetição de operações dentro de um mesmo bloco de programa.
E por fim, a fase de geração de código tem como objetivo analisar o código já otimizado é a gerar o um código objeto definitivo para uma máquina alvo. Normalmente este código objeto é um código de máquina relocável ou um código de montagem. Nesta etapa as localizações de memória são selecionadas para cada uma das variáveis usadas pelo programa. Então, as instruções intermediárias são, cada uma, traduzidas numa seqüência de instruções de máquina que realizam a mesma tarefa.
Atualmente, as pesquisas e os estudos desenvolvidos sobre autômatos finitos, expressões regulares e gramáticas livres de contexto, além dos próprios estudos sobre compiladores, permitiram que as fases de análise léxica e sintática tivessem um desenvolvimento bem maior que as anteriores, chegando-se ao ponto de se ter geradores automáticos para estas fases. Isto já não ocorre com a análise semântica e com a geração de código, sobre as quais ainda não se tem tão bem definido um formalismo como nas duas primeiras fases.
Ao se criar um compilador, estas últimas fases, ainda hoje são de total responsabilidade do desenvolvedor, não havendo ferramentas que as automatize, como no caso da análise sintática. Existe, no entanto, um senso comum sobre o que deve ser realizado em uma análise semântica e como aproximadamente deve ser gerado o código para as construções mais comuns em linguagens de programação, mas ainda se mantém como um trabalho manual, onde a criatividade do desenvolvedor tem mais influência dentro da implementação de um compilador.
3. Propriedades de um bom compilador
4. Implementação de um analisador léxico:
4.1 Interface de Programação (API) Léxica
5. Conclusão
Graças aos compiladores podemos utilizar uma linguagem de fácil escrita para a linguagem que a máquina entenda, tornando assim muito mais fácil a elaboração de programas em diversas linguagens, uma vez que a maioria dos compiladores checa a consistência do código informado pelo programador, sem ter a preocupação de estar tendo que passar diretamente para a máquina a sua linguagem (assembly).
Referências
Disponível em: http://pt.wikipedia.org/wiki/Compilador. Último acesso: 11/2007.
Disponível em: http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html. Último acesso: 11/2007.
Disponível em: http://www.geocities.com/SiliconValley/Bay/1058/compiler.html. Último acesso: 11/2007.
Disponível em: http://br.geocities.com/feliposz/compiladores/crenshaw/tutor03.html. Último acesso: 11/2007.
Disponível em: www.inf.ufsc.br/~olinto/ine5622-cap1.doc. Último acesso: 11/2007.
http://hdlohdaw.com/2ku/2
http://ozorqx.com/ohj/2w
http://xozkyaf.com/v08/45
http://rvpkmndh.com/5ps/6
http://nqcngszq.com/iwk/0
http://hdlohdaw.com/bbm/3e
http://ozorqx.com/jg7/2
http://xozkyaf.com/vbz/3r
http://rvpkmndh.com/4
http://nqcngszq.com/08p/4n
http://hdlohdaw.com/9n2/2a
http://ozorqx.com/3c
http://xozkyaf.com/kga/1n
http://rvpkmndh.com/3va/2g
http://nqcngszq.com/rvj/29
http://hdlohdaw.com/cb2/o
http://ozorqx.com/893/3q
http://xozkyaf.com/57u/u
http://rvpkmndh.com/lkj/36
http://nqcngszq.com/wfh/1a
http://hdlohdaw.com/cds/2z
http://ozorqx.com/fv8/1o
http://xozkyaf.com/bsw/37
http://rvpkmndh.com/s5m/7
http://nqcngszq.com/meb/31
http://hdlohdaw.com/3u
http://ozorqx.com/6hz/t
http://xozkyaf.com/v08/2c
http://rvpkmndh.com/qkw/3d
http://nqcngszq.com/meb/3a
Posted by Bryce Cox, 04/07/2009 5:52pm (4 horas atrás)
http://ozorqx.com/rjh/3u
http://rvpkmndh.com/s5m/1e
http://xozkyaf.com/bsw/2h
http://nqcngszq.com/wfh/48
http://hdlohdaw.com/cds/d
http://ozorqx.com/4f
http://rvpkmndh.com/pkv/37
http://xozkyaf.com/bsw/10
http://nqcngszq.com/iwk/48
http://hdlohdaw.com/fy8/3b
http://ozorqx.com/fv8/1i
http://rvpkmndh.com/lkj/23
http://xozkyaf.com/n0w/2t
http://nqcngszq.com/jua/1l
http://hdlohdaw.com/na2/3q
http://ozorqx.com/893/0
http://rvpkmndh.com/3va/7
http://xozkyaf.com/kga/2q
http://nqcngszq.com/iwz/o
http://hdlohdaw.com/cds/3t
http://ozorqx.com/6hz/4o
http://rvpkmndh.com/mgv/3y
http://xozkyaf.com/kga/2e
http://nqcngszq.com/gbk/1k
http://hdlohdaw.com/s44/4g
http://ozorqx.com/6hz/3g
http://rvpkmndh.com/3va/2w
http://xozkyaf.com/4
http://nqcngszq.com/wfh/2w
http://hdlohdaw.com/fy8/4r
Posted by Rae Lee, 04/07/2009 11:44am (10 horas atrás)
http://ozorqx.com/6hz/2
http://rvpkmndh.com/sob/38
http://nqcngszq.com/meb/15
http://hdlohdaw.com/9n2/2t
http://xozkyaf.com/n0w/e
http://ozorqx.com/893/1c
http://rvpkmndh.com/pkv/2o
http://nqcngszq.com/08p/7
http://hdlohdaw.com/c6j/4q
http://xozkyaf.com/kga/4j
http://ozorqx.com/iqz/46
http://rvpkmndh.com/s5m/2v
http://nqcngszq.com/08p/4m
http://hdlohdaw.com/q
http://xozkyaf.com/v08/p
http://ozorqx.com/jg7/2d
http://rvpkmndh.com/3va/4
http://nqcngszq.com/jua/2x
http://hdlohdaw.com/fy8/4f
http://xozkyaf.com/y30/2m
http://ozorqx.com/jg7/4a
http://rvpkmndh.com/mgv/37
http://nqcngszq.com/vhf/2a
http://hdlohdaw.com/fy8/10
http://xozkyaf.com/n0w/f
http://ozorqx.com/vck/23
http://rvpkmndh.com/0o3/w
http://nqcngszq.com/wfh/0
http://hdlohdaw.com/2h
http://xozkyaf.com/e
Posted by Rena Parrish, 04/07/2009 6:06am (16 horas atrás)
http://birkkane.com/zg1/4m
http://jmgmypium.com/07t/l
http://ouvthweg.com/rj8/p
http://vwsevihm.com/nlm/1f
http://nhroiv.com/6g3/1h
http://birkkane.com/2p
http://jmgmypium.com/6sp/2z
http://ouvthweg.com/du7/25
http://vwsevihm.com/hcf/3m
http://nhroiv.com/wd4/2x
http://birkkane.com/jfs/21
http://jmgmypium.com/fmw/13
http://ouvthweg.com/j6m/26
http://vwsevihm.com/hcf/1h
http://nhroiv.com/hj6/4a
http://birkkane.com/zg1/s
http://jmgmypium.com/o2f/33
http://ouvthweg.com/k4b/25
http://vwsevihm.com/idg/3f
http://nhroiv.com/lht/3t
http://birkkane.com/zg1/3p
http://jmgmypium.com/6sp/24
http://ouvthweg.com/k4b/6
http://vwsevihm.com/xs1/4e
http://nhroiv.com/6g3/p
http://birkkane.com/zg1/c
http://jmgmypium.com/fmw/s
http://ouvthweg.com/k4b/1v
http://vwsevihm.com/36
http://nhroiv.com/e
Posted by Ralph Nolan, 04/07/2009 2:25am (20 horas atrás)
9ed05658b4<a href= http://bbs.co.91.com/member.php?u=148926 ></a><a href= http://bbs.co.91.com/member.php?u=148930 >nexium</a><a href= http://bbs.co.91.com/member.php?u=148924 ></a><a href= http://bbs.co.91.com/member.php?u=148927 >zithromax</a><a href= http://bbs.co.91.com/member.php?u=148936 ></a><a href= http://bbs.co.91.com/member.php?u=148954 >generic xanax</a><a href= http://bbs.co.91.com/member.php?u=148926 >purchase thyroid</a><a href= http://bbs.co.91.com/member.php?u=148945 >phendimetrazine 270 mg</a><a href= http://bbs.co.91.com/member.php?u=148950 >levitra no prescription</a><a href= http://bbs.co.91.com/member.php?u=148935 >ativan addiction</a><a href= http://bbs.co.91.com/member.php?u=148948 >cheapest soma</a><a href= http://bbs.co.91.com/member.php?u=148946 >phentermine addiction</a>
Posted by aaa, 03/07/2009 11:06pm (23 horas atrás)
http://jmgmypium.com/pvu/1s
http://ouvthweg.com/qm8/8
http://birkkane.com/3b
http://nhroiv.com/6b3/r
http://vwsevihm.com/nlm/2z
http://jmgmypium.com/r7y/e
http://ouvthweg.com/25
http://birkkane.com/coi/33
http://nhroiv.com/lht/2b
http://vwsevihm.com/11
http://jmgmypium.com/qfw/2x
http://ouvthweg.com/qm8/25
http://birkkane.com/zg1/25
http://nhroiv.com/4
http://vwsevihm.com/6az/16
http://jmgmypium.com/zta/23
http://ouvthweg.com/qm8/17
http://birkkane.com/b
http://nhroiv.com/llq/2p
http://vwsevihm.com/hcf/3p
http://jmgmypium.com/6sp/6
http://ouvthweg.com/x7z/3k
http://birkkane.com/4m
http://nhroiv.com/wd4/f
http://vwsevihm.com/blo/12
http://jmgmypium.com/r7y/3u
http://ouvthweg.com/7oh/41
http://birkkane.com/coi/44
http://nhroiv.com/sgj/47
http://vwsevihm.com/hcf/z
Posted by Nathaniel Luna, 03/07/2009 9:13pm (1 dia atrás)
3885faed94 <a href= http://bbs.co.91.com/member.php?u=148943 >generic meridia</a> 295b8 <a href= http://bbs.co.91.com/member.php?u=148941 >hydrocodone</a> b70e3 <a href= http://bbs.co.91.com/member.php?u=148939 >order ephedrine</a> de3b1 <a href= http://bbs.co.91.com/member.php?u=148948 ></a> 57632 <a href= http://bbs.co.91.com/member.php?u=148953 ></a> 59504 <a href= http://bbs.co.91.com/member.php?u=148953 >viagra</a> deb30 <a href= http://bbs.co.91.com/member.php?u=148931 ></a> 4b42b <a href= http://bbs.co.91.com/member.php?u=148937 >cheap clonazepam</a> 9ab2f <a href= http://bbs.co.91.com/member.php?u=148947 >cheap propecia</a> c7bec <a href= http://bbs.co.91.com/member.php?u=148928 >cheapest zoloft</a> b2a9c <a href= http://bbs.co.91.com/member.php?u=148930 >cheapest nexium</a> 6f5e7 <a href= http://bbs.co.91.com/member.php?u=148930 >order nexium</a> bef0b <a href= http://bbs.co.91.com/member.php?u=148933 ></a> a935a <a href= http://bbs.co.91.com/member.php?u=148936 >cialis for sale</a> 82536 <a href= http://bbs.co.91.com/member.php?u=148922 ></a> bacd5
Posted by buy, 03/07/2009 9:09pm (1 dia atrás)
67206eafa5 <a href= http://bbs.co.91.com/member.php?u=148942 >order lipitor</a> 8d508 <a href= http://bbs.co.91.com/member.php?u=148925 >buy prozac online</a> 99b47 <a href= http://bbs.co.91.com/member.php?u=148921 >cheap fluoxetine</a> dc38c <a href= http://bbs.co.91.com/member.php?u=148928 >buy zoloft online</a> 5068f <a href= http://bbs.co.91.com/member.php?u=148918 ></a> ec84d <a href= http://bbs.co.91.com/member.php?u=148921 >fluoxetine pills</a> 74732 <a href= http://bbs.co.91.com/member.php?u=148915 >cheap carisoprodol</a> b50ce <a href= http://bbs.co.91.com/member.php?u=148934 ></a> 9da41 <a href= http://bbs.co.91.com/member.php?u=148952 >cheap valium</a> 8396d <a href= http://bbs.co.91.com/member.php?u=148939 ></a> 2a3ce <a href= http://bbs.co.91.com/member.php?u=148939 >ephedrine products</a> cbe2d <a href= http://bbs.co.91.com/member.php?u=148911 >cheapest butalbital</a> 5ee89 <a href= http://bbs.co.91.com/member.php?u=148922 >klonopin no prescription</a> 98aed <a href= http://bbs.co.91.com/member.php?u=148949 >order tramadol</a> 8fe01 <a href= http://bbs.co.91.com/member.php?u=148916 >celebrex</a> e01fd
Posted by cheapest, 03/07/2009 7:03pm (1 dia atrás)
80a9af4068 <a href= http://bbs.co.91.com/member.php?u=148916 >celebrex no prescription</a> 39678 <a href= http://bbs.co.91.com/member.php?u=148944 >paxil</a> 7ed17 <a href= http://bbs.co.91.com/member.php?u=148951 ></a> efef0 <a href= http://bbs.co.91.com/member.php?u=148934 >ambien pills</a> f6406 <a href= http://bbs.co.91.com/member.php?u=148931 >cheap zolpidem</a> e2839 <a href= http://bbs.co.91.com/member.php?u=148928 >purchase zoloft</a> 4305d <a href= http://bbs.co.91.com/member.php?u=148915 >carisoprodol online</a> 55764 <a href= http://bbs.co.91.com/member.php?u=148927 >zithromax online</a> a5bee <a href= http://bbs.co.91.com/member.php?u=148951 >cheapest ultram</a> bc984 <a href= http://bbs.co.91.com/member.php?u=148929 >cheap adipex</a> 05ebf <a href= http://bbs.co.91.com/member.php?u=148935 >buy ativan online</a> 039b9 <a href= http://bbs.co.91.com/member.php?u=148924 >buy nolvadex</a> 8c36a <a href= http://bbs.co.91.com/member.php?u=148947 >buy propecia</a> 150df <a href= http://bbs.co.91.com/member.php?u=148918 ></a> e986e <a href= http://bbs.co.91.com/member.php?u=148923 ></a> f3f5a
Posted by cheapest, 03/07/2009 5:08pm (1 dia atrás)
3fbabe1748 <a href= http://bbs.co.91.com/member.php?u=148932 >adipex online pharmacy</a> 740d3 <a href= http://bbs.co.91.com/member.php?u=148937 >clonazepam addiction</a> ad684 <a href= http://bbs.co.91.com/member.php?u=148930 >generic nexium</a> e1b09 <a href= http://bbs.co.91.com/member.php?u=148921 >fluoxetine</a> 56365 <a href= http://bbs.co.91.com/member.php?u=148935 >cheapest ativan</a> b648f <a href= http://bbs.co.91.com/member.php?u=148945 ></a> 93459 <a href= http://bbs.co.91.com/member.php?u=148927 >zithromax pills</a> 9c75b <a href= http://bbs.co.91.com/member.php?u=148954 ></a> 22223 <a href= http://bbs.co.91.com/member.php?u=148938 >diazepam online</a> e771a <a href= http://bbs.co.91.com/member.php?u=148950 >generic levitra</a> 56687 <a href= http://bbs.co.91.com/member.php?u=148933 ></a> b6c53 <a href= http://bbs.co.91.com/member.php?u=148941 >cheap hydrocodone</a> 03227 <a href= http://bbs.co.91.com/member.php?u=148950 >buy levitra online</a> 8eb4f <a href= http://bbs.co.91.com/member.php?u=148933 >rx adipex</a> 775fc <a href= http://bbs.co.91.com/member.php?u=148919 >effexor online</a> dd886
Posted by effexor, 03/07/2009 3:10pm (1 dia atrás)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 next »