Analise Semântica. Simão Melo de Sousa

Tamanho: px
Começar a partir da página:

Download "Analise Semântica. Simão Melo de Sousa"

Transcrição

1 Analise Semântica Simão Melo de Sousa RELEASE - RELiablE And SEcure Computation Group Computer Science Department University of Beira Interior, Portugal desousa@di.ubi.pt desousa/ S. Melo de Sousa (DIUBI) A. Semântica 1 / 49

2 Este documento é uma tradução adaptada do capítulo "Analyse Sémantique" da sebenta "Cours de Compilation" de Christine Paulin ( paulin). S. Melo de Sousa (DIUBI) A. Semântica 2 / 49

3 Plano 1 Introdução 2 Tabelas de símbolos e analise de porte 3 Analise de Tipos S. Melo de Sousa (DIUBI) A. Semântica 3 / 49

4 Papel da analise semântica Entrada: Uma árvore de sintaxe abstracta Saída: uma árvore de sintaxe abstracta decorada: resultado da compreensão do programa auscultado. um erro, se o programa auscultado é incorrecto. Ferramentas teóricas: descrições semânticas. Ferramentas de software: programas de natureza recursivas sobre as árvores de sintaxe abstracta. S. Melo de Sousa (DIUBI) A. Semântica 4 / 49

5 Plano 1 Introdução 2 Tabelas de símbolos e analise de porte Princípios Exemplo Implementação 3 Analise de Tipos S. Melo de Sousa (DIUBI) A. Semântica 5 / 49

6 Objectivos e princípios da analise de porte Detectar e localizar a declaração de objectos inerentes à linguagem de suporte (variáveis, tipos, procedimentos, funções, objectos, classes, etc.). Ligar a utilização de um objecto a sua declaração. Uma vez esta ligação definida, arquivá-la adequadamente para o seu uso em fases posteriores. Localizar e exibir a utilização de objectos não declarados. S. Melo de Sousa (DIUBI) A. Semântica 6 / 49

7 Tabela dos símbolos Várias informações devem ser calculadas e extraídas para cada identificador introduzido: Natureza/qualidade do objecto: variáveis, procedimento, tipo... para as variáveis, se estas são globais ou locais, qual é o porte, etc... Tipo duma variável, assinatura de uma função, etc. Alocação em memória (localização, tamanho. etc.) Estas informações servirão de cada vez que o objecto alvo é utilizado Criação de uma ligação directa entre a utilização e as informações arquivadas. S. Melo de Sousa (DIUBI) A. Semântica 7 / 49

8 Árvores de sintaxe anotadas Há várias representações possíveis para ligar as utilizações às declarações: Cada utilização é um apontador para a declaração Cada utilização é um nome único ou então um número que se refere a uma tabela anexa que contém informação sobre as declarações. Neste caso, é possível utilizar várias tabelas, consoante utilidade e a fase de compilação considerada. A analise de porte (scope) subjacente permitirá construir uma nova representação da árvore de sintaxe. S. Melo de Sousa (DIUBI) A. Semântica 8 / 49

9 Verificar o porte Entrada: a árvore de sintaxe proveniente da analise sintáctica Saída: uma nova árvore de sintaxe abstracta com identificadores únicos e uma tabela de símbolos que arquiva as informações sobre os identificadores (e.g. onde estão as variáveis, se estas são locais ou globais etc.) Erro: Se uma variável foi utilizada sem ser previamente declarada, ou então fora do seu âmbito/porte (scope) Técnica utilizar uma lista de associações intermédias entre nomes visíveis e declarações de ambiente identificadas por um nome único. S. Melo de Sousa (DIUBI) A. Semântica 9 / 49

10 Arith extendido com funções type i d e n t = s t r i n g type binop = Sum D i f f Prod Quot type unop = Neg type e x p r = F o f f l o a t I o f i n t Var o f i d e n t Op o f binop e x p r e x p r UOp o f unop e x p r L e t i n o f i d e n t e x p r e x p r App o f i d e n t e x p r l i s t type i n s t r = Set o f i d e n t e x p r P r i n t o f e x p r Fun o f i d e n t i d e n t l i s t e x p r type prg = i n s t r l i s t A analise sintáctica vai construir um objecto de tipo prg A analise de porte irá produzir um novo objecto de tipo prg e uma tabela identificando cada declaração. S. Melo de Sousa (DIUBI) A. Semântica 10 / 49

11 (Um exemplo de programa s e t x = 4 fun f ( x, y ) = 2 x + y s e t xx = l e t y = f ( x, 5 ) i n ( y y ) A árvore de sintaxe abstracta resultante é: [ Set ("x",i 4) ; Fun ("f", ["x";"y"], Op (Plus, Op (Mult, I 2, (Var "x")), Var ("y",u), U); Set ("xx", Letin ("y", App ("f",[var "x"; I 5]), UOp (Neg, Op (Mult,Var "y",var "y")))) ] S. Melo de Sousa (DIUBI) A. Semântica 11 / 49

12 Após a analise de porte Nomes únicos para os objectos Uma tabela de símbolos que arquiva as informações sobre as declarações: o nome original, a natureza do nome, a sua localização, o número de parâmetros no caso de funções, etc... [ Set ("x_0",i 4) ; Fun ("f_3", ["x_1";"y_2"], Op (Plus, Op (Mult, I 2, (Var "x_1",u), U), Var ("y_2",u), U); Set ("xx_5", Letin ("y_4", App ("f_3",[var "x_0"; I 5],U), UOp (Neg, Op (Mult,Var "y_4",var "y_4",u), U))) ] x 0 Global(1) x x 1 Param(1) x y 2 Param(2) y f 3 Fun(1) f y 4 Local(1) y xx 5 Global(2) xx S. Melo de Sousa (DIUBI) A. Semântica 12 / 49

13 Regras para a análise de porte ρ e ok significa: no ambiente em que os identificadores de ρ são visíveis, a expressão e respeita as regras de porte. ρ e 1 ok ρ e 2 ok ρ Op (e 1, op, e 2 ) ok ρ e 1 ok ρ UOp (op, e 1 ) ok x ρ ρ Var (x) ok ρ e 1 ok ρ + x e 2 ok ρ Letin (x, e 1, e 2 ) ok (ρ e i ok) i=1...n f ρ ρ App (f, [e 1 ;... ; e n ]) ok ρ e ok ρ + x p ok ρ (Set (x, e) :: p) ok ρ e ok ρ p ok ρ (Print (e) :: p) ok (ρ + I [+f] e ok) ρ + f p ok ρ (Fun (f, I, e) :: p) ok ρ [] ok S. Melo de Sousa (DIUBI) A. Semântica 13 / 49

14 Decorar o AST ρ e e, d e respeita as regras de porte no ambiente ρ e : AST correspondente onde os identificadores são únicos para as variáveis d: conjunto das declarações: para cada identificador x, o nome original no programa, a sua natureza (função, variável local, variável global, parâmetro etc...) ) S. Melo de Sousa (DIUBI) A. Semântica 14 / 49

15 Regras de decoração ρ e e, d ρ e 1 e 1, d 1 ρ e 2 e 2, d 2 ρ e 1 e 1, d ρ Op(op, e 1, e 2) Op(op, e 1, e 2), d 1 d 2 ρ UOp(op, e 1, ) UOp(op, e 1), d (x n) ρ ρ Var(x) Var(n), (ρ e i e i, d i ) (f f ) ρ ρ App(f, [e 1;... ; e n]) App(f, [e 1;... ; e n]), i d i ρ e 1 e 1, d 1 (n, d) = new(x, LOC) ρ + (x n) e 2 e 2, d 2 ρ Letin(x, e 1, e 2) Letin(x, e 1, e 2), {d} d 1 d2 S. Melo de Sousa (DIUBI) A. Semântica 15 / 49

16 Regras de decoração ρ p p, d ρ e e, d 1 ρ p p, d 2 ρ Print(e) :: p Print(e ) :: p, d 1 d 2 ρ e e, d 1 (n, d) = new(x, GLOB) ρ(x n) p p, d 2 ρ Set(x, e) :: p Set(n, e ) :: p, {d} d 1 d 2 ((n i, d i ) = new(x i, PAR)) i ρ + (x i n i ) i e e, d e (f, d f ) = new(f, FUNC) ρ + (f f ) p p, d p ρ Fun(f, [x 1;... ; x p], e) :: p Fun(f, [n 1;... ; n p], e ) :: p, ( i d i ) d e d f d p S. Melo de Sousa (DIUBI) A. Semântica 16 / 49

17 Algumas notas sobre a analise de porte É preciso distinguir claramente: a tabela dos símbolos que contém, o conjunto das declarações locais e globais incluídas no programas e que faz parte da representação (abstracta) do programa do ambiente local ρ que arquiva as variáveis visíveis num ponto particular de um programa e que deixa de ser utilizada após a analise de porte. S. Melo de Sousa (DIUBI) A. Semântica 17 / 49

18 Funções de análises - estruturas de dados e assinaturas Tabela dos símbolos: pode ser global e x c e p t i o n S c o p e E r r o r t y p e annot = GLOB LOC PAR FUNC ( s t o r e d e c l a r a t i o n i n t a b l e, r e t u r n s u nique i d e n t i f i e r ) v a l add_decl : i d e n t annot i d e n t Variáveis visíveis: lista associativa ou uma estrutura de dados de tipo map (associações funcionais optimizadas, para as quais existe um módulo em OCaml) que associa um inteiro a uma string type t v a l empty_vis : t v a l add_vis : i d e n t i d e n t t t ( r a i s e S c o p e E r r o r i f not found ) v a l f i n d _ v i s : i d e n t t i n t S. Melo de Sousa (DIUBI) A. Semântica 18 / 49

19 Implementação Gerar novos nomes: l e t new_name = l e t i = r e f 0 i n fun x i n c r i ; x^"_"^( s t r i n g _ o f _ i n t! i ) Criar uma tabela de dispersão global para a tabela de símbolos l e t tsymb = H a s h t b l. c r e a t e 97 l e t add_decl x a = l e t x = new_name x i n H a s h t b l. add tsymb x ( x, a ) ; x S. Melo de Sousa (DIUBI) A. Semântica 19 / 49

20 Implementação Estrutura de map funcional para o ambiente das variáveis visíveis: module I d e n t = s t r u c t type t = i d e n t l e t compare = compare end module V i s = Map. Make ( I d e n t ) type t = i d e n t V i s. t l e t ( empty_vis : t ) = V i s. empty l e t ( add_vis : i d e n t i d e n t t t ) = V i s. add l e t f i n d _ v i s ( x : i d e n t ) ( v i s : t ) = t r y V i s. f i n d x v i s with Not_found > r a i s e S c o p e E r r o r S. Melo de Sousa (DIUBI) A. Semântica 20 / 49

21 Função de análise de expressões l e t r e c scope_expr v i s = f u n c t i o n Var x Var ( f i n d _ v i s x v i s ) I n as x x F r as x x Op ( o, e1, e2 ) Op ( o, scope_expr v i s e1, scope_expr v i s e2 ) UOp ( o, e1 ) UOp ( o, scope_expr v i s e1 ) L e t i n ( x, e1, e2 ) l e t e1 = scope_expr v i s e1 and x = add_decl x LOC i n l e t v i s = add_vis x x v i s i n L e t i n ( x, e1, scope_expr v i s e2 ) App ( f, l e ) l e t f = f i n d _ v i s f v i s i n l e t l e = L i s t. map ( scope_expr v i s ) l e i n App ( f, l e ) S. Melo de Sousa (DIUBI) A. Semântica 21 / 49

22 Função de análise de programas l e t r e c scope_prog v i s = f u n c t i o n [ ] [ ] P r i n t ( e ) : : prog P r i n t ( scope_expr v i s e ) : : scope_prog v i s prog Set ( x, e ) : : prog l e t x = add_decl x GLOB i n l e t v i s = add_vis x x v i s i n Set ( x, scope_expr v i s e ) : : scope_prog v i s prog Fun ( f, l v, e ) : : prog l e t v i s e, l v = L i s t. f o l d _ r i g h t ( fun x ( v, l ) l e t x = add_decl x Par i n l e t v = add_vis x x v i n ( v, x : : l ) ) l v ( v i s, [ ] ) i n l e t f = add_decl f FUNC i n l e t v i s = add_vis f f v i s i n Fun ( f, l v, scope_expr v i s e e ) : : scope_prog v i s prog S. Melo de Sousa (DIUBI) A. Semântica 22 / 49

23 Algumas notas A tabela dos símbolos é global. Engloba todas as declarações do programa e será utilizada nas fases seguintes da compilação O ambiente das variáveis visíveis é uma estrutura temporária que varia consoante o ponto do programa analisado. A implementação funcional (persistente) do ambiente permite uma gestão facilitada da junção e remoção de elementos. Na realidade, quando bem utilizada, nunca é preciso remover elementos do ambiente. Basta utilizar o ambiente prévio à junção dos elementos por remover. S. Melo de Sousa (DIUBI) A. Semântica 23 / 49

24 Algumas notas Por exemplo: l e t rec v e r i f i c a env = function (... ) L e t i n ( v, e1, e2 ) l e t new_e1 = v e r i f i c a env e1 in l e t new_e2 = v e r i f i c a ( ( v, ( e x t r a c t _ t y p e new_e1 ) ) : : env ) e2 in L e t i n ( v, new_e1, new_e2 ) (... ) Temos neste exemplo dois ambientes: env e (v, (extract_typenew_e1)) :: env quando a associação (v, (extract_typenew_e1)) não for mais precisa, basta re-utilizar env S. Melo de Sousa (DIUBI) A. Semântica 24 / 49

25 Algumas variantes Podemos optar por definir construtores diferentes GVAR, LVAR, PVAR para discriminar variáveis locais, globais e os parâmetros. Podemos introduzir tabelas diferentes em função da natureza das declarações (variáveis, funções, tipos,...) se a implementação permite facilmente escolher a tabela certa por utilizar. A analise de porte pode também ser realizada em mesmo tempo que a analise da tipagem (por exemplo, por enquanto, verificar que o número de argumentos na chamada de uma função corresponde à declaração). É o caso da fase de analise semântica implementada na linguagem artih. S. Melo de Sousa (DIUBI) A. Semântica 25 / 49

26 analise de porte e de tipo l e t rec typecheck_expr env = f u n c t i o n F ( x ) F x I i I i Var ( v, t ) ( t r y Var ( v, a s s o c v env ) with Not_found t r y Var ( v, H a s h t b l. f i n d t c g e n v v ) with _ r a i s e ( VarUndef v ) ) Op ( op, e1, e2, t ) l e t new_e1 = typecheck_ expr env e1 i n l e t new_e2 = typecheck_ expr env e2 i n l e t ( t1, t2 )=( e x t r a c t _ t y p e new_e1, e x t r a c t _ t new_e2 ) i n i f ( t1=t2 ) then Op ( op, new_e1, new_e2, t1 ) e l s e r a i s e ( T ypeerror (... ) " ) UOp ( op, e, t ) l e t new_e = typecheck_ expr env e i n UOp ( op, new_e, ( e x t r a c t _ t new_e ) ) L e t i n ( v, e1, e2, t ) l e t n_e1 = typecheck_ expr env e1 i n l e t n_e2 = typecheck_expr ( ( v, ( e x t r a c t _ t n_e1 ) ) : : env ) e2 i n L e t i n ( v, n_e1, n_e2, ( e x t r a c t _ t n_e2 ) ) S. Melo de Sousa (DIUBI) A. Semântica 26 / 49

27 Algumas variantes (continuação) Nos contextos de analise até agora encontrados as analises de porte podem ser realizadas de forma independente das analises de tipos. Esta situação nem sempre acontece. Por exemplo, quando a linguagem de programação autoriza sobrecarga de operadores, as informações oriundas da analise de tipos são importantes para poder realizar a analise de porte. S. Melo de Sousa (DIUBI) A. Semântica 27 / 49

28 Plano 1 Introdução 2 Tabelas de símbolos e analise de porte 3 Analise de Tipos Princípios Regras de tipagem Verificação de tipos S. Melo de Sousa (DIUBI) A. Semântica 28 / 49

29 A tipagem Dividir o espaço dos valores em colecções: um tipo de dados é uma colecção de valores que partilham uma (mesma) característica. Por exemplo, o tipo int representa os inteiros codificados em 32 ou 64 bits, o tipo float representa os números de virgula flutuante (norma IEEE-754), o tipo string agrupa os valores que são cadeias de caracteres (entre aspas). ou ainda: secret vs. public, volatile vs. persitent etc... Dependendo da linguagem em causa, a política dos tipos é fortemente ou não, verificada no momento dea execução (tipagem dita dinâmica) no momento da compilação (tipagem estática) S. Melo de Sousa (DIUBI) A. Semântica 29 / 49

30 Tipagem estática: interesse detecção precoce dos erros; documentação, estruturação (primeira informação sobre o programa); eliminação de certos erros que iriam comprometer a execução; (em consequência) maior segurança; uma forma geral de descrever analises de programas (e.g. analise de excepções, efeitos colaterais, segurança do código, etc.) S. Melo de Sousa (DIUBI) A. Semântica 30 / 49

31 Tipagem estática vs. dinâmica A tipagem dinâmica é mais precisa ( if B then 1 else 2 + "a") com B = true mas os erros de tipos dependem dos valores de execuções particulares as linguagens com tipagem estática podem ser compiladas mais eficazmente (e.g. removem a necessidade do teste de representação durante a execução), facilita a optimização (registos, acessos, representação, etc.) é por exemplo possível utilizar a mesma representação para dois valores de tipos diferentes sem riscos de confusão na execução, e.g.: representar true e false por inteiros; em ocaml, representar os constructores de valores de tipos indutivos por inteiros consecutivos. S. Melo de Sousa (DIUBI) A. Semântica 31 / 49

32 Propriedades esperadas da tipagem A tipagem estática deve ser conservativa: Se um programa é bem tipado estaticamente então não são esperados erros de tipos (de representação...) durante a execução Well types programs cannot go wrong (R. Milner, 1978) Mais precisamente: θ : τ Contra exemplo (em C...): o programa θ termina normalmente θ v [τ] union t e s t { i n t campo1 ; f l o a t campo2 ; } ; main ( ) { union t e s t s ; s. campo2 = 3. 8 ; p r i n t f ( "%d\n", s. campo1 ) ; } } A confusão entre inteiro e endereço provoca falhas de segmentação na execução. S. Melo de Sousa (DIUBI) A. Semântica 32 / 49

33 Algumas notas Nas linguagens tipadas modernas, o desafio é encontrar sistemas de tipos os mais ricos possíveis; Linguagens como o Java associam tipagem estático com tipagem dinâmica (a tipagem dinâmica é parte constituinte do valor do objecto) Nesta aula Vamos estudar os princípios da tipagem estática Como formular as regras que definem a tipagem? Princípios dos algoritmos subjacentes S. Melo de Sousa (DIUBI) A. Semântica 33 / 49

34 Vocabulário O que é um tipo? Tipificar uma expressão: um tipo é uma expressão de uma linguagem de tipos declarar um tipo = introduzir um nome de tipo Exemplo: declaração de struct ou de enum Definir um tipo = associar um nome a uma expressão de tipo Exemplo: utilização de typedef Tipificar = associar um tipo a uma expressão Tipagem forte = qualquer expressão tem um tipo principal S. Melo de Sousa (DIUBI) A. Semântica 34 / 49

35 Verificação vs. Inferência Verificação dos tipos O programa associa um tipo a cada declaração de identificador e o compilador verifica se a utilização dos identificadores é conforme (e.g. C, C++, Pascal, Ada, etc.) i n t add ( i n t x1, i n t x2 ) { i n t temp ; temp = x1 + x2 ; r e t u r n temp ; } Sínteses de tipos Os tipos são adivinhados (mais formalmente: inferidos ou sintetizados) pelo compilador por uma analise dita por restrição das utilizações de variáveis (e.g. Caml, SML, Haskell, etc.) l e t add x1 x2 = l e t temp = x1 + x2 i n temp v a l add : i n t i n t i n t = <fun> S. Melo de Sousa (DIUBI) A. Semântica 35 / 49

36 Regras de inferência A verificação dos tipos faz-se com base em regras de tipagem. O programa P está devidamente tipado e tem por tipo ty = P : ty Verificação de tipos: verificar quer ty é um tipo válido para P Síntese de tipos: encontrar um ty válido tal que esta seja o tipo de P Tipificar uma expressão: percorrer a expressão associando um tipo a cada sub-expressão desta. S. Melo de Sousa (DIUBI) A. Semântica 36 / 49

37 Regras de tipagem Axiomas: P : ty ou ainda P : ty Representam factos triviais sobre tipagem (por exemplo, qualquer valor inteiro tem por tipo int) Regras de inferência: P 1 : ty 1... P n : ty n C(P 1,..., P n) : ty Representam a seguinte política de tipos: Se se verifica que P 1 tem por tipo ty 1,..., se verifica que P n tem por tipo ty n então a construção C(P 1,..., P n) tem por tipo ty. Outra leitura possível: Para garantir que a construção C(P 1,..., P n) tenha por tipo ty, basta verificar que P 1 tenha por tipo ty 1,..., que P n tenha por tipo ty n. tipar (ou tipificar): construir uma árvore em que as folhas são axiomas e os nodos, as regras de inferência. um programa P C(P 1,..., P n) é bem tipado quando se consegue construir uma árvore desta forma.. P 1 : ty 1... P n : ty n C(P 1,..., P n) : ty S. Melo de Sousa (DIUBI) A. Semântica 37 / 49

38 Algumas regras Axiomas: I i : int true : bool false : bool F r : float Uma regra de inferência: e 1 : int e 2 : int op {Plus, Minus, Mult, Div} Op(op, e 1, e 2 ) : int S. Melo de Sousa (DIUBI) A. Semântica 38 / 49

39 Alguns exemplos tipagem de 2 + ( 4 * 5) 4 : int 5 : int 2 : int 4 5 : int (4 5) : int 2 * 4 5 tipagem de 2 + ( true * 5) true : bool 5 : int 2 : int true 5 : int (true 5) :? 2 * true 5 S. Melo de Sousa (DIUBI) A. Semântica 39 / 49

40 Identificadores O que fazer na presença de identificadores? i n t x = 1 ; i n t y ; y = 2 + (4 x ) ; Para poder tipar uma expressão temos de nos lembrar individualmente do tipo das variáveis visíveis na expressão. Precisamos de introduzir um ambiente de tipagem, que designaremos por env. Na sua essência, este é muito semelhante ao ambiente das variáveis visíveis utilizada na analise de porte. Contém associações (identificador, tipo) No presente exemplo: env =< (y, int); (x : int) > S. Melo de Sousa (DIUBI) A. Semântica 40 / 49

41 Notações Notação: Env P : ty Ambiente de tipagem: No ambiente Env, o programa P tem por tipo ty Um conjunto de associações < (x 1 : ty 1 ),..., (x n, ty n ) > Uma função de acesso access tal que access(x, < (x 1 : ty 1 ),..., (x n, ty n ) >) { ty1 se x = x = 1 access(x, < (x 2 : ty 2 ),..., (x n, ty n ) >) senão A analise de porte terá previamente assegurada a unicidade dos identificadores S. Melo de Sousa (DIUBI) A. Semântica 41 / 49

42 Linguagem dos tipos Tipos de base: int, float, char, string,... Tipos estruturados: construtor de tipos (operação sobre tipos) e.g. int [] type typ = Tbool Tint T f l o a t Tchar T s t r i n g... Tarr o f typ... Poderíamos também ter: Abreviação de tipos (tipos sinónimos) Tdef of ident typ, tipos definidos pelo utilizador, classes, etc... gestão da igualdade de tipos, de tabelas de simbolos de tipos. S. Melo de Sousa (DIUBI) A. Semântica 42 / 49

43 A linguagem type c t e = I n t o f i n t F l o a t o f f l o a t Bool o f b o o l... type primop = Sum D i f f Prod Quot... type oper = Prim o f primop User o f i d e n t type e x p r = Cst o f c t e Var o f i d e n t Op o f oper e x p r l i s t L e t i n o f i d e n t e x p r e x p r type i n s t r = Set o f i d e n t e x p r P r i n t o f e x p r Fun o f i d e n t ( i d e n t typ ) l i s t e x p r type prg = i n s t r l i s t S. Melo de Sousa (DIUBI) A. Semântica 43 / 49

44 Assinatura Associamos a cada função uma assinatura que especifica: o número de argumentos esperados o tipo de cada argumento o tipo de retorno Existem vários tipos de operadores: Operadores primitivos (e.g. aritméticos): assinatura fixa. Operadores genéricos (acesso a vectores): a assinatura dependerá dos tipos dos argumentos Operadores definidos pelo utilizador: a assinatura é dada pelo programa. Uma assinatura pode ser dada pelo tipo Ocaml seguinte: type s i g n = typ l i s t typ S. Melo de Sousa (DIUBI) A. Semântica 44 / 49

45 Algoritmo de tipagem - Requisitos Cada expressão tem um tipo único que pode ser inferido. Uma tabela associa a cada declaração o seu tipo. v a l add_typ : i d e n t typ u n i t v a l f i n d _ t y p : i d e n t typ De forma semelhante, para as assinaturas dos operadores: v a l add_sign : i d e n t s i g n u n i t v a l f i n d _ s i g n : i d e n t s i g n S. Melo de Sousa (DIUBI) A. Semântica 45 / 49

46 Algoritmo de tipagem l e t r e c type_expr = f u n c t i o n Cte c type_cte c Var x f i n d _ t y p x Op( op, l e ) l e t ( l t, t ) = f i n d _ s i g n op i n c h e c k _ l e x p r l t l e ; t L e t I n ( x, e1, e2 ) l e t t1 = type_expr e1 i n add_typ x t 1 ; type_ expr e2 and c h e c k _ l e x p r = f u n c t i o n [ ], [ ] ( ) t : : l t, e : : l e i f eqt ( type_expr e ) t then c h e c k _ l e x p r l t l e e l s e r a i s e TypeError _,_ r a i s e TypeError S. Melo de Sousa (DIUBI) A. Semântica 46 / 49

47 Algoritmo de tipagem l e t r e c type_prog = f u n c t i o n [ ] ( ) Set ( x, e ) : : p l e t t = type_expr e i n add_typ x t ; type_ prog p P r i n t e : : p l e t _ = type_expr e i n type_prog p Fun ( f, l v, e ) : : p l e t l t = L i s t. map ( fun ( x, t ) add_typ x t ; t ) l v i n l e t t = type_expr e i n add_sign f ( l t, t ) ; type_prog p S. Melo de Sousa (DIUBI) A. Semântica 47 / 49

48 Operadores genéricos Certos operadores parecem não ter uma assinatura única. a condicional if b then e1 else e2 tem por tipo τ se b : bool e e1, e2 : τ. acesso a vectores, t[n] : τ se t tem por tipo τ array e n : int. Associa-se a estes operadores construtores explícitos na sintaxe abstracta I f ( b, e_1, e_2 ) l e t tb = type_ expr b and t 1 = type_ expr e1 and t 2 = type_ expr e2 i n i f eqt tb Tbool && eqt t1 t2 then t1 e l s e r a i s e TypeError Gop ( op, l e ) l e t l t = L i s t. map type_expr l e i n find_ and_ check_ sign op l t A tipagem polimórfica "à la" ocaml permite tratar este caso de forma uniforme. S. Melo de Sousa (DIUBI) A. Semântica 48 / 49

49 Notas Quando o sistema de tipo subjacente é complexo, é necessário comparar tipos, seguindo regras que dependem da linguagem. Neste caso, é cómodo dispor de uma função de comparação eqt especificamente desenhada para tal (ao contrário da igualdade estrutural como compare ou =) O algoritmo apresentado assume que a analise de porte for previamente realizada. No caso contrário, é preciso introduzir o ambiente ρ das variáveis visíveis como parâmetro da função de analise de tipos. Não existem anotações de tipo nas instruções set porque as variáveis são necessariamente inicializadas, logo o tipo é facilmente calculado com base no tipo da expressão de inicialização. Se as funções são recursivas, então é necessário também fornecer o tipo de retorno esperado. Ver ficha prática "arith" (e solução) para uma abordagem completa e alternativa. S. Melo de Sousa (DIUBI) A. Semântica 49 / 49

Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores

Compiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores Compiladores Verificação e inferência dos Tipos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Problema Permitir evitar declarar o tipo das variáveis, das assinaturas

Leia mais

Compiladores Ficha de exercícios práticos

Compiladores Ficha de exercícios práticos Compiladores Ficha de exercícios práticos Simão Melo de Sousa Ano lectivo 2004/2005 O objectivo desta ficha é a implementação dos pequenos programas ou funções sugeridos pelo enunciado dos exercícios seguintes.

Leia mais

Interpretação e Compilação de Linguagens de Programação Sistemas de tipos

Interpretação e Compilação de Linguagens de Programação Sistemas de tipos Interpretação e Compilação de Linguagens de Programação Sistemas de tipos 26 de Abril de 2013 1 Introdução A função de interpretação de uma linguagem de programação é normalmente uma função parcial, o

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Tiago Alves de Oliveira Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável

Leia mais

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal

Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal Árvores de Sintaxe Abstracta Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Plano 1 Accções semânticas em Gramáticas Livres de Contexto Valores Semânticos em Gramáticas

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Aula 6 Nomes, Vinculações, Verificação de Tipos e Escopos Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Introdução As linguagens de

Leia mais

Análise Semântica e Representação Intermédia

Análise Semântica e Representação Intermédia Análise Semântica e Representação Intermédia Compiladores, Aula Nº 22 João M. P. Cardoso 1 Representação do fluxo de controlo Nós de enunciados Nó if Árvore de expressão para a condição Nó para o corpo

Leia mais

Trabalho de Desenho de Linguagens de Programação e de Compiladores. Mini Pascal

Trabalho de Desenho de Linguagens de Programação e de Compiladores. Mini Pascal Trabalho de Desenho de Linguagens de Programação e de Compiladores Mini Pascal (cod. 11482) Departamento de Informática Universidade da Beira Interior Ano lectivo 2015/2016 1 Introdução Este trabalho é

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

Leia mais

Análise Semântica: Verificação de Tipos

Análise Semântica: Verificação de Tipos Análise Semântica: Verificação de Tipos Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores

Leia mais

Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos

Paradigmas de Linguagens de Programação. Nomes, Vinculações, Verificação de Tipos e Escopos Nomes, Vinculações, Verificação de Tipos e Escopos Cristiano Lehrer Nomes (1/6) Um nome é uma string de caracteres usada para identificar alguma entidade de um programa. O termo identificador é utilizado

Leia mais

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis

FACULDADE BATISTA MINEIRA - CST Banco de Dados Estruturas de Dados - Variáveis Variável, na Matemática, é um termo utilizado em substituição de outro, normalmente, desconhecido. É utilizado para representar um número ou um conjunto. No contexto da programação de computadores, uma

Leia mais

Análise Semântica e Representação Intermédia

Análise Semântica e Representação Intermédia Análise Semântica e Representação Intermédia Compiladores Cristina C. Vieira 1 Representação do fluxo de controlo Nós de enunciados Nó if Árvore de expressão para a condição Nó para o corpo do then e nó

Leia mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador

Leia mais

Compiladores Análise de Tipos

Compiladores Análise de Tipos Compiladores Análise de Tipos Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem

Leia mais

Compiladores Análise de Tipos

Compiladores Análise de Tipos Compiladores Análise de Tipos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem

Leia mais

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Aula Prática 2. Paradigmas da Programação I / Programação Funcional Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;

Leia mais

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008 Compiladores Análise Semântica Fabiano Baldo Análise Semântica é por vezes referenciada como análise sensível ao contexto porque lida com algumas semânticas simples tais como o uso de uma variável somente

Leia mais

Trabalho de Linguagens Formais e Compilação

Trabalho de Linguagens Formais e Compilação Trabalho de Linguagens Formais e Compilação Desenho de uma linguagem simples e do seu compilador para MIPS. (cod. 5387) Departamento de Informática Universidade da Beira Interior Ano lectivo 2012/2013

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Implementação de Linguagens

Implementação de Linguagens Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 11 de Abril de 2016 Objectivos Introdução à implementação de linguagens de programação funcionais. Enfoce sobre técnicas de interpretação/compilação

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com

Leia mais

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais. Apresentação Universidade dos Açores Departamento de Matemática www.uac.pt/~hguerra/!! Aquisição de conceitos sobre a definição de linguagens de programação.!! Familiarização com os métodos de construção

Leia mais

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:

Programas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo: 1 Semântica Operacional e Sistemas de Tipos Vamos definir a semântica operacional de uma série de linguagens no estilo conhecido por semântica operacional estrutural chamado também de semântica operacional

Leia mais

Linguagens de Programação

Linguagens de Programação Conceitos e Técnicas Prof. Isabel Cafezeiro isabel@dcc.ic.uff.br Expressão: Uma expressão é uma frase do programa que, ao ser avaliada, produz como resultado um valor. 1 aa 1+4 f(1,g(x)) Elementos da expressão:

Leia mais

Compiladores Análise de Tipos

Compiladores Análise de Tipos Compiladores Análise de Tipos Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef Prof. Renato Pimentel 1 Introdução Tipos de variáveis vistos

Leia mais

Nomes, Amarração, Verificação de Tipos, e Escopo

Nomes, Amarração, Verificação de Tipos, e Escopo 5 Nomes, Amarração, Verificação de Tipos, e Escopo Concepts of Programming Languages, 5/e Robert W. Sebesta Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave

Leia mais

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz Sumário de Aula } Conceito de Memória } Variáveis e Tipos de Dados } Constantes 2 Conceito de Memória } A memória de um computador é

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

A máquina SECD. Pedro Vasconcelos. 20 de Fevereiro de 2014

A máquina SECD. Pedro Vasconcelos. 20 de Fevereiro de 2014 A máquina SECD Pedro Vasconcelos 20 de Fevereiro de 2014 O que é a máquina SECD? Um interpretador da linguagem funcional ISWIM (Landin, 1964) Máquina virtual para compilação LISP/Scheme (Henderson, 1980)

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Expressões e Variáveis Bruno Lopes Bruno Lopes Linguagens de Programação 1 / 34 Propriedades desejáveis Legibilidade: A leitura do programa é facilmente compreendida? Redigibilidade:

Leia mais

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 11 Estruturas (Structs) Structs

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 11 Estruturas (Structs) Structs Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação Cap. 11 Estruturas (Structs) Structs Sumário: Revisitação à taxonomia de tipos de dados Características gerais de tipos

Leia mais

Espaço de Tipos. Amarração Tipo. Amarração Valor. Amarração Localização. Amarração Nome. Objeto de Dado

Espaço de Tipos. Amarração Tipo. Amarração Valor. Amarração Localização. Amarração Nome. Objeto de Dado 1.5.3.1. Objetos de Dados Como já comentado, cada variável possui uma área de armazenamento amarrada a si durante a execução do programa, e o seu o tempo de vida é o período de tempo no qual a amarração

Leia mais

Compiladores Análise de Tipos

Compiladores Análise de Tipos Compiladores Análise de Tipos Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem

Leia mais

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem

Leia mais

Algoritmos II prof. Daniel Oliveira

Algoritmos II prof. Daniel Oliveira Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional

Leia mais

Programação Funcional 14 a Aula Classes de tipos revisitadas

Programação Funcional 14 a Aula Classes de tipos revisitadas Programação Funcional 14 a Aula Classes de tipos revisitadas Sandra Alves DCC/FCUP 2017/18 Classes de tipos As classes de tipos agrupam tipos de valores que suportam operações comuns. Eq igualdade (==,

Leia mais

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Linguagens de Programação Departamento de Computação Universidade Federal de Sergipe Tipos permitem que dados sejam descritos de forma efetiva Previnem operações sem sentido (ex: 5 * true) Programas mais

Leia mais

Linguagens de Programação Aula 3

Linguagens de Programação Aula 3 Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...

Leia mais

Tipo. Tipo de uma variável: especificação de

Tipo. Tipo de uma variável: especificação de Checagem de Tipos O que é tipo? Erros de Tipos em FRANKIE não capturados pela gramática Tarefas de um Type Checker e Conversões de Tipos Sistema de Tipos Checagem Estática X Dinâmica Linguagens Fortemente

Leia mais

Sistemas de Tipos. Cristiano Damiani Vasconcellos.

Sistemas de Tipos. Cristiano Damiani Vasconcellos. 1 / 24 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 24 Tipos: Coleção de valores

Leia mais

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Paradigmas de Linguagem de Programação. Paradigma Imperativo Paradigmas de Linguagem de Programação Paradigma Imperativo Paradigma Imperativo Imperare Comandar É o mais antigo de todos; Baseado no modo de funcionamento do computador; São também chamadas de procedurais;

Leia mais

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória

Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação. Cap. 8 Endereçamento de Memória Endereçamento de Memória Programação 11543: Engenharia Informática 6619: Tecnologias e Sistemas de Informação Cap. 8 Endereçamento de Memória Endereçamento de Memória Sumário: O que nós já sabemos sobre endereçadores (ou apontadores

Leia mais

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por

Leia mais

Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente

Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente Interpretação e Compilação de Linguagens de Programação Semântica CALCI com Ambiente 14 de Março de 2013 Nesta aula apresenta-se uma definição mais eficiente da semântica operacional da linguagem CALCI.

Leia mais

ao paradigma imperativo

ao paradigma imperativo PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

SEBENTA INTRODUÇÃO Á ALGORITMIA

SEBENTA INTRODUÇÃO Á ALGORITMIA SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Projeto de Linguagem. Linguagens de Programação

Projeto de Linguagem. Linguagens de Programação Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem

Leia mais

Linguagens de Programação. Marco A L Barbosa

Linguagens de Programação. Marco A L Barbosa Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação Cap. 7 Sumário: Classificação de tipos de dados Características gerais de tipos de dados compostos Definição de array (ou tabela)

Leia mais

Verificação de Tipo. Unions. Verificação de tipo estática. Verificação de tipo dinâmica

Verificação de Tipo. Unions. Verificação de tipo estática. Verificação de tipo dinâmica Verificação de Tipo Atividade que certifica que os operandos de um operador são de tipos compatíveis. São considerados operadores e operandos: operadores usuais (aritméticos, relacionais, etc) subprogramas

Leia mais

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória. Ponteiros e Arrays Ponteiros são fundamentais para a programação bem sucedida em C: Passagem de parâmetros por referência; Alocação dinâmica de memória; Aumentar a eficiência de certar rotinas. Essencialmente,

Leia mais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Análise Semântica e Tratamento de Erros Dependentes de Contexto

Análise Semântica e Tratamento de Erros Dependentes de Contexto Análise Semântica e Tratamento de Erros Dependentes de Contexto O componente Semântico de uma LP Tarefas da Análise Semântica Implementação da Tabelas de Símbolos Ações Semânticas em Compiladores Dirigidos

Leia mais

Lista de Linguagens de Programação 7

Lista de Linguagens de Programação 7 Lista de Linguagens de Programação 7 Nome: Matrícula: 1. Dizemos que uma linguagem é segura quando esta linguagem não permite que operações sejam aplicadas a argumentos que não possuam os tipos previstos

Leia mais

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string Pascal -Cabeçalho do programa Áreas do programa -Área de declarações -Corpo do programa - label - const - type - var - procedure - function - integer - real - byte - boolean - char - string Program

Leia mais

Revisão. Profa Marina Gomes

Revisão. Profa Marina Gomes Revisão Profa Marina Gomes Algoritmos Na construção de um programa, o problema que o algoritmo representa é composto por três fases. Entrada: dados de entrada do algoritmo. Processamento: ações sobre os

Leia mais

Folha 4.2 Análise sintática ascendente

Folha 4.2 Análise sintática ascendente Folha 4.2 Análise sintática ascendente 1. Considere a gramática G = (S, T, P, S) que representa o cabeçalho de métodos na linguagem Java (sem os modificadores de acesso), onde T = {S, Type, Param, Exception,

Leia mais

Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti

Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti Expressões e Instruções de Atribuição George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução Expressões Aritméticas Operadores Sobrecarregados Conversões de Tipo Expressões Relacionais

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2012 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:

Leia mais

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018 Algoritmos e Modelação Computacional Paulo Mateus MEBiom LMAC 2018 Objetivos Edição e compilação de programas Tipos e expressões Declaração de variáveis Atribuição, composição sequencial, iterativa e alternativa

Leia mais

Semântica de Linguagens de Programação

Semântica de Linguagens de Programação Semântica de Linguagens de Programação Fabio Mascarenhas - 2011.2 http://www.dcc.ufrj.br/~fabiom/sem Introdução Quais das expressões abaixo têm o mesmo significado? a[42] (vector-ref a 42) a[42] a[42]

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Revisões de PG (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Compilar e executar programas em Java Ficheiro fonte (Prog.java) Ficheiro

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

Linguagem de Programação III

Linguagem de Programação III Linguagem de Programação III Aula-4 Construtores e Sobrecarga Prof. Esbel Tomás Valero Orellana Até Aqui Modelos e POO Classes e sua implementação em Java Encapsulamento Tipos de dados nativos em Java

Leia mais

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013 Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação

Leia mais

Lição 4 Fundamentos da programação

Lição 4 Fundamentos da programação Lição 4 Fundamentos da programação Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Identificar as partes básicas de um programa em Java Reconhecer as diferenças

Leia mais

Conceitos básicos de programação

Conceitos básicos de programação Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

O que é uma variável?

O que é uma variável? Escopo, Ligação e Ambiente de Execução mleal@inf.puc-rio.br 1 O que é uma variável? Uma variável pode ser definida como uma tupla r nome é um string usado para

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Complexidade dos sistemas de software Estrutura Decomposição Abstração Hierarquia Projeto de sistemas complexos

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues SEL0433 Aplicação de Microprocessadores I Revisão da Linguagem C Prof. Evandro L. L. Rodrigues Estrutura de um programa C Diretivas de pré processamento Declaração de variáveis globais Declaração de protótipos

Leia mais

Erros de Tipo em Pascal Simplifificado

Erros de Tipo em Pascal Simplifificado Checagem de Tipos Erros de Tipos em Pascal Simplificado não capturados pela gramática Tarefas de um Type Checker e Conversões de Tipos Sistema de Tipos Checagem Estática X Dinâmica Linguagens Fortemente

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Padrão Visitor A outra técnica para implementar um percurso consiste em usar o padrão

Leia mais

Trabalhos de Laboratório de Interpretação e Compilação de Linguagens de Programação

Trabalhos de Laboratório de Interpretação e Compilação de Linguagens de Programação Trabalhos de Laboratório de Interpretação e Compilação de Linguagens de Programação 11 de Maio de 2013 Os trabalhos práticos da disciplina de Interpretação e Compilação de Linguagens, incluindo o trabalho

Leia mais

Paradigmas de Linguagens

Paradigmas de Linguagens Paradigmas de Linguagens Aula 2: Tipos de dados Professora Sheila Cáceres Tipos de dados Dados são a matéria prima da computação junto com os programas. LPs precisam manipular dados. LPS utilizam os conceitos

Leia mais

Métodos de Programação I Ana Maria de Almeida

Métodos de Programação I Ana Maria de Almeida Métodos de Programação I 2. 35 2.10 O TIPO ESTRUTURADO TABELA (ARRAY) A estruturação de informação introduz uma nova dimensão no poder e complexidade dos nossos programas que, ao mesmo tempo que amplia

Leia mais

Linguagens de Programação Funcional

Linguagens de Programação Funcional Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A

Leia mais

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI Algoritmos e Lógica de Programação Linguagem C Reinaldo Gomes reinaldo@cefet-al.br Definição: Éadefiniçãodeumnomeparaumagrupamento de variáveis, podendo ser de tipos diferentes. informações de tipos diferentes

Leia mais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

#include <stdio.h> Void main() { printf( Cheguei!\n); } INTRODUÇÃO A LINGUAGEM C #include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que

Leia mais

Compiladores. Análise Semântica

Compiladores. Análise Semântica Compiladores Análise Semântica Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Análise léxica Análise semântica Síntese Análise sintática Análise Gramáticas Estruturas internas Arquivo

Leia mais

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves Linguagens de Programação Programação Funcional e Haskell Declarando Tipos Thiago Alves 1 Declarações de Tipos Em Haskell, um novo nome para um tipo existente pode ser definido usando uma declaração de

Leia mais

Linguagem C (continuação)

Linguagem C (continuação) Linguagem C (continuação) Funções, arrays e ponteiros Slides adaptados, inspirados, muitos copiados dos slides do professor Pedro Pereira Centro de Cálculo Instituto Superior de Engenharia de Lisboa João

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse

Leia mais

Análise de Programação

Análise de Programação Análise de Programação Fundamentos da Linguagem de Programação Java Prof. Gilberto B. Oliveira Variáveis Atributos: Variáveis Declaradas fora de um método, sem o modificador static Variáveis membro ou

Leia mais

RESUMO DA DISCUSSÃO SOBRE LINGUAGENS DE PROGRAMAÇÃO DO DIA 26 DE OUTUBRO DE 2006

RESUMO DA DISCUSSÃO SOBRE LINGUAGENS DE PROGRAMAÇÃO DO DIA 26 DE OUTUBRO DE 2006 Universidade Federal do Rio Grande do Sul Instituto de Informática Bacharelado em Ciência da Computação Disciplina de Modelos de Linguagens de Programação Profa. Dra. Érika Cota RESUMO DA DISCUSSÃO SOBRE

Leia mais

Primeira Prova de Linguagens de Programação - DCC024W - Sistemas de Informação

Primeira Prova de Linguagens de Programação - DCC024W - Sistemas de Informação Primeira Prova de Linguagens de Programação - DCC024W - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem

Leia mais

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end. SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão

Leia mais