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

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

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

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

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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Instruções detalhadas para o primeiro programa

1. Instruções detalhadas para o primeiro programa DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INFORMÁTICA PARA A SAÚDE COMPUTADORES E PROGRAMAÇÃO Ano Lectivo 2012/2013 1º Semestre FOLHA 1 - INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA 1. Instruções detalhadas

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

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

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

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

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

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

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

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

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

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

Mestrado em Matemática Financeira

Mestrado em Matemática Financeira Programação Mestrado em Matemática Financeira http://moodle.fc.ul.pt Luís Sequeira 03 de Janeiro de 2014 Bom dia! 2 Contactos......................................................... 3 Abstracção!.......................................................

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

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária)

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária) Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária) /curriculum Julho de 2008 Versão 1.1 1 Introdução O objectivo deste guia é auxiliar o utilizador da Plataforma

Leia mais

Algoritmia e Estruturas de Dados

Algoritmia e Estruturas de Dados JOSÉ BRAGA DE VASCONCELOS JOÃO VIDAL DE CARVALHO Algoritmia e Estruturas de Dados Programação nas linguagens C e JAVA Portugal/2005 Reservados todos os direitos por Centro Atlântico, Lda. Qualquer reprodução,

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

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

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

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

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

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

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

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

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

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

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

ZS Rest. Manual de Iniciação. FrontOffice (ponto de venda)

ZS Rest. Manual de Iniciação. FrontOffice (ponto de venda) Manual de Iniciação FrontOffice (ponto de venda) 1 1. Índice 2. Introdução... 3 3. Iniciar o ZSRest FrontOffice... 4 4. Início de Operador... 5 b) Fazer login de Empregado:... 5 c) Botões de Acção:...

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

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

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

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

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas Luiz Henrique Santos

Leia mais

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

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Ciclo de desenvolvimento O modelo hipotético de computador utilizado no capítulo anterior, embora muito

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

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

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

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

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

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

Fiabilidade dos Sistemas Informáticos

Fiabilidade dos Sistemas Informáticos Fiabilidade dos Sistemas Informáticos Verificação de Programas Imperativos Lógica de Hoare e outros métodos baseado em Pré/Pós-Condições e Invariantes Simão Melo de Sousa Computer Science Department University

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

MANUAL TPROFESSOR VERSÃO 1.0. Com base na versão 34 da aplicação

MANUAL TPROFESSOR VERSÃO 1.0. Com base na versão 34 da aplicação MANUAL DO TPROFESSOR VERSÃO 1.0 Com base na versão 34 da aplicação Truncatura / "Manual TProfessor" / 2 INDICE INTRODUÇÃO... 3 CONVENÇÕES... 3 INÍCIO DA UTILIZAÇÃO... 4 SUMÁRIOS... 5 COMO SUMARIAR....

Leia mais

WEB OF SCIENCE - tutorial

WEB OF SCIENCE - tutorial WEB OF SCIENCE - tutorial O QUE É A WEB OF SCIENCE A Web of Science é a designação comum que é dada a um conjunto de bases de dados também conhecidas como «Science Citation Indexes» (Science Citation Index,

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

Alocação dinâmica de memória

Alocação dinâmica de memória Alocação dinâmica de memória Jander Moreira 1 Primeiras palavras Na solução de problemas por meio algoritmos ou programas, é comum surgir a necessidade de manter todo o conjunto de dados a ser processado

Leia mais

SISDEB SISTEMA de DÉBITO ELETRÔNICO ITAÚ

SISDEB SISTEMA de DÉBITO ELETRÔNICO ITAÚ SISDEB SISTEMA de DÉBITO ELETRÔNICO ITAÚ Intercâmbio Eletrônico de Arquivos Layout de Arquivos CNAB150 Versão 4.0 Índice 1. Noções Básicas...3 1.1 Apresentação...3 1.2 Sistema de Débito Eletrônico Itaú...3

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

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

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

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

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

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

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

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

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

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 8: 04 de maio de 2010 1 Formatos de instruções MIPS 2 Endereçamento de operandos imediatos de 32 bits Endereçamento em desvios Modos de endereçamento do MIPS 3

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

Information Router: Plataforma webservice de comunicação entre aplicações

Information Router: Plataforma webservice de comunicação entre aplicações Information Router: Plataforma webservice de comunicação entre aplicações Pedro Silva 1, José Castro 1, e Ildemundo Roque 1 Telbit, Tecnologias de Informação Rua Banda da Amizade, 38 r/c Dto. 3810-059

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

Árvores e Árvores Binárias

Árvores e Árvores Binárias MAC 5710 - Estruturas de Dados - 2008 Referência bibliográfica Os slides sobre este assunto são parcialmente baseados nas seções sobre árvores do capítulo 4 do livro N. Wirth. Algorithms + Data Structures

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

TRIBUNAL DE JUSTIÇA - SC. MICROSOFT OFFICE - EXCEL 2007 Pág.: 1

TRIBUNAL DE JUSTIÇA - SC. MICROSOFT OFFICE - EXCEL 2007 Pág.: 1 EXCEL 2007 O Excel 2007 faz parte do pacote de produtividade Microsoft Office System de 2007, que sucede ao Office 2003. Relativamente à versão anterior (Excel 2003), o novo programa introduz inúmeras

Leia mais

Excel 2010 Modulo II

Excel 2010 Modulo II Excel 2010 Modulo II Sumário Nomeando intervalos de células... 1 Classificação e filtro de dados... 3 Subtotais... 6 Validação e auditoria de dados... 8 Validação e auditoria de dados... 9 Cenários...

Leia mais

Teoria da Computação Linguagens e Expressões Regulares, Autómatos de Estados Finitos

Teoria da Computação Linguagens e Expressões Regulares, Autómatos de Estados Finitos Teoria da Computação Linguagens e Expressões Regulares, Autómatos de Estados Finitos Simão Melo de Sousa 12 de Outubro de 2011 Conteúdo 1 Linguagens e Expressões Regulares 2 2 Autómatos de Estados Finitos

Leia mais

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE

UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE 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 Back-End Compilação 1. Compilação etapa Back-end

Leia mais

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador Estrutura de um compilador Compiladores Análise lexical (1) Expressões Regulares 1 2 Plano da aula 1. Motivação do uso de E.R. e definições Linguagens, tokens, lexemas... 2. Regras de formação e exemplos

Leia mais