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

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

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

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

Linguagens Formais e Compilação Ficha de exercícios

Linguagens Formais e Compilação Ficha de exercícios Linguagens Formais e Compilação Ficha de exercícios Simão Melo de Sousa 1 Linguagens Formais: Construir Frases Exercício 1 Para cada uma das gramáticas G seguintes, (a) descreva a linguagem L(G) gerada

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Capítulo 1. Linguagens e processadores

Capítulo 1. Linguagens e processadores Capítulo 1. 1. Linguagens 1.1. Definição Definição : Uma linguagem L sobre um alfabeto, também designado com frequência por vocabulário, V, é um conjunto de frases, em que cada frase é uma sequência de

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

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário Síntese Compiladores Código intermediário 1 Os assuntos apresentados trazem respostas às perguntas seguintes: 1. Pode a memória ser alocada dinamicamente? 2. Pode a memória ser liberada explicitamente?

Leia mais

Programas simples em C

Programas simples em C Programas simples em C Problema 1. Escreve um programa em C que dados dois inteiros indique se são iguais ou qual o maior. Utilizar a construção em 5 etapas... quais? 1. Perceber o problema 2. Ideia da

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

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

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

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

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

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

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

Programação Elementar de Computadores Jurandy Soares

Programação Elementar de Computadores Jurandy Soares Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos

Leia mais

Folha de cálculo. Excel. Agrupamento de Escolas de Amares

Folha de cálculo. Excel. Agrupamento de Escolas de Amares Folha de cálculo Excel Agrupamento de Escolas de Amares Índice 1. Funcionalidades básicas... 3 1.1. Iniciar o Excel... 3 1.2. Criar um livro novo... 3 1.3. Abrir um livro existente... 3 1.4. Inserir uma

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

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

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

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas Processamento e Otimização de Consultas Banco de Dados Motivação Consulta pode ter sua resposta computada por uma variedade de métodos (geralmente) Usuário (programador) sugere uma estratégia para achar

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

Laboratório 4 Validação do Formulário

Laboratório 4 Validação do Formulário Laboratório 4 Validação do Formulário Introdução Agora que já definimos os nossos documentos usando xhtml e já os embelezámos através da utilização das CSS, está na hora de validar a informação que o utilizador

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

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

Codificação da informação. Execução do programa. Codificação binária. Representação de inteiros positivos. Representação binária

Codificação da informação. Execução do programa. Codificação binária. Representação de inteiros positivos. Representação binária Execução do a calcula-se determinada solução (output) para determinado problema (input) usando um a que é executado no dados do problema (informação de entrada) a solução (informação resultante) Codificação

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

Primeiro Curso de Programação em C 3 a Edição

Primeiro Curso de Programação em C 3 a Edição Edson Luiz França Senne Primeiro Curso de Programação em C 3 a Edição Visual Books Sumário Prefácio da Terceira Edição 9 Prefácio da Primeira Edição 11 Aula 1 13 Regras de sintaxe de uma linguagem de programação...

Leia mais

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas) ENIAC Introdução aos Computadores e à ção (Noções Básicas) Introdução aos Computadores e à ção (Noções Básicas) 1 Introdução aos Computadores e à ção (Noções Básicas) 2 O transistor foi inventado em 1947

Leia mais

Pratica JFlex. Prática criando o primeiro analisador léxico

Pratica JFlex. Prática criando o primeiro analisador léxico UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE CURSO: CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMPILADORES PROFESSOR: JOHNI DOUGLAS MARANGON Pratica JFlex JFlex é uma ferramenta que permite

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

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

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

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

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

Aluísio Eustáquio da Silva

Aluísio Eustáquio da Silva 1 Aluísio Eustáquio da Silva SciLab Programável Material didático usado em aulas de Programação de Computadores, Algoritmos e Lógica de Programação Betim Maio de 2012 2 PROGRAMAÇÃO O SciLab permite que

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

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

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012 Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012 Mestrado Integrado em Engenharia Electrotécnica e de Computadores 1º ano 2º semestre Trabalho Final Reservas de viagens

Leia mais

Programação de Computadores

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

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

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

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Computabilidade 2012/2013 Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Capítulo 1 Computabilidade 1.1 A noção de computabilidade Um processo de computação

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Objectivos Indicação onde são utilizados os computadores Primeiro programa em C++ Etapas básicas do desenvolvimento de programas Projecto centrado nos objectos Classes e programação

Leia mais

Programação Recursiva versão 1.02

Programação Recursiva versão 1.02 Programação Recursiva versão 1.0 4 de Maio de 009 Este guião deve ser entregue, no mooshak e no moodle, até às 3h55 de 4 de Maio. AVISO: O mooshak é um sistema de avaliação e não deve ser utilizado como

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

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

Arquitectura de Computadores II. Máquinas Virtuais

Arquitectura de Computadores II. Máquinas Virtuais Arquitectura de Computadores II 3º Ano Máquinas Virtuais João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Março 2003 Máquinas Virtuais Questões que levaram à introdução de máquinas

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

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

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

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 7: 29 de abril de 2010 1 2 Subrotinas Um procedimento ou função é uma subrotina armazenada que executa uma tarefa específica baseada nos parâmetros de entrada

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

Algoritmos Computacionais ( Programas )

Algoritmos Computacionais ( Programas ) Algoritmos Computacionais ( Programas ) A partir deste tópico, consideramos a utilização do universo Computacional na solução de problemas. Para tanto devemos lembrar que a transposição de problemas do

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

Técnicas de Teste de Software

Técnicas de Teste de Software Técnicas de Teste de Software Fabrício Sousa fabricio@uesb.br Projeto de Caso de Teste Conjunto de técnicas para criação de casos de testes Série de casos de testes que tem grande probabilidade de encontrar

Leia mais

Programação Básica em Arduino Aula 2

Programação Básica em Arduino Aula 2 Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

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

Introdução. A verificação de tipos pode ser estática e dinâmica

Introdução. A verificação de tipos pode ser estática e dinâmica Análise Semântica 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 Além disso,

Leia mais

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB Instituto Politécnico de Viseu Escola Superior de Tecnologia Departamento: Matemática Métodos Numéricos Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007 Aula prática n o 1 - Introdução

Leia mais

Introdução à Linguagem

Introdução à Linguagem Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:

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

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

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

4 Criação de macros e introdução à linguagem VBA

4 Criação de macros e introdução à linguagem VBA 4 Criação de macros e introdução à linguagem VBA Vinicius A. de Souza va.vinicius@gmail.com São José dos Campos, 2011. 1 Sumário Tópicos em Microsoft Excel 2007 Introdução à criação de macros...3 Gravação

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

Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++

Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++ Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++ 1. Introdução Em nossa primeira aula prática de programação em linguagem C iremos escrever e testar programas de computador básicos. Mas antes,

Leia mais

MÓDULO - III Manual Prático Microsoft Excel 2007

MÓDULO - III Manual Prático Microsoft Excel 2007 MÓDULO - III Manual Prático Microsoft Excel 2007 1 MÓDULO - III CÁLCULOS... 3 Fazer contas... 3 Fórmulas com operadores básicos... 3 Fórmulas com funções... 4 Funções mais usadas... 8 Soma... 8 Media...

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

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Sumário Unidade Lógica Aritmetrica Registradores Unidade Lógica Operações da ULA Unidade de Ponto Flutuante Representação

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

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

Informações sobre Filmes de Cinema em Cartaz em Linguagem Natural Relatório Final

Informações sobre Filmes de Cinema em Cartaz em Linguagem Natural Relatório Final Mestrado Integrado em Engenharia Informática e Computação Inteligência Artificial 3 o Ano Informações sobre Filmes de Cinema em Cartaz em Linguagem Natural Relatório Final Autores: Carlos Tiago da Rocha

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

Procalc v1.0. Versão Programador

Procalc v1.0. Versão Programador Procalc v1.0 Versão Programador Conteúdo Procalc... 4 Primeiros botões... 5 Funções Básicas... 6 Como funciona... 7 Funções avançadas... 8 Logaritmo... 8 Logaritmo Natural... 9 Expoente... 10 Factorial...

Leia mais

Introdução. Capítulo 1. 1.1. Breve sinopse

Introdução. Capítulo 1. 1.1. Breve sinopse Capítulo 1 Introdução 1.1. Breve sinopse O C é uma linguagem de programação criada por Dennis Ritchie no início da década de 70 do século XX. É uma linguagem de complexidade baixa, estruturada, imperativa

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

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: Introdução à Programação Carga horária total: 60 Carga horária teórica: 0 Carga horária prática: 60 Código da Disciplina: CCMP0041 Período de oferta: 2010.2 Turma: CA

Leia mais

ISCAP. Algoritmia. Pág. 1. Ana Paula Teixeira

ISCAP. Algoritmia. Pág. 1. Ana Paula Teixeira Algoritmia Pág. 1 Os Computadores e a resolução de Problemas PROBLEMA Fase de Resolução do Problema Pág. 2 Passo difícil Solução como um PROGRAMA de Computador Solução em forma de Algoritmo Fase de Implementação

Leia mais