Linguagens de Programação e Compiladores

Documentos relacionados
Linguagens de Programação

RAD1507 Estatística Aplicada à Administração I Prof. Dr. Evandro Marcos Saidel Ribeiro

Classificação e Pesquisa de Dados

Algarismos Significativos Propagação de Erros ou Desvios

ALGORITMO E PROGRAMAÇÃO

Figura 8.1: Distribuição uniforme de pontos em uma malha uni-dimensional. A notação empregada neste capítulo para avaliação da derivada de uma

Revisão: linguagens de programação

Programação Não Linear. Programação Não-Linear 1

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

O íon lantanídeo no acoplamento Russell-Saunders e a classificação de seus estados segundo os subgrupos do grupo GL(4

IMPLEMENTAÇÃO DO MÉTODO DE FATORAÇÃO DE INTEIROS CRIVO QUADRÁTICO

Capítulo 2. APROXIMAÇÕES NUMÉRICAS 1D EM MALHAS UNIFORMES

3 Animação de fluidos com SPH

D- MÉTODO DAS APROXIMAÇÕES SUCESSIVAS

Modelagem do Transistor Bipolar

Compiladores Aula 1. Celso Olivete Júnior.

Teoria Elementar da Probabilidade

7 - Distribuição de Freqüências

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

SÉRIE DE PROBLEMAS: CIRCUITOS DE ARITMÉTICA BINÁRIA. CIRCUITOS ITERATIVOS.

Compiladores. Introdução à Compiladores

Guia 11 Escalonamento de Mensagens

Linguagens de Programação Aula 3

Eletrotécnica AULA Nº 1 Introdução

Covariância e Correlação Linear

Compiladores I Prof. Ricardo Santos (cap 1)

Probabilidade e Estatística I Antonio Roque Aula 4. Resumos Numéricos de Distribuições

Mecanismos de Escalonamento

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Capítulo 5. Nomes, Vinculações e Escopos

Introdução a Combinatória- Aplicações, parte II

Laboratório de Mecânica Aplicada I Estática: Roldanas e Equilíbrio de Momentos

A VELOCIDADE ESCALAR. Prof. Alberto Ricardo Präss

x Ex: A tabela abaixo refere-se às notas finais de três turmas de estudantes. Calcular a média de cada turma:

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Flambagem. Cálculo da carga crítica via MDF

Sempre que surgir uma dúvida quanto à utilização de um instrumento ou componente, o aluno deverá consultar o professor para esclarecimentos.

Testes não-paramétricos

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Curso Técnico em Redes

Análise Dinâmica de uma Viga de Euler-Bernoulli Submetida a Impacto no Centro após Queda Livre Através do Método de Diferenças Finitas

Compiladores. Análise Léxica

V.1. Introdução. Reações Químicas.

Prof. Oscar. Cap. 20 ENTROPIA E SEGUNDA LEI DA TERMODINÂMICA

DIFERENCIANDO SÉRIES TEMPORAIS CAÓTICAS DE ALEATÓRIAS ATRAVÉS DAS TREND STRIPS

Introdução aos Compiladores

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

É o grau de associação entre duas ou mais variáveis. Pode ser: correlacional ou experimental.

1. ANÁLISE EXPLORATÓRIA E ESTATÍSTICA DESCRITIVA

Notas Processos estocásticos. Nestor Caticha 23 de abril de 2012

4 Discretização e Linearização

Compiladores. Introdução

Transcrição:

Lnguagens de Programação e Compladores Lnguagens de Programação capacdade de expressar déas conhecmento melhor escolha acldade de aprender novas lnguagens entendmento da mplementação acldade de projetar novas lnguagens Classcação Classcação quanto a Geração Classcação quanto ao domíno de aplcação Classcação quanto a Implementação Classcação quanto ao Paradgma de Programação Classcação quanto a Geração: 1 a Geração Lnguagens de Máquna 2 a Geração Lnguagens Smbólcas (Assembly) 3 a Geração Lnguagens orentadas ao usuáro procedmentas (proceduras ou mperatvas) nstruções: E/S, artmétcas e lógcas, de controle. Ex.: Algol, Pascal, C declaratvas Funconas teora das unções recursvas (Lsp) Lógcas lógca de predcados (Prolog) 4 a Geração Lnguagens orentadas a aplcação Ex.: lotus, excel, sql, L. grácas e de smulação 5 a Geração Facldades para representação do conhecmento usadas na área de Intelgênca Artcal Classcação quanto ao domíno de aplcação Centícas Estruturas de dados smples, pouca E/S, alta utlzação de CPU. Ex.: Fortran, Algol e suas dervadas Comercas Facldades para representação/manpulação de dados ala-numércos. Facldade para geração de relatóros. Ex.: Cobol, Planlhas eletrôncas e sstemas de BD Programação de sstemas desenvolvmento de sotware básco, recursos de baxo nível e bom desempenho. Ex.: PL/I, Algol e C Lnguagens para propóstos especas Lnguagens de Scrptng: Javascrpt, perl, php. Lnguagens para IA: Lsp, Prolog. Lnguagens de smulação : GPSS. Lnguagens Tempo Real: RTCC, RTJava Classcação quanto a Implementação Complação geração de códgo de baxo nível. Vantagem: ecênca na execução. Ex.: Fortran, cobol, C, Ada, Pascal. Interpretação smulação de uma máquna em sotware. Vantagem: rapdez no desenvolvmento. Desvantagem: maor tempo de execução. Exs.: Basc, APL, PHP, Lnguagens de controle, Lnguagens de consulta Implementação Híbrda complação para um códgo ntermedáro (o Int. pode ou não ser transparente). Interpretação do códgo ntermedáro reúne vantagens e desvantagens dos anterores. Exs : Java, algumas versões de Pascal Classcação quanto ao Paradgma de Programação Lnguagens Imperatvas (Proceduras, Estruturadas) Algol, Pascal, C, Modula e ADA. Lnguagens Baseadas/Orentadas a Objetos Smaltalk (pura), C++, Java, Delph Lnguagens Lógcas lnguagem declaratva baseada no cálculo dos predcados. Processo de nerênca para produzr resultados. Exemplos: PROLOG e seus daletos. Lnguagens Funconas baseado em unções matemátcas (unções prmtvas + ormas para construção de unções complexas); não possuem varáves, atrbução e teração; podem ou não ser puras (presença de alguns recursos mperatvos); repetção eta va recursão; execução avalação de unções; normalmente nterpretadas, embora possam ser compladas. Exemplos: LISP,Scheme, ML, Haskell. Proa. Tem Chrstne Sakata 1

Fases da Complação Um complador é um programa que lê um programa escrto em uma lnguagem (códgo onte) e o traduz num programa equvalente numa outra lnguagem (programa alvo). Concetualmente, um complador opera em ases, cada uma das quas transorma o programa onte de uma representação para outra. As três prmeras ases podem ser agrupadas e a representação ntermedára não precsa ser explctamente construída. p = + r * 60 léxca d1 := d2 + d3 * 60 semântca := sntátca := d1 + d1 + d2 * Uma tabela de símbolos é uma estrutura de dados contendo um regstro para cada dentcador, com os campos contendo os atrbutos do dentcador. A estrutura de dados nos permte encontrar rapdamente cada regstro e, gualmente, armazenar ou recuperar dados do mesmo. d2 * d3 60 d3 nttoreal 60 Cada ase pode encontrar erros. Entretanto, após encontrálos, precsa ldar de alguma orma com os mesmos, de tal orma que a complação possa contnuar, permtndo que sejam detectados erros posterores no programa onte. Programa onte A ase de análse léxca, lê os caracteres de um programa onte e os agrupa num luxo de tokens, sendo que cada token é uma palavra conhecda pela lnguagem. A análse sntátca é responsável pela vercação da manera como os tokens são agrupados (rases gramatcas). Usualmente, as rases gramatcas do programa onte são representadas por uma árvore gramatcal. A ase de análse semâmtca verca os erros semântcos no programa onte e captura as normações de tpo para a ase subseqüente de geração de códgo. Complador Léxca p = + r * 60 Sntátca Tabelas Semântca Síntese Geração de Cod. Inter. Otmzação de Tratamento de erros Geração de códgo ntermedáro temp1 := nttoreal(60) temp2 := d3 * temp1 temp3 := d2 + temp2 d1 := temp3 Otmzação de códgo temp1 := d3 * 60.0 d1 := d2 + temp1 Geração de códgo MOVF d3, R2 MULF #60.0, R2 MOVF d2, R1 ADDF R2, R1 MOVF R1, d1 Geração de Programa Objeto A geração de um códgo ntermedáro tem o objetvo de ser de ácl produção e de ácl tradução para o programa alvo. A representação ntermedára pode ter váras ormas, entre elas o códgo de três endereços. A ase de otmzação de códgo, tenta melhorar o códgo ntermedáro de tal orma que venha resultar um códgo de máquna mas rápdo em tempo de execução. A ase nal do complador é a geração de códgo alvo, consstndo normalmente de códgo de máquna. Os endereçamentos de memóra são seleconados para cada uma das varáves usadas pelo programa. Proa. Tem Chrstne Sakata 2

Léxca - Importânca projeto smplcado: permte smplcar outras ases (códgos sem comentáros e espaços em branco) denção de uma nova lnguagem ca mas clara. maor ecênca permte construr processadores especícos e mas ecentes para determnadas tareas. melhor portabldade anomalas na entrada em relação ao alabeto podem ser restrngdas nesta ase. Tokens Léxcos Nome Exemplos comentáro oo n14 last /* try agan */ 73 0 00 515 082 dretvas do pré-processador 66.1.5 10. 1e67 #nclude, #dene macro COMMA, S NOTEQ!= espaços em branco LPAREN ( tabulação RPAREN ) nova lnha A análse léxca é a premra etapa da complação. A separação da análse léxca da análse sntátca aclta o projeto e torna o complador mas ecente e portável. Na ase da análse léxca, utlzamos o termo token para as palavras com um sgncado especíco. Em geral, exste um conjunto de cadeas de entrada para as quas o mesmo token é produzdo como saída. Tratamos os tokens como símbolos termnas na gramátca para a lnguagem-onte, usando nomes para representá-los. Na maora das lnguagens de programação, as seguntes construções são tratadas como tokens: palavraschave, operadores, dentcadores, constantes, lteras, cadeas e símbolos de pontuação. Analsador Léxco Programa que converte o programa texto em uma cadea de tokens. orgnal Analsador Léxco Cadea de tokens Token: seqüênca de caracteres que podem ser tratados como uma undade: nomes, palavras-chave e pontuações. Comentáros e espaços em branco são descartados. Tokens Léxcos Para o trecho de códgo a segur: loat match0(char *s) /* nd a zero */ { (!strncmp(s, "0.0", 3)) return 0.; } O analsador léxco retornará: FLOAT (match0) LPAREN CHAR STAR (s) RPAREN LBRACE LPAREN BANG (strncmp) LPAREN (s) COMMA STRING(0.0) COMMA (3) RPAREN RPAREN RETURN (0.0) SEMI RBRACE EOF O conjunto de tokens é dendo por um alabeto e por um conjunto de regras (expressôes regulares). A prncpal tarea do analsador léxco é de ler os caracteres de entrada (códgo onte) e produzr uma seqüênca de tokens (undades sgncatvas) utlzadas na análse sntátca. Outra tarea do analsador léxco é remover do programa onte, comentáros e espaços em branco. Um padrão é uma regra que descreve o conjunto de símbolos que podem representar um token partcular. Por exemplo, o padrão para a palavra é exatamente a cadea. Para cada palavra reconhecda, seu nome é retornado. Proa. Tem Chrstne Sakata 3

Expressões Regulares RE NFA Abrevações: [abcd] (a b c d) [b-gm-qkr] M? (M ) [b c d e g M N O P Q k r] M + (M M ) Ao descrever as expressões regulares para uma determnada lnguagem, é comum utlzar as abrevações acma para smplcar e acltar suas construções. 2 3 1 14 qq char erro 15 4 5 6 7 8 9 10 11 12 13 ER para Alguns Tokens Sabemos que é ácl construr um Autômato Fnto Nãodetermnístco a partr de uma expressão regular. Portanto, após denr as expressões regular que denem os tokens da lnguagem, constró-se um AFN para reconhecer todas as palavras da lnguagem. [a-z][a-z0-9] {return ;} {return ;} [0-9] + {return ;} ([0-9] + "."[0-9] ) ([0-9] "."[0-9] + ) {return ;} ("--"[a-z] "\n") " " \n \t) + { /* do nothng */ }. {error();} Na análse léxca, denmos quas são os tokens que podem ser reconhecdos. Normalmente, denmos os tokens da lnguagem através de expressões regulares. Autômatos Fntos Determnístcos 3 Resolvendo Ambgüdades Ambgüdades do RE: 8 deve ser consderado como dentcador ou como dos tokens: e 8? a strng 89 começa com um dentcador ou uma palavra-chave? Maor Token Possível Regra de Prordade - o tpo do token é determnado pela prmera expressão que se gualar na especcação da ER.. 3. [a-z][a-z0-9] 4 5 branco \n 3 4 espaço, etc. {return ;} {return ;} [0-9] + {return ;} ([0-9] + "."[0-9] ) ([0-9] "."[0-9] + ) {return ;} ("--"[a-z] "\n") " " \n \t) + { /* do nothng */ }. {error();} espaço, etc. 5 outros erro Exstem duas regras utlzadas para elmnar a ambgüdade na construção das expressões regulares. A prmera é que o autômato reconhece a maor palavra possível, ou seja, não pára no prmero estado nal que passa. A segunda regra mpede que um token seja reconhecdo por duas expressões regulares ao mesmo tempo. Para mplementar o reconhecmento dos tokens utlzamos um Autômato Fnto Determnístco. Proa. Tem Chrstne Sakata 4

Autômato Fnto Combnado ae, gz, erro, 2 3 4 5 6 branco espaço espaço 1 outros 12 13 ah, jz.. 7 8 \n 9 10 11 erro erro branco Reconhecendo Maor Combnação Last Current Input Acton 0 1 --not-a-com 2 2 --not-a-com 3 3 --not-a-com 3 0 --not-a-com return 0 1 --not-a-com 12 12 --not-a-com 12 0 - -not-a-com branco 0 1 --not-a-com 9 9 - -not-a-com Dado o AFD acma, vamos analsar como a entrada (códgo onte) --not-a-com sera avalado por um analsador léxco. 9 10 - - not-a-com 9 10 - -n ot-a-com 9 10 - -no t-a-com 9 10 - -not -a-com 9 0 - -not- a-com erro 0 1 - -not-a-com 9 9 - - not-a-com 9 0 - - n ot-a-com erro posção de entrada posção corrente do autômato últmo estado nal analsado Proa. Tem Chrstne Sakata 5