Compiladores Construção de Interpretadores e Compiladores para a linguagem Arith

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

Download "Compiladores Construção de Interpretadores e Compiladores para a linguagem Arith"

Transcrição

1 Compiladores Construção de Interpretadores e Compiladores para a linguagem Arith Simão Melo de Sousa Departamento de Informática Universidade da Beira Interior Conteúdo 1 Introdução 2 2 A linguagem Arith 2 3 Análise léxica e sintáctica 3 4 Árvores de sintaxe abstracta 3 5 Análise Semântica Tabelas dos símbolos Vericação estática dos tipos Interpretação de programas Arith 11 7 Compilação de programas Arith Arquitectura da máquina virtual alvo Instruções máquinas relevantes Programa principal 12 9 Extensões 13 1

2 1 Introdução O objectivo desta cha prática é implementar: um pequeno interpretador um pequeno compilador para uma linguagem de expressões aritméticas chamada Arith. Contemplaremos igualmente a denição de algumas extensões ao referido compilador que, consoante a diculdade, poderão servir de base a pequenos trabalhos. 2 A linguagem Arith A linguagem Arith permite avaliar expressões aritméticas simples e dar um nome a certas expressões. Um programa em Arith é composto por uma sequência de instruções da forma: s e t i d e n t = e x p r ; p r i n t e x p r ; onde ident é um identicador e expr uma expressão aritmética podendo conter declarações de variáveis locais da forma: l e t i d e n t = e x p r i n e x p r A gramática. Mais formalmente a sintaxe das instruções Arith pode ser descrita pela gramática seguinte: <i n s t > : : = s e t <i d e n t > = <expr > ; p r i n t <expr > ; <expr > : : = < i n t e i r o > <r e a l > <i d e n t > <expr > <binop > <expr > <unop> <expr > l e t <i d e n t > = <expr > i n <expr > ( <expr > ) <binop > : : = + / <unop> : : = 2

3 Um programa Arith é assim uma sequência não vazia de instruções. Convenções léxicas. Espaços, tabulações e caracteres de nova linha constituem os caracteres "brancos". As palavras set, let, in e print formam o conjunto das palavras chave; <ident> é a classe dos identicadores que só podem ser constituídos por caracteres alfa-numéricos ou o '_' e começar por uma letra; a classe <inteiro> é a classe das sequências de algarismos; e nalmente a classe <real> é a classe dos números reais. De forma sintética podemos descrever estas duas classes numéricas pelas expressões regulares seguintes: digito ::= 0-9 inteiro ::= -?(digito)+ real ::= -?(digito)+(.(digito)*)?((e E)(+ -)?(digito)+)? Finalmente, os operadores aritméticos usufruem das prioridades e das regras de associatividade habituais. 3 Análise léxica e sintáctica Exercício 1: (Parsing and Lexing) Dena um analisador léxico e um analisador sintáctico para a linguagem Arith. Os analisadores construídos deverão ter em conta uma gestão apropriada dos erros que possam surgir (por enquanto léxicos e sintácticos). 4 Árvores de sintaxe abstracta Exercício 2: (Árvore de sintaxe abstracta) Dena os tipos instr, expr e prg sugeridos pela gramática da linguagem Arith. Implemente o tipo dos identicadores pelo tipo: t y p e i d e n t = s t r i n g 3

4 Estes tipos permitam uma representação estruturada e rigorosa dos programas da linguagem sob a forma de árvores de sintaxe abstracta. Exercício 3: (Lexing e Parsing (bis)) Modique os analisadores léxicos e sintácticos por forma a que seja construída uma árvore de sintaxe abstracta no caso de uma análise bem sucedida. O parser e o lexer construídos deverão, mais uma vez, assinalar de forma clara e precisa os erros. 5 Análise Semântica 5.1 Tabelas dos símbolos A politica de utilização de variáveis dos programas Arith é relativamente simples: devemos assinalar com um erro qualquer utilização de variável que não foi previamente denida. A redenição de um símbolo existente não deverá originar um erro. Mas, neste caso, a denição mais recente esconde a denição prévia. Este comportamento só terá importância quando implementarmos o interpretador e o compilador. Outro aspecto por considerar nos programas Arith é o seguinte: a execução de programas Arith necessita que seja guardada a informação dos valores das variáveis denidas ao longo do programa. Estes dois factos levam a que seja considerada a construção de duas tabelas de símbolos que representarão ambientes de execução. Um ambiente representa o estado da memória disponível para um determinado programa durante uma determinada execução. Teremos uma tabela de símbolos globais e uma tabela de símbolos locais. A diferença fundamental entre as duas tabelas de símbolos é o facto de que a tabela de símbolos locais arquiva variáveis temporárias (por serem locais) que deverão desaparecer no m da análise de cada instrução. I.e., no m de cada instrução, a tabela de símbolos locais é reinicializada. Outro aspecto a considerar é que os símbolos locais tem prioridade em relação aos símbolos globais. 4

5 Assim sendo, aquando da introdução (denição) dum símbolo deveremos guardar na tabela de símbolo adequada (local ou global) a informação de que a variável foi denida. Para termos uma gestão uniforme dos símbolos no interpretador e no compilador, arquivaremos também o tipo e o valor (quando possível) de cada símbolo. O compilador precisará do nome e do tipo de cada símbolo, enquanto o interpretador precisará adicionalmente do valor associado a cada símbolo. Considerando o tipo option do OCaml que é denido como: type ' a o p t i o n = None Some of ' a utilizaremos o tipo: type v a l o r t = NoI I n t e i r o of ( i n t o p t i o n ) R e a l of ( f l o a t o p t i o n ) onde NoI representa a ausência de informação (NoI = No Information), ( Inteiro x) representa um valor de tipo inteiro. Quando este valor é conhecido então x = (Somev) em que v é um inteiro. Se a única informação disponível é o tipo, então x = N one. De forma semelhante o elemento (Real y) representa um valor de tipo real. Como no caso inteiro, y guarda um valor real. Numa primeira abordagem às tabelas de símbolo, codicaremo-las como listas associativas (Consultar para esse efeito a secção Association Lists do manual de referência da linguagem OCaml,). Repare que poderíamos também ter utilizado o tipo denido no módulo Map (Documentação) De forma resumida, uma lista associativa é uma lista de pares de tipo (' a 'b) em que cada par representa a associação de um valor de 'a (a chave) com um valor de 'b (o valor). No caso de existir dois pares com a mesma chaves, só o primeiro par será considerado. A função de procura de valores em listas associativas é a função List. assoc cujo protótipo é: v a l a s s o c : ' a > ( ' a ' b ) l i s t > ' b (assoc a l ) devolve o valor associado a a na lista associativa l. Isto é, (assoc a [...;( a,b);...]) = b se (a,b) é o par (chave,valor) a mais a esquerda na lista l. A execução de (assoc a l ) levanta a excepção Not_found se não existir tal associação na lista. Utilizaremos assim os tipos: 5

6 type t s i m b o l o s = ( i d e n t v a l o r t ) l i s t type env = t s i m b o l o s r e f para codicar os ambientes (locais e globais). Relembramos que o tipo ident representa o tipo dos identicadores Para simplicar, designaremos por genv o ambiente global (de tipo env) e por lenv o ambiente local (igualmente de tipo tsimbolos). A diferença entre genv e lenv reside na natureza das variáveis locais, isto é no facto de que o ambiente das variáveis locais deve ser reinicializado convenientemente cada vez que a analise sai de um let x =... in... (cada vez que x "perde"vida). Neste sentido, é mais conveniente considerar a tabela local como um parâmetro suplementar às funções de análise e não como uma variável mutável (de tipo env). Exercício 4: (Implementação da tabela dos símbolos por uma lista associativa) Modique a construção da árvore de sintaxe abstracta de forma a que sejam construídas e utilizadas tabelas de símbolos. A modicação deverá contemplar os pontos seguintes: 1. A utilização duma variável não previamente denida deverá resultar num erro semântico devidamente assinalado. 2. O teste de existência de variáveis deverá considerar a procura na tabela de símbolos locais como prioritária. 3. A denição de uma variável local deverá resultar na actualização do ambiente local. 4. A denição de uma variável global deverá resultar na actualização do ambiente global. 5. Nesta fase da análise semântica, o valor por arquivar com uma variável identicada por x é (`` x '', NoI). 6. A análise semântica duma expressão ou instrução deverá ter em conta reinicializações adequadas do ambiente local. 6

7 No exercício anterior utilizamos ambientes de tipo ( ident valort ) list. No entanto, quando o número de variáveis é grande, o custo da operação de procura (numa lista) começa a ser importante. Habitualmente prefere-se à utilização das listas a utilização de estruturas de arquivo como as tabelas de hash. Com este tipo de estruturas a operação de procura é mais eciente. O objectivo do exercício seguinte é substituir o ambiente global genv por uma tabela de hash. Exercício 5: (Implementação da tabela dos símbolos por uma tabela de hash (Bis)) Modique a análise semântica do exercício anterior por forma a que utilize ambientes implementados com a ajuda de tabelas de hash do módulo Hashtbl da biblioteca standard do OCaml. 5.2 Vericação estática dos tipos Uma das mais importantes vericações realizadas pela análise semântica é a vericação estática dos tipos do programa alvo. Basicamente, trata-se de vericar se todas as execuções possíveis do programa contemplam exclusivamente operações com parâmetros adequados, e isso sem precisar de executar o programa em si. De facto esta fase da análise deves ser capaz de detectar, por exemplo, que uma operação sobre inteiros terá potencialmente parâmetros reais. A política de tipo por garantir na linguagem Arith é relativamente simples: em qualquer operação aritmética todos os valores envolvidos devem ser do mesmo tipo. Por exemplo, se uma expressão conter um real, todos os outros valores devem ser também reais. Vamos dar a seguir uma apresentação detalhada do algoritmo de vericação. Primeiro introduzimos algumas notações. Seja e uma construção da linguagem Arith (um programa, uma instrução ou uma expressão), t um tipo e Γ uma lista de pares (x : t x ) (onde x é um símbolo e t x um tipo) Γ e : t signica que no contexto Γ (que representa o conjunto das declarações feitas e aceites antes de analisar e), a expressão e tem por tipo t. A notação 7

8 Γ, (x : t x ) e : t designa o contexto Γ aumentado da declaração (x, t x ). Seja p inst 1 ;... ; inst n um programa (contendo n instruções) Γ inst 1 ;... ; inst n : signica que p é constituído exclusivamente de elementos (expressões etc,...) bem tipados. Informalmente, o algoritmo funciona da seguinte forma: são percorridos sequencialmente e recursivamente todas as construções do programa Arith analisado. O contexto inicial duma vericação de um programa é o contexto vazio. Este contexto vai evoluindo (em particular, aumentando) a medida que declarações de variáveis globais e locais são analisadas e aceites. Por exemplo, seja Γ o contexto utilizado para a análise do programa: s e t x = 5 ; s e t y = x+x ; Se a análise da primeira instruções for bem sucedida e se concluir por x é de tipo inteiro (i.e. Γ x : inteiro), então a instrução seguinte (set y = x+x;) terá como contexto Γ, (x : inteiro), i.e. o contexto Γ aumentado da informação de que x é inteiro. Uma situação semelhante deverá ser considerada com a declaração de variáveis locais mas com o cuidado adicional de que as variáveis locais podem desaparecer do contexto por serem locais. Em termos práticos, esta gestão do contexto é de tal forma semelhante a vericação política de precedência de símbolos que se costuma juntar a gestão da tabela de símbolos com a vericação de tipos. A descrição formal do algoritmo de tipagem da linguagem Arith é apresentada na gura 1. Este tipo de algoritmo é classicamente apresentado sob a forma de um conjunto de regras de inferência e só contempla os casos de tipagem bem sucedidos. Qualquer conguração diferente resulta num erro que deverá ser devidamente assinalado. Assim, uma regra de inferência da forma ef eito_lateral cond 1... cond n c deve ser lida como: a conclusão c é válida se as condições cond 1 até cond n são igualmente válidas. Neste caso esta regra terá o efeito lateral a acção 8

9 especicada em ef eito_lateral. Em particular e numa leitura "bottom-up": Γ e 1 : t 1... Γ e n : t n Γ e : t signica que para poder garantir que Γ e : t é preciso garantir/vericar que Γ e 1 : t 1,..., Γ e n : t n Como já o referimos, a presentação do algoritmo de inferência considerada aqui: contempla também a vericação da precedência dos símbolos (isto é, integra a vericação dos símbolos realizada a custa das duas tabelas dde símbolos, global e local) sugere que a validação dos tipos é realizada por um algoritmo (estruturalmente) recursivo. Exercício 6: (Vericação dos tipos) 1. Redena a árvore de sintaxe abstracta de tal forma a que incorpora informação dos tipos de cada expressão. Por exemplo a árvore de sintaxe abstracta de uma variável x de tipo inteiro deverá, nesta nova versão da árvore de sintaxe abstracta, incluir a informação de que tem por identicador x e por tipo inteiro. Para esse efeito utilize preferencialmente o tipo valort. 2. Dene uma função typecheck_expr: expr > expr que verica se uma expressão segue a política de tipos da linguagem Arith. Esta função deverá tomar conta da gestão das variáveis locais. Para tal dever-se-á considerar um parâmetro suplementar (a tabela dos símbolos locais) caso seja conveniente. 3. Dene uma função typecheck_instr: instr > instr que verica se uma instrução segue a política de tipos da linguagem Arith. 4. Dene uma função typecheck_prg: prg > prg que verica se um programa verica a política de tipos da linguagem Arith. 5. Integre todas essas funções na análise semântica da linguagem Arith. 9

10 Γ (set x = e) : t Γ, (x : t) inst 1 ;... ; inst n : Γ (set x = e); inst 1 ;... ; inst n : Γ (print e) : t Γ inst 1 ;... ; inst n : Γ (print e); inst 1 ;... ; inst n : t {inteiro, real}. Γ e : t Γ (set x = e) : t t {inteiro, real} Γ e : t Γ (print e) : t i constante inteira Γ i : inteiro r constante real Γ r : real x variável (x : t) Γ Γ x : t Γ e 1 : t Γ e 2 : t binop {+,,, /} Γ e 1 binop e 2 Γ e : t Γ ( e) : t Γ e 1 : t 1 Γ, (x : t 1 ) e 2 : t 2 Γ (let x = e 1 in e 2 ) : t 2 Figura 1: Algoritmo de tipagem da linguagem Arith 10

11 6 Interpretação de programas Arith Exercício 7: (Avaliação duma expressão) Escreva a função eval_expr de tipo expr > valort que calcula o valor duma expressão. Esta função deverá contemplar a boa utilização e actualização de ambientes que permitam ligar nome de variáveis (locais e globais) aos seus valores. Tenha aqui uma particular atenção à avaliação de identicadores associados ao valor NoI (i.e. ausência de informação sobre o tipo) ou aos valores ( Inteiro None) e (Real None) (i.e. ausência de informação sobre os valores). Esta avaliação deverá resultar num erro semântico devidamente assinalado. Outro ponto por contemplar é a utilização de variáveis não denidas. A avaliação deverá ser também capaz de devidamente assinalar este tipo de situação. Exercício 8: (Avaliação duma instrução) Escreva uma função eval_instr : instr > unit que aceita como parâmetro uma instrução e calcula o seu valor actualizando, se necessário, um ambiente (que, relembramos, liga identicadores de variáveis à valores). 7 Compilação de programas Arith 7.1 Arquitectura da máquina virtual alvo A máquina virtual para qual vamos compilar os programas Arith é uma máquina semelhante a máquina virtual do Java. Visto a linguagem Arith ser relativamente pequena, só iremos aqui considerar uma parte substancialmente simples desta máquina. Trata-se duma máquina de pilhas (por oposição a máquina de registos) cujos código fonte (em OCaml) e documentação poderão ser encontrados no site desousa/compil. Assim a máquina virtual considerada é organizada consoante a gura 2: 11

12 Figura 2: Arquitectura da Máquina virtual A máquina contém uma zona de código C e um registo pc que aponta para a instrução por executar. A máquina dispõe igualmente duma pilha P que permite o arquivo de valores inteiros. Três registos permitam o acesso a diferentes partes de P: sp (stack pointer) aponta para o primeiro espaço vazio da pilha, fp (frame pointer) aponta para o endereço de base das variáveis locais e gp aponta para o endereço de base a partir da qual deverão ser introduzidas as variáveis globais. 7.2 Instruções máquinas relevantes As instruções da máquina virtual necessárias para a compilação da linguagem Arith são apresentadas na gura 3. Exercício 9: Dena as funções compile_expr, compile_instr et compile_prg que permitam respectivamente traduzir em código máquina os valores dos tipos expr, instr e prg. 8 Programa principal 12

13 Código Descrição sp Condição ADD P [sp 2] := P [sp 2] + P [sp 1] sp 1 P [sp 2] e P [sp 1] inteiros SUB P [sp 2] := P [sp 2] P [sp 1] sp 1 P [sp 2] e P [sp 1] inteiros MUL P [sp 2] := P [sp 2] P [sp 1] sp 1 P [sp 2] e P [sp 1] inteiros DIV P [sp 2] := P [sp 2]/P [sp 1] sp 1 P [sp 2] e P [sp 1] inteiros FADD P [sp 2] := P [sp 2] + P [sp 1] sp 1 P [sp 2] e P [sp 1] reais FSUB P [sp 2] := P [sp 2] P [sp 1] sp 1 P [sp 2] e P [sp 1] reais FMUL P [sp 2] := P [sp 2] P [sp 1] sp 1 P [sp 2] e P [sp 1] reais FDIV P [sp 2] := P [sp 2]/P [sp 1] sp 1 P [sp 2] e P [sp 1] reais PUSHF n P [sp] := n sp + 1 n real PUSHI n P [sp] := n sp + 1 n inteiro PUSHN n P [sp] := 0...P [sp + n 1] := 0 sp + n n inteiro PUSHG n P [sp] := P [gp + n] sp + 1 n inteiro PUSHL n P [sp] := P [fp + n] sp + 1 n inteiro STOREG n P [gp + n] := P [sp 1] sp 1 n inteiro STOREL n P [fp + n] := P [sp 1] sp 1 n inteiro WRITEI Imprime P [sp 1] no ecrã sp 1 P [sp 1] inteiro START Atribui o valor de sp afp sp STOP Para a execução do programa sp Figura 3: conjunto de instruções da máquina virtual Exercício 10: (o programa arithc ) Reutilize todas as funções escritas por forma a ter um programa arithc que funcione da seguinte forma: Comando Acção arithc i ch. arith interpreta o cheiro ch. arith arithc c ch. arith compila o cheiro ch. arith para o cheiro ch. avm arithc ch. arith compila o cheiro ch. arith para o cheiro ch. avm 9 Extensões Várias extensões ao compilador arithc são possíveis. Listamos a seguir algumas delas. Realçamos aqui que alguns pontos aqui introduzidos não são de resolução simples ou imediata, mas podem servir de base ou de inspiração à denição de pequenos trabalhos (por exemplo a segunda parte do trabalho por realizar nesta disciplina). 13

14 Exercício 11: (o programa arithc++ ) Modique o compilador arithc por forma a implementar as seguintes funcionalidades: 1. construções let x = e1 in e2 aninhadas tanto em e1 como em e2. Verique se o seu compilador tem em conta esta situação. Caso negativo extenda o seu programa por forma a integrar esta construção; 2. comentários de uma linha via \\ ou de mais de uma linha via os delimitadores ( e ). Estes comentários poderão ser aninhados. 3. produção automática de listagem no formato html. Pretendemos que a página produzida apresenta o programa Arith numa versão mais agradável à leitura: os comentários em cinzento, as palavras chaves são apresentadas na cor vermelha, os identicadores a verde, as constantes de tipo inteiro em laranja, as constantes de tipo real em magenta e o restante dos símbolos em preto. Esta função deverá ser executada quando a opção html for apresentada na linha de comando do compilador. Diga que consequências sobre a implementação deste mecanismo terá o requisito suplementar seguinte: apresentar os identicadores de tipo inteiro numa cor diferente dos identicadores de tipo real. Proponha esta variante via a opção html2; 4. Gestão apropriada dos erros. Pretendemos que cada erro detectado seja assinalado da forma seguinte: Error: AAAAA File: BBBBB, line: CC, characters: DD-EE Reason: FFFFF Em que AAAAA é a classe do erro (sintáctico, léxico, etc.), BBBBB o nome do cheiro onde ocorre o erro, CC a linha, DD e EE o intervalo de colunas onde ocorre o erro. A mensagem FFFFF é a descrição pormenorizada da provável origem/explicação do erro; 14

15 5. directiva de inclusão de cheiro. Pretendemos acrescentar uma directiva de carregamento de cheiro, a directiva load ch ; Esta directiva carrega o código fonte contido no cheiro "ch.arith"e o inclui no ponto em que a directiva é encontrada. A implementação desta directiva deverá incluir a gestão adequada de directivas aninhadas e detectar os ciclos (por exemplo, load A; no cheiro B e load B no cheiro A); 6. directivas de pre-processamento. Pretendemos que seja acrescentada a directiva dene ident expr ; à linguagem Arith (onde ident é um identicador aceite pela linguagem Arith e expr uma expressão arith). A semântica associada a palavra chave dene é semelhante (de facto é uma simplicação) ao #dene da linguagem C. A integração de directivas dene obriga o compilador a execução duma fase de pre-processamento do código fonte, antes da própria fase de compilação, que consiste em percorrer sequencialmente o código fonte e arquivar as associações (ident, value) introduzidas pelas directivas dene e substituir qualquer ocorrência de ident no código fonte (inclusive nas directivas dene seguintes) que apareça depois do dene introduzido pelo referido par (ident, value) por value; 7. pretty-printing e indentação automática. Pretendemos, via a opção na linha de comando indent output, dispor dum mecanismo de produção de código Arith bem formado e bem apresentado. Na presença desta opção, o compilador reproduz o programa Arith previamente analisado (i.e. do qual temos uma AST) no cheiro output. arith. 8. conversão de código fonte para a linguagem OCaml. Pretendemos que se implementa um mecanismo de tradução de código Arith para programas em OCaml. Este mecanismo deverá ser invocado via a opção da linha de comando ml output.ml e produzirá o cheiro output.ml. Este cheiro, quando compilado pelos compiladores OCaml standard e executado, deverá produzir o mesmo output de que o programa executado pela máquina virtual; 9. produção de relatórios. Pretendemos aqui fornecer à linguagem Arith uma ferramenta de produção de relatórios no espírito do ocamlweb e do sistema AFT (Almost Free Text). Esta extensão deverá ser invocada pela opção doc output e gerar uma página html de nome 15

16 output.html. deseja-se que a documentação gerada tenha em atenção os seguintes pontos: os comentários formam a documentação do código; o código em si pode ser apresentado consoante as convenções dada pela opção anterior html; a sequência *texto* nos comentários coloca o texto texto em negrito; a sequência /texto/ nos comentários coloca o texto texto em itálico; o comentário ( s o título título o título ; ) permite a denição duma secção de é gerado um indice remissivo de todas as denições. O índice apresenta as denições por ordem alfabética. Cada entrada do índice remissivo é constituído pela seguinte informação: símbolo tipo pagina, onde símbolo é o símbolo referenciado, tipo o seu tipo e nalmente página o numero da página em que é denido; a cada utilização dum símbolo é associado um link para o local de denição deste último. 10. a introdução de booleanos, de operadores booleanos (igualdade, comparações etc.) e da estrutura condicional if <boolexpr> then <expr> else <expr>; 11. a introdução de variáveis mutáveis (cujo valor pode mudar), a atribuição ident:=<expr> (em que ident é necessariamente o identicador duma variável mutável) e a sequência de expressões e1,e2,..., en onde e1... en são expressões separadas por virgulas (que toma aqui o papel do ponto e vírgula do PASCAL). O valor duma sequência de expressões é sempre o valor da última expressão da sequência; 12. a denição de estruturas iterativas como for x=<expr> to <expr> do <expr> ou while <boolexpr> do <expr>. Atribuiremos a estas duas estruturas a semântica habitual; 16

17 13. a possibilidade de denir funções (eventualmente recursivas) introduzindo a instrução function ident x1... xn = e ; em que ident é um identicador (o nome da função), x1... xn os identicadores dos parâmetros e e a expressão denindo o corpo da função; 14. a utilização de vectores de inteiros ou reais pela sintaxe x[e], onde x é o identicador dum vector e e uma expressão necessariamente inteira (positiva) que representa o índice da célula do vector considerada. 17

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Máquina virtual para o projecto da disciplina de compiladores. 1 Descrição. 1.1 Organização da máquina. 11 de Setembro de 2006

Máquina virtual para o projecto da disciplina de compiladores. 1 Descrição. 1.1 Organização da máquina. 11 de Setembro de 2006 Máquina virtual para o projecto da disciplina de compiladores 11 de Setembro de 2006 Este documento é a tradução da documentação original fornecida com as fontes da máquina virtual aqui descrita. 1 1.1

Leia mais

Linguagem algorítmica: Portugol

Linguagem algorítmica: Portugol Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada

Leia mais

AMBIENTE DE PROGRAMAÇÃO PYTHON

AMBIENTE DE PROGRAMAÇÃO PYTHON Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos

Leia mais

Sintaxe e Semântica. Fases da Compilação. programa fonte

Sintaxe e Semântica. Fases da Compilação. programa fonte Sintaxe e Semântica mleal@inf.puc-rio.br Fases da Compilação programa fonte tokens parse tree árvore anotada ou outra forma intermediária código intermediário código objeto código objeto otimizado scanner

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Conceitos básicos de programação

Conceitos básicos de programação O QUE É UM PROGRAMA? Para executar uma dada tarefa é geralmente necessário entender o sistema onde ela é realizada. Por exemplo, para fazer um bolo temos um sistema composto por: Ingredientes Cozinheiro

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente Capítulo 1 Introdução Um compilador é um que lê um escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num equivalente numa outra linguagem, a linguagem destino Como parte importante neste

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução a Linguagens de Programação Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

Aplicações de Escritório Electrónico

Aplicações de Escritório Electrónico Universidade de Aveiro Escola Superior de Tecnologia e Gestão de Águeda Curso de Especialização Tecnológica em Práticas Administrativas e Tradução Aplicações de Escritório Electrónico Folha de trabalho

Leia mais

Pragmática das Linguagens de Programação 2004/2005

Pragmática das Linguagens de Programação 2004/2005 Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Segundo Exame 11/2/2005 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das respostas deve

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos. Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos. Construtor: método executado por uma CLASSE (e não por um objeto, instância da classe)

Leia mais

Programação 2ºSemestre MEEC - 2010/2011. Programação 2º Semestre 2010/2011 Enunciado do projecto

Programação 2ºSemestre MEEC - 2010/2011. Programação 2º Semestre 2010/2011 Enunciado do projecto Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2º Semestre 2010/2011 Enunciado do projecto O projecto a desenvolver pelos alunos consistirá numa sistema de monitorização,

Leia mais

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções) Aulas anteriores... Formulação adequada do problema Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução Definição do algoritmo Método de decomposição hierárquica utilizando

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

APROG - Civil. Excel. Técnicas de pesquisa de informação em tabelas. Instituto Superior de Engenharia do Porto 2000-2007

APROG - Civil. Excel. Técnicas de pesquisa de informação em tabelas. Instituto Superior de Engenharia do Porto 2000-2007 APROG - Civil Excel Técnicas de pesquisa de informação em tabelas Instituto Superior de Engenharia do Porto 2000-2007 Elaborado por: António Silva (DEI-ISEP) Pesquisa de Informação em Tabelas O Excel

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Engenharia de Software Sistemas Distribuídos

Engenharia de Software Sistemas Distribuídos Engenharia de Software Sistemas Distribuídos 2 o Semestre de 2009/2010 FEARSe Requisitos para a 1 a entrega 18 de Março de 2010 1 Introdução O projecto conjunto das disciplinas de Engenharia de Software

Leia mais

Conceitos Básicos de C

Conceitos Básicos de C Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,

Leia mais

Conceitos Importantes:

Conceitos Importantes: Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável

Leia mais

QUALIFICAÇÃO TÉCNICA EM DESENVOLVIMENTO DE SISTEMAS

QUALIFICAÇÃO TÉCNICA EM DESENVOLVIMENTO DE SISTEMAS Desenvolvimento De Sistemas - Lógica De Programação. 1. Lógica de Programação I 1.1 Introdução á Lógica de Programação 1.2 O que é lógica? 1.3 Lógica Matemática 1.4 Lógica de Programação 1.5 Seqüência

Leia mais

O que é o JavaScript?

O que é o JavaScript? JavaScript Introdução O JavaScript é utilizado por milhões de páginas na web para melhorar o design, validar forms, e muito mais O JavaScript foi inicialmente desenvolvido pela Netscape e é a linguagem

Leia mais

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

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010 Construção de Compiladores Prof. Raimundo Santos Moura (http://www.ufpi.br/rsm) Construção de Compiladores Livro-Texto: AHO, Alfred V.; ULLMAN, Jeffrey D.; SETHI, R. Compiladores: princípios, técnicas

Leia mais

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA FUNDAÇÃO EDUCACIONAL DE ITUIUTABA ASSOCIADA À UNIVERSIDADE DO ESTADO DE MINAS GERAIS CURSO DE SISTEMA DE INFORMAÇÃO PILHA E FILA Prof. Walteno Martins Parreira Júnior www.waltenomartins.com.br waltenomartins@yahoo.com

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Sistemas Operacionais e Introdução à Programação Introdução à Lógica de Programação 1 Estruturas de dados Representação computacional das informações do problema ser resolvido Informações podem ser de

Leia mais

Diagrama de transição de Estados (DTE)

Diagrama de transição de Estados (DTE) Diagrama de transição de Estados (DTE) O DTE é uma ferramenta de modelação poderosa para descrever o comportamento do sistema dependente do tempo. A necessidade de uma ferramenta deste tipo surgiu das

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado.

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado. Conceitos relativos à Informação 1. Informação O que á a informação? Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado. 2. Dados Em informática designa-se

Leia mais

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de

Leia mais

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO

Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Programação de Computadores I Fluxogramas PROFESSORA CINTIA CAETANO Problemas & Algoritmos Para resolver um problema através dum computador é necessário encontrar em primeiro lugar uma maneira de descrevê-lo

Leia mais

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal 2015. Copyright 2010 All rights reserved.

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal 2015. Copyright 2010 All rights reserved. Programação Folha Prática 3 Lab. 3 Departamento de Informática Universidade da Beira Interior Portugal 2015 Copyright 2010 All rights reserved. LAB. 3 3ª semana EXPRESSÕES E INSTRUÇÕES 1. Revisão de conceitos

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Javascript 101. Parte 2

Javascript 101. Parte 2 Javascript 101 Parte 2 Recapitulando O Javascript é uma linguagem de programação funcional Os nossos scripts são executados linha a linha à medida que são carregados. O código que está dentro de uma função

Leia mais

ESTRUTURA DE DADOS PILHA

ESTRUTURA DE DADOS PILHA ESTRUTURA DE DADOS PILHA CONCEITO DE PILHAS - Pilhas são listas lineares onde a inserção de um novo item ou a remoção de um item já existente se dá em uma única extremidade, no topo. Pilha vazia Insere(A)

Leia mais

Geração e Otimização de Código

Geração e Otimização de Código Geração e Otimização de Código Representação de código intermediária Código de três endereços, P-código Técnicas para geração de código Otimização de código Prof. Thiago A. S. Pardo 1 Estrutura geral de

Leia mais

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1.

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1. Departamento de Engenharia Informática 2008/2009 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

CAP. I ERROS EM CÁLCULO NUMÉRICO

CAP. I ERROS EM CÁLCULO NUMÉRICO CAP. I ERROS EM CÁLCULO NUMÉRICO 0. Introdução Por método numérico entende-se um método para calcular a solução de um problema realizando apenas uma sequência finita de operações aritméticas. A obtenção

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Representação de Algoritmos - Linguagens de Programação

Representação de Algoritmos - Linguagens de Programação Representação de Algoritmos - Linguagens de Programação A representação de algoritmos em uma pseudo-linguagem mais próxima às pessoas é bastante útil principalmente quando o problema a ser tratado envolve

Leia mais

Introdução ao FORTRAN (Parte I)

Introdução ao FORTRAN (Parte I) Programação de Computadores III Aula 7 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br Introdução INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br introdução Tópicos conceitos básicos o que é um programa um programa na memória decifrando um código referência Capítulo

Leia mais

Metodos de Programação

Metodos de Programação Metodos de Programação Métodos de Programação Introdução Informática, Computador, Algoritmo Informática: Ciência do processamento da informação Computador: Máquina que serve para processar informação Algoritmo:

Leia mais

SAMUO APP: MANUAL DO ADMINISTRADOR

SAMUO APP: MANUAL DO ADMINISTRADOR as novas tecnologias ao serviço do desenvolvimento de projectos w w w. i m a d i p. c o m CABO VERDE: REALIZAÇÃO DE UMA ACÇÃO- PILOTO PARA A MELHORIA DA GESTÃO NUM GABINETE TÉCNICO SELECCIONADO OFITEC

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica 28 de Fevereiro de 2013 Nesta aula apresentam-se dois dos aspetos fundamentais das linguagens de programação, sintaxe e semântica.

Leia mais

Aula de Informática (disponível em http://www.hylson.com) Sumário

Aula de Informática (disponível em http://www.hylson.com) Sumário Aula de Informática (disponível em http://www.hylson.com) Assunto: Fórmulas avançadas (estatísticas, lógicas) Sumário Pedindo Ajuda ao Excel...2 Função Financeira: CONT.SE...2 Sintaxe...2 Exemplos...2

Leia mais

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

Nota prévia. Convenções

Nota prévia. Convenções Nota prévia O draft de diagrama de componentes, e respectivas interfaces, foi actualizado pela última vez em 07/12/2007. Este draft servirá de base para as implementações do CyberChair. Caso detecte alguma

Leia mais

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa

ARQUITETURA DE COMPUTADORES. Rogério Spindula Rosa ARQUITETURA DE COMPUTADORES 1 Rogério Spindula Rosa 2 EXECUÇÃO DE PROGRAMAS PROGRAMA 3 4 INTRODUÇÃO Hoje é raro escrever um programa diretamente em linguagem de computador em virtude da enorme dificuldade

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Programação WEB. Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

Programação WEB. Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP Programação WEB Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida Aula III Introdução PHP Introdução PHP PHP=Hypertext Pre-Processor Linguagem de script open

Leia mais

SAFT para siscom. Manual do Utilizador. Data última versão: 07.11.2008 Versão: 1.01. Data criação: 21.12.2007

SAFT para siscom. Manual do Utilizador. Data última versão: 07.11.2008 Versão: 1.01. Data criação: 21.12.2007 Manual do Utilizador SAFT para siscom Data última versão: 07.11.2008 Versão: 1.01 Data criação: 21.12.2007 Faro R. Dr. José Filipe Alvares, 31 8005-220 FARO Telf. +351 289 899 620 Fax. +351 289 899 629

Leia mais

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng.

Aula teórica 3. Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java. Preparado por eng. Aula teórica 3 Tema 3.Computadores e linguagens Linguagens de Programação Compilação e linkagem LP Java Preparado por eng.tatiana Kovalenko Linguagens de Programação Para escrever programas é necessário

Leia mais

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS ENTIDADE GESTORA ERP PORTUGAL

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS ENTIDADE GESTORA ERP PORTUGAL GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS ENTIDADE GESTORA ERP PORTUGAL Versão: 1.0 Data: 05-06-2009 Índice Acesso e estados dos Formulários... 3 Escolha do Formulário e submissão... 4 Bases para a navegação

Leia mais

Programa ConsoleRPN. PUC-Rio CIV 2802 - Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Programa ConsoleRPN. PUC-Rio CIV 2802 - Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira Programa ConsoleRPN Programa criado com o Visual Studio Community 2013 para efetuar operações algébricas entre números, uma calculadora funcionando com console usando RPN PUC-Rio CIV 2802 - Sistemas Gráficos

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo; Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo; O tipo de dados tem por base um tipo simples (enumerável); Na verdade, um set representa o conjunto

Leia mais

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II O seguinte exercício contempla um processo com três estágios. Baseia-se no Inquérito de Satisfação Fase II, sendo, por isso, essencial compreender primeiro o problema antes de começar o tutorial. 1 1.

Leia mais

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação FaculdadedeCiências UniversidadeAgostinhoNeto DepartamentodeMatemáticaeEngenhariaGeográfica CiênciasdaComputação ProgramaçãoII SegundaParte Adaptado de um original dos docentes de ISCTE Objectivos Os alunos

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D) Universidade Federal de Ouro Preto - UFOP Instituto de Ciências Exatas e Biológicas - ICEB Departamento de Computação - DECOM INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 1 AULA TEÓRICA 2

Leia mais

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis. 3. Tabelas de Hash As tabelas de hash são um tipo de estruturação para o armazenamento de informação, de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades

Leia mais

Hugo Pedro Proença, 2007

Hugo Pedro Proença, 2007 Stored Procedures À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente. Além disto, é necessário que todas as aplicações

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Programação de Computadores. Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim

Programação de Computadores. Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim Programação de Computadores Professor Ilaim Costa Junior ilaim@ic.uff.br Www.ic.uff.br/~ilaim Roteiro da Aula de Hoje Introdução ao FORTRAN (Parte I) Organização de programas Tipos de dados Variáveis Programação

Leia mais

COMPETÊNCIAS BÁSICAS EM TIC NAS EB1

COMPETÊNCIAS BÁSICAS EM TIC NAS EB1 COMPETÊNCIAS BÁSICAS EM TIC NAS EB1 Oficina do Correio Para saber mais sobre Correio electrónico 1. Dicas para melhor gerir e organizar o Correio Electrónico utilizando o Outlook Express Criar Pastas Escrever

Leia mais

Engenharia de Software. Enunciado da Primeira Parte do Projecto

Engenharia de Software. Enunciado da Primeira Parte do Projecto LEIC-A, LEIC-T, LETI, MEIC-T, MEIC-A Engenharia de Software 2 o Semestre 2014/2015 Enunciado da Primeira Parte do Projecto 1. Primeira Parte do Projecto ES Este enunciado descreve o trabalho a realizar

Leia mais

Estruturas de Repetição. Programação em Java 2006-2007. Estruturas de Repetição

Estruturas de Repetição. Programação em Java 2006-2007. Estruturas de Repetição Aula 4 Estruturas de Repetição Programação em Java 2006-2007 Estruturas de Repetição As estruturas repetitivas ou ciclos permitem repetir um conjunto de uma ou mais instruções O Java apresenta três variantes

Leia mais

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas Conjunto de instruções O Conjunto de Instruções ISA Instruction Set Architecture Alguns conceitos... Linguagem máquina Combinação de 0 s e 1 s organizados segundo palavras que são as instruções que o processador

Leia mais

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br Fundamentos de Programação Turma CI-240-EST Josiney de Souza josineys@inf.ufpr.br Agenda do Dia Aula 2 (07/08/15) Introdução ao Python História Características Estrutura dos código-fonte Primeiros elementos

Leia mais

Modelo Cascata ou Clássico

Modelo Cascata ou Clássico Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação

Leia mais

Manual de Utilizador Carregamento e Processamento de Ficheiros via Internet Banking. Português - V1

Manual de Utilizador Carregamento e Processamento de Ficheiros via Internet Banking. Português - V1 Manual de Utilizador Carregamento e Processamento de Ficheiros via Internet Banking Português - Índice Introdução... 2 Capitulo I... 3 1.1 Localização da funcionalidade... 3 1.2 Tipo de Ficheiros... 3

Leia mais

Curso de Iniciação ao Access Basic (I) CONTEÚDOS

Curso de Iniciação ao Access Basic (I) CONTEÚDOS Curso de Iniciação ao Access Basic (I) CONTEÚDOS 1. A Linguagem Access Basic. 2. Módulos e Procedimentos. 3. Usar o Access: 3.1. Criar uma Base de Dados: 3.1.1. Criar uma nova Base de Dados. 3.1.2. Criar

Leia mais

O Processo de Programação

O Processo de Programação Programação de Computadores I Aula 04 O Processo de Programação José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/23 Algoritmo Um algoritmo é uma seqüência de

Leia mais

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2010/2011 Enunciado do projecto O projecto a desenvolver pelos alunos consistirá numa sistema de monitorização do estado de

Leia mais

Teoria da Computação - Programação OCaml Ficha de exercícios

Teoria da Computação - Programação OCaml Ficha de exercícios Teoria da Computação - Programação OCaml Ficha de exercícios Simão Melo de Sousa Em parte, estes exercícios baseam-se nas fichas práticas retiradas do site OCaml Hump 1 Aritmética Exercício 1 (Fibbonacci)

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente

Bases de Dados. Lab 1: Introdução ao ambiente Departamento de Engenharia Informática 2010/2011 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

Parte II Introdução a Linguagens de Programação

Parte II Introdução a Linguagens de Programação Programação de Computadores III Aula 1 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula

Leia mais

Python: Comandos Básicos. Claudio Esperança

Python: Comandos Básicos. Claudio Esperança Python: Comandos Básicos Claudio Esperança Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são escritas e computadas imediatamente Variáveis podem

Leia mais

Componentes do Computador e. aula 3. Profa. Débora Matos

Componentes do Computador e. aula 3. Profa. Débora Matos Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Tarefa Orientada 15 Manipulação de dados

Tarefa Orientada 15 Manipulação de dados Tarefa Orientada 15 Manipulação de dados Objectivos: Criação de tabelas teste Comando INSERT INTO Inserção de dados Comando INSERT Actualização de dados Comando UPDATE Eliminação de dados Comando DELETE

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA

1. NÍVEL CONVENCIONAL DE MÁQUINA 1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 2 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Exemplo Inicial Uma

Leia mais