36
Programação Engenharia Informática (13205) – 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) – 1º ano, 1º semestre Cap. 02 – Fundamentos de Linguagens

Fundamentos de Linguagens

  • Upload
    vodieu

  • View
    221

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Fundamentos de Linguagens

ProgramaçãoEngenharia Informática (13205) – 1º ano, 1º semestre

Tecnologias e Sistemas de Informação (6619) – 1º ano, 1º semestre

Cap. 02 – Fundamentos de Linguagens

Page 2: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Sumário

…:

– Linguagem, alfabeto e gramática

– Tabela ASCII

– Componentes de uma linguagem: léxico, sintaxe e semântica

– Entidades: nomes/identificadores, operadores e literais

– Termos, expressões e tipos de expressões

– Instruções e tipos de instruções

– Instrução de bloco

– Instrução de atribuição

– Variáveis e declarações de variáveis

– Constantes e declarações de constantes

– Tipos de dados básicos: char, int, float e double

– Modelos de programação

– Princípio fundamental da programação imperativa

Page 3: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Linguagens de programação

– Programas são escritos numa linguagem de programação.

– Linguagem de programação

§ Alfabeto§ Gramática

– Alfabetos:

§ {0,1} : linguagem máquina (ling. baixo-nível)

§ código ASCII : Pascal, C, Java, etc. (linguagens de alto-nível)

§ A .. Z : Português, Inglês, Espanhol, etc.

– Gramática: diagramas de sintaxe

Page 4: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Tabela ASCII de símbolosASCII - American Standard Code for Information Interchange

Page 5: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Tabela ASCII de símbolos: códigos adicionaisASCII - American Standard Code for Information Interchange

Page 6: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Formatos de saída de dados

#include <stdio.h>int main(){int x;x = 10;printf(“O valor de y=%d\n”,x);

}

#include <stdio.h>int main(){int x;x = 10;printf(“O valor de y=%o\n”,x);

}

#include <stdio.h>int main(){int x;x = 10;printf(“O valor de y=%h\n”,x);

}

Page 7: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Alfabeto (em C)

- O conjunto básico de caracteres gráficos da linguagem C é o seguinte:

Forma Membrosletra A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z

dígito 0 1 2 3 4 5 6 7 8 9

underscore _

Pontuação ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ { | } ~

http://www-ccs.ucsd.edu/c/charset.html

Page 8: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Componentes de uma linguagem

- Léxico: conjunto de palavras duma linguagem, i.e. o dicionário.

- Sintaxe: conjunto de regras de construção das frases dum texto, i.e. a gramática. Estas frases são designadas por instruções e o texto é designado por programa.

- Semântica: é o significado de cada instrução dum programa ou mesmo dum do programa completo.

http://www.d.umn.edu/~gshute/asm/grammar.html

Page 9: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Léxico

Page 10: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Palavras reservadas

- A linguagem C tem um conjunto de palavras reservadas, entre as quais:

auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

- Não podem ser usadas a não ser para aqueles fins pré-definidos; por exemplo, não podem ser usadas como nomes de variáveis.

- A tentativa de utilização para outros fins tem resulta numa série de erros de compilação.

Page 11: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Nomes de funções de bibliotecas (libm)

- A biblioteca matemática libm.a tem um conjunto de funções, entre as quais:

cos acos floor sin asin

tan atan tanh ceil log

pow log10 fabs sqrt sinh

- Embora não sejam palavras reservadas, não devemos usá-las para outros fins, pois isso pode gerar conflitos de nomes.

- A tentativa de utilização para outros fins pode ter como consequência uma série de erros de compilação.

Page 12: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Exemplo de utilização de funções matemáticas

#include <stdio.h>#include <math.h>int main(){float x,y;

printf("Introduza o valor de um angulo em graus:\n");scanf("%f",&x);

y = cosf(x*M_PI/180);

printf("O valor do coseno de %f = %f\n",x,y);}

Page 13: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Classificação de nomes/identificadores

- Há 3 classes de nomes ou identificadores:

Não podem ser redefinidos Palavras reservadas

Identificadores estandardizados(p.ex., nomes de funções matemáticas)

Identificadores definidos pelo utilizador

(p.ex., nomes de variáveis)

Podem ser redefinidos, mas não é conveniente

Page 14: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Entidades e expressões

- Entidades:

§ identificadores ou nomes (de variáveis, constantes e funções)

§ operadores (adição, subtracção, atribuição, …)

§ literais

- Expressões:

§ É uma construção sintáctica que tem um valor.

§ É uma combinação de entidades que representa o cálculo dum valor.

- Tipos de expressões:

§ expressão numérica (resultado numérico)

§ expressão lógica (resultado lógico)

§ expressão simbólica (resultado simbólico)

Page 15: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Gramática

Page 16: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Nomes/identificadores

- As regras de formação de nomes/identificadores são as seguintes:

§ Diferenciação gráfica (maiúsculas e minúsculas)

§ Tamanho variável (ANSI C limitado a 31 caracteres)

§ Validade (carácter inicial é : a..z, A..Z, _ )

• nomes válidos: j, j5, _5A• nomes inválidos: 5j, j5%, const

Diagrama de sintaxe:

Page 17: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Operadores

- Escrita de dados em memória (operador de ATRIBUIÇÃO)

=

- Cálculo de inteiros e/ou reais (operadores ARITMÉTICOS)

+, -, *, /

- Cálculo de valores lógicos (falso/verdadeiro) (operadores LÓGICOS)

&&, II, !

- Cálculo de valores lógicos (falso/verdadeiro) (operadores RELACIONAIS)

<, <=, >, >=, !=, ==

- Incrementa valor de variável inteira de 1 unidade (operador de INCREMENTAÇÃO)

++

- Decrementa valor de variável inteira de 1 unidade (operador de DECREMENTAÇÃO)

--

Page 18: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Literais

Definição:

– Uma entidade sem nome que representa um valor constante.

Exemplos:

– “XYZ123” é um literal string

– ‘g’ é um literal carácter

– 1234 é um literal inteiro

– 3.78 é um literal real

– 6/10/57 é um literal data

Page 19: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Literais inteiros

- O valor da constante depende da sua forma inicial:

§ 0x ou 0X indica um inteiro hexadecimal (base 16);

§ 0 indica um inteiro octal (base 8);

§ um dígito não-nulo indica um inteiro decimal (base 10).

- No final do literal, como opção, escreve-se o sufixo l ou L para indicar que é do tipo long, ou o sufixo u ou U para indicar que é do tipo unsigned

Diagrama de sintaxe:

http://www-ccs.ucsd.edu/c/syntax.html

Page 20: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Termos

- Um termo é uma das seguintes entidades:

§ um nome ( de variável numérica ou função que devolve um valor numérico)

§ um literal

§ o operador sizeof

§ uma expressão-entre-parênteses

Diagrama de sintaxe:

http://www.d.umn.edu/~gshute/asm/grammar.html

Page 21: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Expressões

Diagrama de sintaxe:

Exemplos:– 5 (literal inteiro)

– num (nome de variável)

– 5+num (adição de literal e valor de variável)

– square(5) (chamada a função com argumento literal)

– square(5)/2 (divisão do valor duma função por dois)

– a && b || c (devolve um valor lógico)

– getchar() (chamada a função que devolve um valor char)

– !a (nega valor lógico de variável)

– num++ (incrementa valor de variável)

Definição: Uma expressão é uma sequência de um ou mais termos separados por operadores infixo. Cada termo é precedido por zero ou mais operadores prefixos. Cada termo é seguido por zero ou mais operadores pósfixos.

http://www.d.umn.edu/~gshute/asm/grammar.html

Page 22: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Instruções

Diagrama de sintaxe:

Exemplos:– printf("hello\n"); // chamada a função

– y = m * x + b; // armazena valor

– ++count; // altera valor armazenado

http://www.d.umn.edu/~gshute/asm/grammar.html

Page 23: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Sumário até agora:

- PROGRAMA = sequência de INSTRUÇÕES

- INSTRUÇÃO = EXPRESSÃO seguida de ponto e vírgula

- EXPRESSÃO = sequência de TERMOS separados por operadores infixo

- TERMO = é uma das seguintes entidades:

§ um nome ( de variável numérica ou função que devolve um valor numérico)

§ um literal

§ o operador sizeof

§ uma expressão-entre-parênteses

Page 24: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Tipos de instruções

- Uma instrução é uma das seguintes entidades:

§ uma instrução-bloco

§ uma instrução-de-atribuição

§ uma instrução-if

§ uma instrução-while

§ uma instrução-for

§ uma instrução-switch

§ uma instrução-break

§ uma instrução-continue

§ uma instrução-return

A estudar em capítulos posteriores!

http://www.d.umn.edu/~gshute/asm/grammar.html

Page 25: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Instrução de bloco

Diagrama de sintaxe:

Exemplo:

Definição: É uma sequência de (declarações e) instruções entre { e }.

#include <stdio.h>int main(){float y;

y=5.4;printf(“O valor de y=%f\n”,y);

}

instrução-bloco

Page 26: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Instrução de atribuição

Diagrama de sintaxe:

Exemplo:

Definição: É uma instrução que atribui um valor a uma variável em memória.

name expression= ;

#include <stdio.h>int main(){int x;float y;

printf(“Escreva um valor inteiro: ”);scanf(“%d”,&x);y=x+5.4;printf(“O valor de y=%f\n”,y);

}

instrução-atribuição

Page 27: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Variável

- Têm nome e valor.

- À semelhança das variáveis em matemática, uma variável não tem valor constante.

- Pode mudar de valor através duma instrução de atribuição.

Definição: É um local de memória onde se guarda um dado específico.

#include <stdio.h>int main(){int x;x=12;...

}

x

valor de x

0000000000001100

memória

Page 28: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Declaração de variáveis

Diagrama de sintaxe:

Exemplo:

#include <stdio.h>int main(){int x;x=12;...

}

type name ;

declaração-de-variável

Page 29: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Declaração de variáveis

Bytes em memória Formato de E/S

Inteiros

char 1 byte %c

int 2 bytes %d ou %i

Reais

float 4 bytes %f

double 8 bytes %f

00000000 0000000000000000 00001100

4 bytes (octetos) = 4 x 8 bits

Page 30: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Constante

- Também tem nome e valor.

- À semelhança das constantes em matemática, uma constante tem valor fixo e imutável.

Definição: É também um local de memória onde se guarda um dado específico.

#include <stdio.h>int main(){const int i=10;...

}

i

valor de i

0000000000001010

memória

Page 31: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Declaração de constantes

Diagrama de sintaxe:

Exemplo:

#include <stdio.h>int main(){const int i=10;...

}

declaração-de-constante

type name =const ;literal

Page 32: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Modelos de Programação

Page 33: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Modelos de programação

Programação imperativa

– C, Pascal, Fortran, …

Programação funcional

– Haskel, Lisp, Scheme, …

Programação em lógica

– Prolog, …

Programação orientada por objectos

– C++, Java, Smaltalk, Objective-C, C#, Logtalk, …

Programação baseada em eventos- Não há linguagens específicas … é mais uma forma de programar aplicações.

etc.

Page 34: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Programação imperativa

Dados

– Simples (int, float, char, double)

– Compostos (array, struct, file)

Funções/operadores

printfyx

+

scanf

=printf

5.4

#include <stdio.h>int main(){int x;float y;

printf(“Escreva um valor inteiro: ”);scanf(“%d”,&x);y=x+5.4;printf(“O valor de y=%f\n”,y);

}

Page 35: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Princípio fundamental da programação imperativa

- A reserva de memória para dados é feita através da declaração de variáveis. Exemplo:

int j;

- O porquê do modelo centralizado de dados? O conjunto de todas as variáveis declaradas num programa não é mais do que o repositório central de dados que é manipulado pelas funções e operações usadas dentro do programa.

- Princípio fundamental da programação imperativa:

- Nenhuma variável, constante ou função pode ser utilizada num programa sem ter sido previamente declarada.

Page 36: Fundamentos de Linguagens

T02 Fundamentos de Linguagens

Conclusão

…:

– Linguagem, alfabeto e gramática

– Tabela ASCII

– Componentes de uma linguagem: léxico, sintaxe e semântica

– Entidades: nomes/identificadores, operadores e literais

– Termos, expressões e tipos de expressões

– Instruções e tipos de instruções

– Instrução de bloco

– Instrução de atribuição

– Variáveis e declarações de variáveis

– Constantes e declarações de constantes

– Tipos de dados básicos: char, int, float e double

– Modelos de programação

– Princípio fundamental da programação imperativaFIM