Conceitos de Linguagens de Programação

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

Download "Conceitos de Linguagens de Programação"

Transcrição

1 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 03 (rogerio@fct.unesp.br) Aula 3 Variáveis: Nomes Vinculações (binding) Verificação de tipo e Escopo 2 1

2 Questões de Projeto Qual o tamanho máximo de um nome? Caracteres de conexão podem ser usados em nomes? Maiúsculas e minúsculas são diferentes? Palavras especiais são palavras reservadas ou palavras-chave? 3 Tamanho de nomes FORTRAN : máximo 6 COBOL: máximo 30 FORTRAN 90 e ANS C: máximo 31 Ada: sem limite e todos são significantes C++: sem limite, mas implementadores freqüentemente estabelecem limite 4 2

3 5 Variáveis Variável memória é uma abstração de uma célula de Podem ser atributos: caracterizada pela sêxtupla de Nome, endereço, valor, tipo, tempo de vida, e escopo Nome: string Endereço: endereço de memória a ela associado Uma variável pode ter diferentes endereços de memória durante a execução Uma variável pode ter diferentes endereços em diferentes lugares de um programa Pode haver dois nomes para um mesmo endereço (aliases) Prejudicial a legibilidade "nformation Binding" As LPs imperativas imitam as ações dos computadores em nível de linguagem de máquina (LM). Nesse nível, os computadores operam com 2 unidades principais: CPU e memória. Uma unidade de execução típica em LM consiste de 4 passos. 6 3

4 "nformation Binding" 1. Obter o endereço de locações para um resultado e 1 ou mais operandos 2. Obter o dado operando da(s) locação(ões) do operando 3. Computar o dado resultado dos dados operandos 4. Armazenar o dado resultado na locação do resultado 7 "nformation Binding" Exemplo A := B + C seria executado como: 1 - Obter os endereços de A, B e C 2 - Obter os dados dos endereços B e C 3 - Computar o resultado de B + C 4 - Armazenar o resultado na locação de A 8 4

5 Binding Apesar da abstração de endereços em nomes, as LPs imperativas mantém os 4 passos como uma unidade de programa padrão. Essa unidade de execução se tornou a unidade fundamental de LP imperativas chamada de comando de atribuição. 9 Binding De fundamental importância para a performance dessa atribuição é o estabelecimento e uso de um número de bindings ("ligações"): passo 1: binding entre nomes e locações de operandos e resultados passo 2: binding entre locação e valor para estabelecer valores de operandos passo 4: binding entre locação do resultado e o valor computado 10 5

6 Binding No passo 3, a computação depende da interpretação dos dados e dos operadores definidos. LPs relacionam dados e operadores através de tipos. Veremos o papel de tipo em binding. Além disso será discutido o Escopo dos bindings: definição e mudança de bindings. Dados objetos & Bindings Binding Dado objeto = (L, N, V, T) onde L - locação, N - nome, V - valor, T - tipo Binding é a atribuição de valor a um dos quatro componentes acima. Esses bindings podem ser alterados em certas ocasiões. Os bindings podem ocorrer em tempo de compilação, em tempo de loading (quando o programa LM gerado pelo compilador está sendo alocado à locações específicas na memória), ou em tempo de execução. 6

7 Tipos de Binding Bindings de locação geralmente ocorrem em tempo de loading, mas também podem ocorrer em tempo de execução (variáveis em procedimentos e alocação dinâmica). Bindings de nome ocorrem tipicamente em tempo de compilação, quando uma declaração é encontrada. (em arrays e records ocorrem bindings compostos de nomes). 13 Tipos de Binding Bindings de tipo ocorrem geralmente em tempo de compilação, através de declarações de tipo. Veja exemplos dos efeitos da declaração de tipos em ADA nas figuras seguintes. Binding de tipo dinâmico ocorre durante tempo de execução, não havendo declarações. O tipo do dado objeto é determinado pelo tipo do valor, e portanto, uma mudança de valor implica em novo binding. 14 7

8 Tipos de Binding 15 Exemplo A:integer; 16 8

9 Exemplo B:integer:=0; 17 Exemplo C : constant integer := 0; 18 9

10 Escopo de Binding e Unidades de Execução Divisões de um programa: programa - maior divisão; unidade executável fundamental blocos comando - menor divisão; unidade indivisível O objetivo de se juntar unidades de execução, neste caso, é para identificar o escopo de bindings. 19 Tipos de Binding Um binding é dito estático se ocorre antes da execução e permanece inalterado durante a execução do programa Um binding é dito dinâmico se ocorre durante a execução ou pode ser alterado durante a execução do programa 20 10

11 Tipos de Binding Como um tipo é especificado? Quando acontece o binding? Se estático, o tipo pode ser especificado ou por uma declaração explícita ou por declaração implícita Uma declaração explícita é uma sentença declarativa para o tipo da variável Uma declaração implícita é um mecanismo default para a especificação de tipos acontece na primeira vez que uma variável é encontrada Exemplos: FORTRAN, PL/, BASC, e Perl têm mecanismos de declaração implícita Vantagens: facilidade na escrita Desvantagem: legibilidade (menos problema em Perl) Binding Dinâmico Especificado por sentenças APL: LST < LST < Vantagem: flexibilidade Desvantagem: Alto custo (checagem de tipo e interpretação) Detecção de erros de tipo pelo compilador é difícil 11

12 Categoria de Variáveis por Tempo de Vida Estáticas Ligadas a células de memória antes da execução, permanecendo na mesma célula durante toda a execução 23 Exemplos: variáveis em FORTRAN 77, variáveis estáticas em C (cláusula static) Vantagem: eficiência (endereçamento direto) Sensível à história suporte a subprogramação Desvantagem: falta de flexibilidade (sem recursão) Categoria de Variáveis por Tempo de Vida Stack-dynamic 24 Binding de armazenamento são criados quando suas sentenças de declaração são efetuadas Se escalares, todos os atributos exceto endereço são estaticamente ligados Exemplos: variáveis locais em procedimentos/funções em Pascal e C Vantagem: permitem recursão e otimizam o uso de espaço em memória Desvantagens: overhead de alocação e liberação Subprogramas não podem ser history sensitive Referência ineficiente (endereçamento indireto) 12

13 Categoria de Variáveis por Tempo de Vida Heap-dynamic Explícito Alocado e liberado por diretivas explícitas, especificadas pelo programador, que tem efeito durante a execução Referenciadas por ponteiros Exemplos: objetos dinâmicos em C e tudo em JAVA Vantagem: armazenamento dinâmico Desvantagem: neficientes e não confiável 25 Categoria de Variáveis por Tempo de Vida mplicit heap-dynamic Alocação e liberação causadas por sentenças de associação Exemplo; todas variáveis em APL Vantagem: flexibilidade Desvantagem: neficiente, porque todos os atributos são dinâmicos Sem detecção de erros 26 13

14 Tipo de Variáveis Checagem de Tipo é uma atividade de garantia de que operandos e operadores são de tipos compatíveis Tipo compatível é um tipo que é legal para um operando, ou é permitido, segundo as regras da linguagem. Pode ser que haja a conversão automática para garantir a compatibilidade (coerção) 27 Uma linguagem é fortemente tipada se erros de tipo são sempre detectados Blocos Conjunto de comandos para atender a determinado fim. 1 - Escopo de estrutura de controle Estruturas condicionais Estruturas iterativas 2 - Escopo de procedimentos ou funções 3 - Unidades de compilação Blocos compilados separadamente e depois unidos para execução 4 - Escopo de bindings Bloco de comandos sobre os quais bindings específicos são válidos 31 14

15 Escopo de Binding de Nome Blocos que definem um escopo de binding de nome contém, em geral, duas partes: Uma seção de DECLARAÇÕES, que define os bindings que valem dentro do bloco Uma seção EXECUTÁVEL, que contém os comandos do bloco, onde valem os bindings Sintaticamente, isso requer delimitadores Exemplo BLOCK A; DECLARE ; BEGN A... { de A} - binding válido END A; 15

16 Dois tipos de binding (local e não local) em um Bloco (Exemplo) Blocos aninhados: program P; declare X; begin P... {X de P} block A; declare Y; begin A... {X de P; Y de A} block B; declare Z; begin B... {X de P; Y de A; Z de B} end B;... {X de P; Y de A} end A;... {X de P} block C; declare Z; begin C... {X de P; Z de C} end C;... {X de P} end. 34 Política do Escopo Léxico ou Estático Se um nome tem uma declaração num bloco, este nome é ligado ao objeto especificado na declaração. Se um nome não tem declaração num bloco, ele é ligado ao mesmo objeto ao qual ele foi ligado no bloco que contém o bloco atual, no texto do programa. Se o bloco não está contido em outro, ou se o nome não foi ligado no bloco que contém este, então o nome não está ligado a qualquer objeto no bloco atual

17 Regra de Escopo Quando um bloco redeclara um nome já ligado no ambiente que o contém, a declaração local se sobrepõe ao binding não-local, fazendo o objeto ligado não-localmente inacessível no bloco atual. program P; declare X, Y; begin P... {X de P; Y de P} block A; declare X, Z; begin A... {X de A; Z de A; Y de P; X de P é inacessível em A} end A... {X de P; Y de P} end P; 36 Escopo Estático X Escopo Dinâmico Escopo Dinâmico: O ambiente "global" de uma unidade (procedure) é o ambiente da unidade que a chamou. sto é, uma procedure herda como ambiente global aquele da unidade que a chamou e, portanto, este só pode ser determinado em tempo de execução. Ex: APL, SNOBOL4 e primeiras versões de LSP 37 17

18 Escopo de Binding de Locação Hipótese assumida: binding de locação feito em tempo de loading, permanecendo válido durante toda a execução do programa. Efeito colateral: ao re-executar um bloco, as variáveis locais reteriam os valores da execução anterior. Se um novo binding de locação for feito a cada nova entrada no bloco, nenhuma suposição poderia ser feita Exemplo program P declare ; begin P for := 1 to 10 do block A; declare J; begin A if = 1 then { de P; J de A} J := 1 else J := J * {assume-se que J retém valor de execução prévia} endif end A; end P 18

19 Comentários Desvantagem: memória para todos os blocos do programa deve ser reservada por todo o tempo de execução do programa. Alternativa: (binding dinâmico) Fazer o binding de locação, bem como o de nome, em tempo de execução, a cada entrada de um bloco, desfazendo esses bindings quando da saída do bloco. (Alocação dinâmica de memória). 40 Comentários Extensão do binding: período de tempo, durante execução, em que o binding é válido

20 mplementação A implementação é via registros de ativação, que são registros contendo informações sobre uma unidade de execução, necessárias para restabelecer sua execução, depois de ela ter sido suspensa. Para efeito de binding de locação, o registro de ativação precisará conter apenas as locações para todos os objetos ligados localmente, mais um ponteiro para o registro de ativação do bloco que o contém. 42 Funcionamento Conforme um bloco é ativado, seu registro é colocado no topo de uma pilha. No término de sua execução, seu registro é desempilhado

21 Exemplo 44 program P; declare, J; begin P block A; declare, K; begin A block B; declare, L; begin B;... end B;... end A; block C; declare, N; begin C... end C; end P; Comentários Pela disposição dos blocos no texto, é possível determinar o escopo sem o uso de binding dinâmico. Assim, seria desvantagem a sua utilização. Porém, normalmente utilizamos procedures e functions e só conhecemos a execução desses blocos em tempo de execução. Dessa forma, o uso de binding dinâmico é utilizado

22 Uso da pilha para localizar objetos 1. Procura no registro do topo pelo objeto ligado ao nome. 2. Se não encontrar, procure-o no registro apontado por ele; continue nesse processo até encontrá-lo na lista, ou a lista acabar. 3. Esta busca pode ser otimizada, uma vez que se sabe, em tempo de compilação, a estrutura da pilha e de cada registro de ativação. 46 EXEMPLO 47 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; P J 22

23 EXEMPLO 48 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Chamando o procedimento Proc_C Proc_C P N J EXEMPLO 49 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Chamando o procedimento Proc_B Proc_B Proc_C P L N J 23

24 EXEMPLO 50 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Chamando o procedimento Proc_A Proc_A Proc_B Proc_C P K L N J EXEMPLO 51 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Saindo do procedimento Proc_A Proc_B Proc_C P L N J 24

25 EXEMPLO 52 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Saindo do procedimento Proc_B Proc_C P N J EXEMPLO 53 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Saindo do procedimento Proc_C P J 25

26 EXEMPLO 54 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Chamando o procedimento Proc_A Proc_A P K J EXEMPLO 55 program P; declare, J; procedure Proc_A; declare, K; begin A... End A Procedure Proc_ B; declare, L; begin B;... Proc_A; end B; Procedure Proc_ C; declare, N; begin C... Proc_B; end C; begin P Proc_ C Proc_A end P; Saindo do procedimento Proc_A P J 26

27 Formato nterno de Dados O formato interno para representar um tipo inteiro depende de seu limite mínimo e máximo. Tipo ntervalo Tamanho Shortint bits Byte bits nteger bits Word bits Longint bits 56 Padrão EEE Pesquisa 57 27

Aula 6.

Aula 6. Aula 6 Celso Olivete Júnior olivete@fct.unesp.br Nomes, vinculações e escopos Cap. 5 -Sebesta 2 Introdução LP s imperativas são abstrações da arquitetura de Von Neumann Memória: armazena instruções e dados

Leia mais

Nomes, vinculações e escopos

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

Leia mais

Nomes, vinculações e escopos

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

Leia mais

Paradigmas de Programação

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

Leia mais

Nomes, Vinculações, Verificação de Tipos e Escopos. George Darmiton da Cunha Cavalcanti

Nomes, Vinculações, Verificação de Tipos e Escopos. George Darmiton da Cunha Cavalcanti Nomes, Vinculações, Verificação de Tipos e Escopos George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução Nomes Variáveis O conceito de vinculação (binding) Verificação de tipos Tipificação

Leia mais

Capítulo 5. Nomes, Vinculações e Escopos

Capítulo 5. Nomes, Vinculações e Escopos Capítulo 5 Nomes, Vinculações e Escopos Tópicos do Capítulo 5 Introdução Nomes Variáveis O conceito de vinculação Escopo Escopo e tempo de vida Ambientes de referenciamento Constantes nomeadas Introdução

Leia mais

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

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

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 06 (rogerio@fct.unesp.br) Aula 6 Subprogramas

Leia mais

O que é uma variável?

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

Leia mais

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

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

Leia mais

Linguagens de Programação Nomes, Amarrações e Escopo

Linguagens de Programação Nomes, Amarrações e Escopo Linguagens de Programação Nomes, Amarrações e Escopo Andrei Rimsa Álvares Sumário Nomes Amarrações Escopo NOMES Linguagens de Programação Nomes Conceito mais amplo que variáveis Podem representar Variáveis

Leia mais

Compiladores. Gerência de Memória

Compiladores. Gerência de Memória Compiladores Gerência de Memória Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese

Leia mais

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas?

02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre maiúsculas e minúsculas? 01. [Sebesta, 2000] Quais são as questões de projeto referentes a nomes? Nomes, Vinculações, Verificação de Tipos e Escopos 02. [Sebesta, 2000] Qual é o perigo potencial dos nomes que fazem distinção entre

Leia mais

Estudos de Linguagens de Programação - Revisão

Estudos de Linguagens de Programação - Revisão Estudos de Linguagens de Programação - Revisão (marinho.mlm@gmail.com) O que é uma Linguagem de Programação? Linguagem usada por uma pessoa para expressar um processo através do qual um computador pode

Leia mais

Linguagens de Programação Aula 11

Linguagens de Programação Aula 11 Linguagens de Programação Aula 11 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções

Leia mais

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Subprogramas Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com Paradigmas de Linguagem de Programação Características

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 07 (rogerio@prudente.unesp.br) Aula 7 Implementação

Leia mais

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

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

Leia mais

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

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

Leia mais

Implementando subprogramas

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

Leia mais

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Variáveis. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Variáveis alberto@ufs.br de Programação Departamento de Computação Universidade Federal de Sergipe Variáveis Uma vez que o programador tenha entendido o uso de variáveis, ele entendeu a essência da programação.

Leia mais

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

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

Leia mais

Implementação de subprogramas

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

Leia mais

Capítulo 9. Subprogramas

Capítulo 9. Subprogramas Capítulo 9 Subprogramas Introdução Dois recursos fundamentais de abstração Abstração de processos Desde o início da história das linguagens de programação Abstração de dados Desde o início dos anos 1980

Leia mais

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio Linguagens de Programação Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Nomes Forma mais simples de abstração Um nome é um caracter

Leia mais

Linguagens de Programação. Marco A L Barbosa

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

Leia mais

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

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

Leia mais

Paradigmas de Linguagens de Programação. Subprogramas

Paradigmas de Linguagens de Programação. Subprogramas Cristiano Lehrer Características Gerais dos Cada subprograma tem um único ponto de entrada Toda unidade de programa chamadora é suspensa durante a execução do programa chamado, o que implica na existência

Leia mais

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

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

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

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

Leia mais

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação Ederson Luiz da Silva Ciência da Computação Algoritmos e Programação Linguagem de programação Linguagem de Programação Linguagem de máquina http://www.assemblyprogressivo.net/p/curso.html Linguagem de

Leia mais

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

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

Leia mais

Paradigmas de Linguagens de Programação. Tipos de Dados

Paradigmas de Linguagens de Programação. Tipos de Dados Tipos de Dados Cristiano Lehrer Introdução (1/2) 1956: FORTRAN I 1983: ADA INTEGER, REAL, arrays. Usuário pode criar um único tipo para cada categoria de variáveis no espaço de problemas e deixar o sistema

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um

Leia mais

Capítulo 8. Estruturas de Controle no Nível de Sentença

Capítulo 8. Estruturas de Controle no Nível de Sentença Capítulo 8 Estruturas de Controle no Nível de Sentença Níveis de fluxo de controle Computações são realizadas por meio da avaliação de expressões e da atribuição dos valores a variáveis Para tornar a computação

Leia mais

Linguagens de Programação. Tipos. Carlos Bazilio

Linguagens de Programação. Tipos. Carlos Bazilio Linguagens de Programação Tipos Carlos Bazilio bazilio@ic.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Definições Tipos de dados primitivos: tipos de dados que não são definidos em termos de outros tipos

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 04 (rogerio@fct.unesp.br) Aula 4 2 Evolução dos

Leia mais

Linguagens de Programação 2 Amarrações

Linguagens de Programação 2 Amarrações Linguagens de Programação 2 Amarrações Vítor E. Silva Souza (vitor.souza@ufes.br) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo

Leia mais

Notas de Aula Guilherme Sipahi Arquitetura de Computadores

Notas de Aula Guilherme Sipahi Arquitetura de Computadores Notas de Aula Guilherme Sipahi Arquitetura de Computadores Endereçamento O Campo de endereço em uma instrução é pequeno. Para referenciar uma faixa de endereços maior na memória principal, ou em alguns

Leia mais

ao paradigma imperativo

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

Leia mais

Nomes, vinculações e escopos

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

Leia mais

Ambiente de tempo de Execução Cap. 7

Ambiente de tempo de Execução Cap. 7 Ambiente de tempo de Execução Cap. 7 Introdução Subdivisão da memória usada pelo programa em tempo de execução Segmento de Código Segmento Estático (segmento de dados) Pilha Área de memória livre Heap

Leia mais

Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site (autor: desconhecido).

Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site   (autor: desconhecido). Texto retirado e adaptado da apostila Curso de Linguagem Pascal, disponível no site http://www.portaldaprogramacao.com (autor: desconhecido). Leitura indicada: Notas de Aula de Algoritmos e Programação

Leia mais

INE5421 LINGUAGENS FORMAIS E COMPILADORES

INE5421 LINGUAGENS FORMAIS E COMPILADORES INE5421 LINGUAGENS FORMAIS E COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer a teoria das linguagens formais visando sua aplicação na especificação de linguagens de programação e na construção de

Leia mais

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

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

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe Persistência alberto@ufs.br de Programação Departamento de Computação Universidade Federal de Sergipe Retrospectiva Quanto ao Tempo de Vida Variáveis Estáticas Variáveis Stack-Dinâmicas Variáveis Heap-Dinâmicas

Leia mais

Compiladores. Análise Semântica

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

Leia mais

Linguagens de Programação Subprogramas

Linguagens de Programação Subprogramas Linguagens de Programação Subprogramas Andrei Rimsa Álvares Sumário Abstrações Subprogramas Parâmetros Passagem de parâmetros Direção da passagem Mecanismos de passagem Momento da passagem ABSTRAÇÕES Linguagens

Leia mais

25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de

25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de Arquitetura de Computadores Conjuntos de Instruções: modos de endereçamento e formatos Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Endereçamento Normalmente, os campos de endereço são

Leia mais

- Mapa de memória de um processo - Ponteiros

- Mapa de memória de um processo - Ponteiros 1 MCTA028 Programação Estruturada - Mapa de memória de um processo - Ponteiros Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti Luiz Rozante 3Q-2018 2 Alocação de

Leia mais

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação Aula 03 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga

Leia mais

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências

Leia mais

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

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

Leia mais

02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?

02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais? 01. [Sebesta, 2000] O que é um descritor? 02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais? 03. [Sebesta, 2000] Quais são as questões de projeto relativas aos tipos

Leia mais

FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO

FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO FERRAMENTAS BÁSICAS DA PROGRAMAÇÃO VARIÁVEIS E O COMANDO DE ATRIBUIÇÃO O computador possui uma área específica de armazenamento denominada de memória. O computador possui uma área específica de armazenamento

Leia mais

PLANO DE UNIDADE DIDÁTICA- PUD

PLANO DE UNIDADE DIDÁTICA- PUD Professor: Marcus Vinícius Midena Ramos Coordenação: Ricardo Argenton Ramos Data: 03/08/2010 Página: 1 de 5 EMENTA: Conceitos básicos de linguagens. Histórico, classificação e principais aplicações de

Leia mais

Aula teórica 7. Preparado por eng.tatiana Kovalenko

Aula teórica 7. Preparado por eng.tatiana Kovalenko Aula teórica 7 Tema 7. Introdução a Programação Ø Linguagens de Programação Ø LP Java ØEstrutura de um programa em Java ØIdentificadores, variáveis e constantes. ØTipos de dados básicos Preparado por eng.tatiana

Leia mais

Linguagens de Programação Classificação

Linguagens de Programação Classificação Classificação Classificação A proximidade que a linguagem de programação tem com a humana determina sua classe (o nível): Linguagem de máquina (primeira geração) Linguagem assembly - de montagem (segunda

Leia mais

FACULDADE LEÃO SAMPAIO

FACULDADE LEÃO SAMPAIO FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS

Leia mais

Introdução à Ciência da Computação

Introdução à Ciência da Computação Introdução à Ciência da Computação Variáveis Conceitos Básicos Variáveis x Constantes a = x + 5 a, x e 5 são variáveis ou constantes? Variáveis As variáveis são recipientes de valores É um espaço reservado

Leia mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

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

Leia mais

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível. Aula 3 SOFTWARE (programas) Um programa (software) consiste em uma sequência de instruções escritas numa linguagem precisa chamada linguagem de programação. Estas instruções são traduzidas em um compilador,

Leia mais

CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO

CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO ROTEIRO 1. INTRODUÇÃO 2. LINGUAGENS IMPERATIVAS 1. CONCEITO 2. PARADIGMA IMPERATIVO 3. ORIGENS 4. MODELO COMPUTACIONAL 1. ARQUITETURA DE VON NEUMANN 2. CARACTERISTICAS

Leia mais

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

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

Leia mais

1.1 o que é um algoritmo... 6

1.1 o que é um algoritmo... 6 sumário introdução 1 1 fundamentos 5 1.1 o que é um algoritmo... 6 1.1.1 algoritmos executados por um computador...7 1.1.2 comandos básicos executados por um computador...11 1.1.3 da necessidade do desenvolvimento

Leia mais

Linguagens de Programação Conceitos e Técnicas. Variáveis e Constantes

Linguagens de Programação Conceitos e Técnicas. Variáveis e Constantes Linguagens de Programação Conceitos e Técnicas Variáveis e Constantes Variáveis Uma vez que o programador tenha entendido o uso de variáveis, ele entendeu a essência da programação. [Dijkstra] Abstração

Leia mais

Erros de Tipo em Pascal Simplifificado

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

Leia mais

Estrutura de Dados. Aula 07 Alocação Dinâmica

Estrutura de Dados. Aula 07 Alocação Dinâmica Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).

Leia mais

Introdução. Paradigmas de Linguagens. Introdução. Tipos de Dados Primitivos. Prof. Ms. Luiz Alberto Contato:

Introdução. Paradigmas de Linguagens. Introdução. Tipos de Dados Primitivos. Prof. Ms. Luiz Alberto Contato: Paradigmas de Linguagens Prof. Ms. Luiz Alberto Contato: lasf.bel@gmail.com Baseada no material do prof. Celso Olivete Júnior Introdução Um tipo de dado define uma coleção de dados e um conjunto de operações

Leia mais

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

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

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada

Leia mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programação I A Linguagem C. Prof. Carlos Alberto Programação I A Linguagem C Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada

Leia mais

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

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

Leia mais

Linguagens de Programação

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

Leia mais

Programação II. Aula 1

Programação II. Aula 1 Programação II Aula 1 Ponteiros Variáveis Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta Vinculação -> Por meio de ponteiros

Leia mais

Estruturas de Controle: Nível de Unidades de Programação

Estruturas de Controle: Nível de Unidades de Programação Paradigmas de Linguagens I 1 1.5... Estruturas de Controle: Nível de Unidades de Programação As estruturas de controle no nível de unidades de programação são mecanismos de linguagens utilizados para especificar

Leia mais

Puca Huachi Vaz Penna

Puca Huachi Vaz Penna Aula 3 C++: variáveis e expressões aritméticas 2017/1 BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66, 32 e 33 Puca Huachi Vaz Penna Departamento de Computação Universidade Federal de Ouro

Leia mais

Prof. Franklin Ramalho

Prof. Franklin Ramalho PLP - Armazenamento (Parte I) Prof. Franklin Ramalho Universidade Federal de Campina Grande - UFCG Agenda - Variáveis Primitivas - Variáveis Compostas - Modelo de Armazenamento - Ciclo de vida de variáveis

Leia mais

Linguagens de Programação Aula 8

Linguagens de Programação Aula 8 Linguagens de Programação Aula 8 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Os tipos de dados de uma linguagem são uma grande parte do que determina o estilo e a utilidade de uma linguagem

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

6 Alguns conceitos e comandos em programação

6 Alguns conceitos e comandos em programação 6 Alguns conceitos e comandos em programação 6.1 Diretivas Diretivas são instruções que permitem ao programador efetuar algum tipo de modificação à compilação, sendo analisadas e executadas pelo pré-compilador,

Leia mais

Linguagens de Programação. Introdução. Carlos Bazilio

Linguagens de Programação. Introdução. Carlos Bazilio Linguagens de Programação Introdução Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp ??? Pascal aux := 0 for i:=1 to 10 do aux := aux + i 10: i = 1 20: if i > 10 goto 60

Leia mais

Compiladores Análise de Tipos

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

Leia mais

Paradigmas de Linguagens

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

Leia mais

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos Tipos de Dados Abstratos Cristiano Lehrer Conceito de Abstração O conceito de abstração é fundamental em programação. Quase todas as linguagens suportam abstração de processos, através de subprogramas:

Leia mais

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Conceitos de Linguagens de Programação - Características. Paavo Soeiro Conceitos de Linguagens de Programação - Características Paavo Soeiro Motivação Para que possa escolher uma linguagem apropriada ao problema. Melhorar o entendimento da linguagem utilizada. Facilitar o

Leia mais

4. Constantes. Constantes pré-definidas

4. Constantes. Constantes pré-definidas 4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Sintaxe e semântica Aula 4 Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Sintaxe A sintaxe de uma linguagem de programação é a forma

Leia mais

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

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

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Prof a Jerusa Marchi Departamento de Informática e Estatística Universidade Federal de Santa Catarina e-mail: jerusa@inf.ufsc.br Linguagens de Programação p. 1/5 Linguagens de

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Expressões Precedência e associatividade de operador Sobrecarga de operador Expressões de modo misto Várias formas de

Leia mais

Tipos de Dados. George Darmiton da Cunha Cavalcanti

Tipos de Dados. George Darmiton da Cunha Cavalcanti Tipos de Dados George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução Tipos de Dados Primitivos Tipos Cadeia de Caracteres Tipos Definidos pelo Usuário Tipos Matriz Matrizes Associativas

Leia mais

Ambientes de Execução

Ambientes de Execução Ambientes de Execução Organização da memória Ambientes totalmente estáticos, baseados em pilhas e totalmente dinâmicos Passagem de parâmetros Prof. Thiago A. S. Pardo 1 Ambientes de execução na estrutura

Leia mais

Ambientes de Execução

Ambientes de Execução Ambientes de execução na estrutura do compilador programa-fonte Ambientes de Execução Tabela de símbolos analisador léxico analisador sintático Organização da memória Ambientes totalmente estáticos, baseados

Leia mais

Capítulo 1. Aspectos Preliminares

Capítulo 1. Aspectos Preliminares Capítulo 1 Aspectos Preliminares Tópicos do Capítulo 1 Razões para estudar conceitos de linguagens de programação Domínios de programação Critérios de avaliação de linguagens Influências no projeto de

Leia mais

16. Compilação no Linux

16. Compilação no Linux 16. Compilação no Linux 16.1 Compilador X Interpretador Um código fonte pode ser compilado ou interpretado. Compiladores e interpretadores tratam o código de maneira diferente. Interpretador: Lê o código

Leia mais