Analise Semântica. Simão Melo de Sousa
|
|
- Lorenzo Sales
- 5 Há anos
- Visualizações:
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 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 maisCompiladores 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 maisInterpretaçã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 maisLinguagens 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 maisLinguagens 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 maisSimã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 maisParadigmas 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 maisAná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 maisTrabalho 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 maisCAP. 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 maisParadigmas 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 maisAná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 maisParadigmas 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 maisFACULDADE 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 maisAná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 maisUniversidade 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 maisCompiladores 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 maisCompiladores 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 maisAula 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 maisIntroduçã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 maisTrabalho 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 maisCapí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 maisImplementaçã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 maisEstruturas 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 maisPROGRAMAÇÃ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 maisApresentaçã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 maisProgramas 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 maisLinguagens 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 maisCompiladores 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 maisAlgoritmos 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 maisUniversidade 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 maisNomes, 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 maisAula 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 mais3. 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 maisA 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 maisLinguagens 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 maisProgramaçã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 maisEspaç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 maisCompiladores 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 maisProgramaçã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 maisAlgoritmos 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 maisProgramaçã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 maisSistemas 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 maisLinguagens 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 maisTipo. 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 maisSistemas 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 maisParadigmas 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 maisProgramaçã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 maisSintaxe 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 maisInterpretaçã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 maisao 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 maisUniversidade 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 maisSEBENTA 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 maisExpressõ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 maisProjeto 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 maisLinguagens 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 maisProgramaçã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 maisVerificaçã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 maisEssencialmente, 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 maisPROGRAMAÇÃ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 maisAná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 maisLista 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 maisPascal. -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 maisRevisã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 maisFolha 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 maisExpressõ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 maisPedro 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 maisAlgoritmos 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 maisSemâ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 maisClasses 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 maisRevisõ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 maisTÉ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 maisLinguagem 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 maisLinguagem 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 maisLiçã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 maisConceitos 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 maisProgramaçã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 maisIntroduçã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 maisO 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 maisCarlos 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 maisLinguagem 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 maisUniversidade 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 maisRevisã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 maisErros 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 maisLinguagens 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 maisTrabalhos 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 maisParadigmas 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 maisMé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 maisLinguagens 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 maisEstruturas. 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 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 maisCompiladores. 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 maisLinguagens 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 maisLinguagem 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 maisArquitetura 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 maisProgramaçã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 maisAná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 maisRESUMO 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 maisPrimeira 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 maisSEMÂ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