39
Unidade II COMPILADORES E COMPUTABILIDADE COMPUTABILIDADE Prof. Leandro Fernandes

Cc Leandro 12-08 Sei Uni II (Fe) (Rf)Bb(1)

Embed Size (px)

DESCRIPTION

UNIP

Citation preview

Unidade IICOMPILADORES E COMPUTABILIDADE COMPUTABILIDADEProf. Leandro FernandesRoteiro Anlise sinttica ascendente: Analisadores LR(1). Anlise semntica: Gramtica de atributos. Tabela de smbolos. Gerao de cdigo: Linguagens intermedirias. Traduo dirigida pela sintaxe.Oti i Otimizaes. Assemblers, ligadores e carregadores.Anlise sinttica ascendenteanalisadores LR(1)O nome LR(1) indica que: A cadeia de entrada examinada da esquerda para a direita (left-to-right), isto , do incio para o fim do arquivo. O analisador procura construir uma O analisador procura construir uma derivao direta (rightmost) invertida: Torna-se invertida para que a entrada possa ser examinada do incio parao fim. Considera se apenas o 1osmbolo do Considera-se apenas o 1osmbolo do restante da entrada.Anlise sinttica ascendenteanalisadores LR(1) Decidimos qual regra A deve ser aplicada encontrando os ns vizinhos rotulados com os smbolos de . A reduo para A consiste em acrescent-lo rvore como um que agrupe todos os smbolos de como seus ns filhos. Considera duas informaes: O estado atual da anlise. O smbolo corrente da entrada O smbolo corrente da entrada. Uma tabela M codifica as operaes a serem realizadas de acordo com o autmato de reconhecimento.Construo do analisador Vrias possibilidades precisam ser consideradas em um mesmo momento. Um item A indica o ponto atual em que se encontra a anlise, ou seja: A regra A foi usada na derivao A regra A foi usada na derivao da cadeia de entrada. Os smbolos terminais derivados de j foram encontrados. Falta encontrar os smbolos terminais derivados de derivados de . Um estado do processo de anlise representado por um conjunto de itens.Gramtica aumentadaSuponha a gramtica (dada a esquerda):(1) E E + T(2) E T(3) T T * F(0) S E(1) E E + T(2) E TT T * FA t ( 0)( )(4) T F(5) F ( E )(6) F a(3) T T * F(4) T F(5) F ( E )(6) F a Acrescenta-se a nova regra (regra 0) para que seja possvel a identificao correta da raiz da rvore sinttica, diferenciando-a de outras ocorrncias dosmbolo inicial.Construo do analisador:definindo os estados O estado inicial dado pelo item formado a partir da regra 0 e contm todos os outros itens associados ao fechamento do estado.S EEstado 0:(0) S E(1) E E + T(2) E T(3) T T * FT FS EE E + TE TT T * F(4) T F(5) F ( E )(6) F aT FF ( E )F aConstruo do analisador:definindo os estados Os demais estados do autmato so obtidos qual o smbolo esperado para os itens do estado.Estado 0:S EEEstado 1:S ES EE E + TE TT T * FT FETF(E E + TEstado 2:T F...T FF ( E )F aaEstado 5:F a...Operaes do analisador LR(1)A tabela do analisador define as aes de: Empilhamento (shift): ocorrer quando uma transio com um terminal no estado corrente (topo da pilha) for realizada. Reduo: quando existe um item completo B e se o smbolo da entrada pertencer ao Follow(B), feita uma reduo pela regra B. Os || estados correspondentes a devem ser retirados da pilha e o estado ( B) d ilh d (q,B) deve ser empilhado, representando B. Aceitao: quando ocorre a reduo pela regra zero. Programa sintaticamente correto!Tabela do analisador LR(1)E T F ( A + * ) $0 1 2 3 4 5 - - - -1 - - - - - 6 - - r02 - - - - - r2 7 r2 r23 r4 r4 r4 r4 3 - - - - - r4 r4 r4 r44 8 2 3 4 55 - - - - - r6 r6 r6 r66 - 9 3 4 5 - - - -7 - - 10 4 5 - - - -8 - - - - - 6 119 - - - - - r1 7 r1 r110 - - - - - r3 r3 r3 r311 - - - - - r5 r5 r5 r5Analisando a sentena: a+aPilha Entrada Regra0 a+a M[0, a] = 5Empilha: a5 0 +a M[5, +] = r6Reduz:FaDesempilha o estado 5 (ref. smbolo a), volta para o estado 0 e empilha 3 (ref. smbolo F)3 0 M[3 ] 4R d T F3 0 +a M[3, +] = r4Reduz:TF2 0 +a M[2, +] = r1Reduz:ET1 0 +a M[1, +] = 6Empilha: +6 1 0 a M[6, a] = 5Empilha: a5 6 1 0 M[5, $] = r6Reduz:Fa3 6 1 0 M[3 $] 4R d T F3 6 1 0 M[3, $] = r4Reduz:TF9 6 1 0 M[9, $] = r1Reduz:EE+TDesempilha os estados 9, 6 e 1 (ref. smbolos E+T), volta para o estado 0 e empilha 1 (ref. smbolo E)1 0 M[1, $] = r0Interatividade A respeito dos analisadores sintticos LR(1), no se pode afirmar que:a) So analisadores redutores (estilo shift-reduceou empilha-reduz) ascendentes. So eficientes e leem a sentena em anlise da esquerda para a direita, produzindo uma derivao mais a direita, produzindo uma derivao mais direita ao reverso.b) Entre as vantagens, pode-se afirmar que so capazes de reconhecer praticamente todas as estruturas sintticas definidas por GLC.c) So capazes de descobrir erros sintticos durante a leitura da sentena em anlise.d) O YACC gera analisadores ascendentes.e) Os erros so identificados sempreno momento mais tarde, isto , naleitura de tokens.Anlise semntica: 3aetapa do processo de anliseAnalisador semnticoTabela de smbolosAnalisador sintticorvore sintticaAnalisador lxicoTokensTarefas da anlise semntica responsvel por trs tarefas: Construir a descrio interna dos tipos e das estruturas de dados definidos no programa do usurio. Armazenar na tabela smbolos as Armazenar na tabela smbolos as informaes sobre os identificadores (de constante, tipos, variveis, procedimentos, parmetros e funes) que so usados no programa. Verificar o programa quanto a erros Verificar o programa quanto a erros semnticos (erros dependentes de contexto) e checagens de tipos com base nas informaes contidasna tabela de smbolos.O componente semntico Verificar a utilizao adequada dos identificadores. Anlise contextual: declaraes prvias de variveis, escopo de uso etc. Checagem de tipos e compatibilidade. g p p Essas tarefas esto alm do domnio da sintaxe (Gram. Livres de Contexto - GLC). Aumenta a GLC e completa a definio do que so programas vlidos. A anlise ocorre em dois aspectos: A anlise ocorre em dois aspectos: Semntica esttica. Semntica de tempo de execuo.O componente semntico:semntica esttica Conjunto de restries que determinam se programas sintaticamente corretos so vlidos. As atividades compreendidas so: A checagem de tipos. A checagem de tipos. A anlise de escopo de declaraes. A verificao da quantidade e dos tipos dos parmetros em sub-rotinas. Pode ser especificada formalmente por uma gramtica de atributos.O componente semntico:semntica de tempo de execuo usada para especificar o que o programa faz, isto , a relao do programa-fonte (objeto esttico) com a sua execuo dinmica. Exemplo:L:gotoL;if (i0)&&(K/I>10)... Importante para a gerao de cdigo. Geralmente, especificada de modo informal, mas possvel o uso de formalismos, tais com as gramticas de atributos (dentre outros).Gramtica de atributos uma gramtica livre de contexto estendida para fornecer sensitividade ao contexto atravs de atributos ligados a terminais e no terminais. Um atributo qualquer propriedade de uma construo da linguagem.(1) D T L L.in := T.tipo(2) T int T.tipo := inteiro(3) T float T.tipo := real(4) L L1, idL1.in := L.inincluirTS(id.token, L.in)(5) L idincluirTS(id.token, L.in)Calculando os atributos Com base na rvore sinttica explcita. Ad hoc ( comandadapelo parser). Podem ser calculados tanto durante a compilao quanto na execuo. Exemplos: Tipo de dado de uma varivel (compilao). Valor de uma expresso (execuo, exceto expresses que tratem de constantes). Endereo do incio do cdigo objeto de um procedimento (compilao). Declarao de objeto no contexto (compilao, para linguagens que exigem declarao prvia).Tabela de smbolos Armazena as informaes sobre todos os identificadores do cdigo fonte: Captura a sensitividade ao contexto e as aes executadas no decorrerdo programa. Est atrelada a todas as etapas da compilao, sendo a estrutura principal do processo. Fundamental para: Realizar a anlise semntica Realizar a anlise semntica. A gerao de cdigo.Operaes (insero e busca) envolvendo a tabela de smbolosPodem ser implementadas como: Chamadas na gramtica de atributos. L L1, id if (buscaTS(id) == false)incluirTS(id, L.tipo)else elseERRO( J declarado ) Diretamente na anlise sinttica. Insero: quando analisa declaraes de variveis, sub-rotinas, parmetros. Busca: em atribuies, expresses, chamadas de sub-rotinas ou qualquer outro uso de um identificador em um bloco de comandos.Interatividade Analise as mensagens de erro a seguir:I. Identificador j declarado no escopo atual.II. Identificador de tipo esperado.III. Quantidade de parmetros incompatvel com a funo. IV. Funo ou varivel no definida (lado esquerdo de atribuies).Quais destes so de natureza semntica?a) Apenas o item I.b) Itens I e II b) Itens I e II.c) Itens I, III e IV.d) Itens I, II e IV.e) Itens I, II, III e IV.Gerao de cdigo: enfim, a traduo efetivamente! Corresponde 1aetapa do processo desntese (modelo de anlise e sntese). Em geral, ocorre em duas fases: Traduo da estrutura construda na anlise sinttica para um cdigo em anlise sinttica para um cdigo em linguagem intermediria, usualmente independente do processador. Traduo do cdigo em linguagem intermediria para a linguagem simblica do processador-alvo. simblica do processador alvo. Produo do cdigo binrio realizada por outro programa (montador).Cdigo intermedirio H vrias formas de representao de cdigo intermedirio, sendo as mais comuns: rvore e grafo de sintaxe: Notaes ps-fixadas e pr-fixadas. Notaes ps fixadas e pr fixadas. Representaes linearizadas. Cdigo de trs endereos: Qudruplas ou triplas. Instrues assembler. HIR, MIR e LIR High, Medium e LowIntermediate Representation.Cdigo intermedirio: rvore e grafo de sintaxe A rvore de sintaxe mostra a estrutura hierrquica de um programa fonte. O grafo de sintaxe inclui simplificaes da rvore de sintaxe. Exemplo: a = b * c + b * c Exemplo: a b c b c* *:=a +*:=a +b c b cb cCdigo intermedirio: cdigo de trs endereos Cada instruo ter, no mximo, trs variveis (dois operandos e o resultado): Formato independente e fcil de traduzir para linguagem simblica de qualquer processador. Expresses complexas devem ser decompostas em vrias expresses: Necessitam de variveis temporrias! Exemplos de instrues: A := B op C,A := op B,A := B goto L if A op_rel B goto LCdigo intermedirio: cdigo de trs endereos Exemplo: a = b + c * d Qudruplas:Op Arg1 Arg2 Res1 * c d _t1 Triplas:2 + b _t1 aOp Arg1 Arg21 * c d 1 c d2 + b (1)3 := a (2)Gerao de cdigo: traduo dirigida pela sintaxe Construda a partir do mecanismo empregado na verificao de tipos, isto , uma gramtica de atributos. Adicionam-se regras que permitam a gerao de cdigo intermedirio simultaneamente a aes semnticas.S id := E geracod(id.valor " :="E.valor)E E1+ E2E.val = geratemp();geracod(E.val " :="E1.val " +"E2.val)E E1 * E2E.val = geratemp(); E E1E2E.valgeratemp();geracod(E.val " :="E1.val " *"E2.val)E ( E1) E.val = E1.val;E id E.val = id.val;Interatividade Analise as seguintes afirmativas:I. A gerao de cdigo intermedirio torna o compilador mais portvel, mas a otimizao mais difcil por estar longe do cdigo alvo.II. O problema de gerar cdigo timo indecidvel. Geralmente, so usadas tcnicas heursticas que,, q ,na maior parte do tempo, geram bom cdigo.III. So exemplos de cdigo intermedirio as notaes pr-fixas, ps-fixas e o cdigo de trs endereos.Pode-se afirmar ser correta a alternativa:) It I a) Item I.b) Item II.c) Itens I e II.d) Itens II e III.e) Itens I, II e III.Montadores, ligadores (linkers) e carregadores (loaders)Compilador001011101000101110100010111010mov axaddbxload $xintermMontadorLigador1101000101obj1101000101obj00101obj001011101000101CarregadorexeRAMMontadores (assemblers)As funes da montagem compreendem: Substituir os mnemnicos pelos opcodes do conjunto de instrues do processador. Determinar de maneira absoluta ou Determinar de maneira absoluta ou relativa (termos do valor do registrador Program Counter) o endereo de destino dos rtulos. Reservar espao para dados de acordo com o tipo associado a cada varivel. com o tipo associado a cada varivel. Gerar constantes em memria para variveis e constantes, determinando o valor associado ao modo de endereamento do operando.Assemblers (montadores)Programa em linguagem de alto nvelPrograma em linguagem de montagem (assembly)Programa em linguagem de mquinaRtulo Mnemnico Oper End. Opcod Operint a,b,c; INPUT N1 00 12 13read(a) INPUT N2 02 12 14read(b) LOAD N1 04 10 13c = a + b; ADD N2 06 01 14write(c); STORE N3 08 11 15OUTPUTN3 10 13 15OUTPUTN3 10 13 15STOP 12 14N1: SPACE 13 ??N2: SPACE 14 ??N3: SPACE 15 ??Formato do arquivo objetoDado pela identificao de tipo, tamanho do cdigo e, eventualmente, o arquivo de origem.CabealhoContm as instrues e os dados em Cdigo geradoformato binrio.geradoContm as posies no cdigo em que ocorrero mudanas quando for definida a posio de carregamento.RelocaoLista de smbolos globais definidos Tabela degno mdulo e smbolos externos, que devem vir de outros mdulos.Tabela de smbolosContm referncias para o cdigo fonte (ex.: nmero de linha e nomes de identificadores).DepuraoLigadores (linkers) Reunir os vrios mdulos, objetos obtidos da traduo dos vrios arquivos fontes em um nico programa, o mdulo absoluto de carga. Deve ser capaz de resolver referncias cruzadas endereos dados pelos mdulos devem ser atualizados (problema de relocao). Quando existe um procedimento A que chama a um procedimento B, o endereo absoluto de B s conhecido apsa ligao (problema de referncia externa).Tarefas do linker Construir uma tabela com todos os mdulos objetos e seus respectivos comprimentos. Atribuir um endereo de carga a cada mdulo objeto. Relocar todas as instrues que contm um endereo, adicionando uma constante de relocao (endereo inicial de cada mdulo). Encontrar todas as instrues que Encontrar todas as instrues que referenciam outros procedimentos e inserir nelas o endereo absoluto dos mesmos.Carregador (loader) Copiar um programa para a memria principal e preparar sua execuo. Atividades: Verificar se o programa existe. Avaliar a quantidade de memriaqnecessria e solicit-la ao SO. Copiar o contedo do arquivo (cdigo) para a memria. Ajustar os endereos do cdigo executvel de acordo com a posiop base de carregamento. Tipos de carregadores: absolutos, relocador e dinmico.Tipos de carregadores Absoluto: considera que programa carregado sempre no mesmo endereo. Relocador: se a carga do programa na posio X da memria, adiciona X a cada uma das referncias do programa. Dinmico: em situaes de swapping, pois os processos no necessariamente retornam mesma posio! Executa relocao no momento em que a posio for referenciada. a posio for referenciada. Os endereos devem ser relativos ao incio do mdulo na memria.Interatividade Analise as afirmativas:I. Os montadores (assemblers) realizam a converso de programas em linguagem de montagem para a linguagem de mquina.II. Um editor de ligao, ou ligador (linker), permite combinar mdulos montados separadamente empum nico programa.III. A funo principal de um programa carregador (loader) permitir a edio de um programa em linguagem de alto nvel.Est correta a alternativa:) It I a) Item I.b) Item III.c) Itens I e II.d) Itens II e III.e) Todos os itens esto corretos.AT A PRXIMA!