-
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. Análise léxica - 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. A SAÍDA É UM FLUXO DO SÍMBOLO (TOKEN). As expressões regulares são usadas para definir o símbolo reconhecido por um varredor (ou pelo analisador lexical). Por exemplo, suponha a expressão abaixo, descrita em Pascal:Exp := (A + B) * 1.5;Os itens léxicos contidos nesta expressão, são:Exp, :=, (, A, +, B, ), *, 1.5 e ;.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 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 tiposFASE DE SINTESEA 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 melh
-
Compiladores - Fases
• Análise (divide o programa fonte nas partes
constituintes e cria uma representação
intermediária dos mesmos)
– Léxica (tokens)
– Sintática (árvore sintática)
– Semântica (incoerências semânticas)
• Síntese (constrói o programa alvo desejado a
partir da representação intermediária)
– Geração de código intermediário
– Otimização do código
– Geração do código
-
Compiladores - Fases
• Análise (divide o programa fonte nas partes
constituintes e cria uma representação
intermediária dos mesmos)
– Léxica (tokens)
– Sintática (árvore sintática)
– Semântica (incoerências semânticas)
• Síntese (constrói o programa alvo desejado a
partir da representação intermediária)
– Geração de código intermediário
– Otimização do código
– Geração do código
-
Gabarito A
Análise léxica, linear, esquadrinhamento (scanning): o fluxo de caracteres que constitui o programa é lido da esquerda para a direita e agrupado em tokens, que são seqüências de caracteres tendo um significado coletivo.
1.1. Léxica (desmembra cada expressão do código em tokens ou símbolos)
1.2. Sintática (dispõe os símbolos através de uma estrutura hierárquica - árvore)
1.3. Semântica (verifica se há incoerências na estrutura formada)
"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !