Prof. Dr.
Abel Gomes
(agomes@[Link])
Cap.2:
Fundamentos de Linguagens e
Modelos de Programação
Sumário:
Linguagens de programação
Modelos de programação
1
Linguagens de programação
2
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
3
Tabela ASCII ASCII - American Standard Code for Information Interchange
4
ASCII - American Standard Code for Information Interchange
Tabela ASCII: códigos
adicionais
5
[Link]
Alfabeto:
linguagem C
O conjunto básico de caracteres gráficos da linguagem C
é o seguinte:
Forma Membros
letra 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 ! " # % & ' ( ) * + , - . / : ;
< = > ? [ \ ] ^ { | } ~
6
[Link]
Componentes duma
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.
7
Léxico:
palavras reservadas
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Não podem ser usadas a não ser para aqueles fins que foram
definidos; por exemplo, não podem ser usadas como nomes de
variáveis.
A tentativa de utilização para outros fins tem como consequência
uma série de erros de compilação.
8
Léxico:
nomes de funções da libc.a
abort clock getenv rand srand
abs close labs read strcmp
atof div malloc remove strcpy
atoi exit open rename system
atol free printf scanf time
calloc getchar putchar signal write
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.
9
Léxico:
nomes de funções da libm.a
acos cos floor sin tanh
asin cosh log sinh
atan exp log10 sqrt
ceil fabs pow tan
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.
10
Gramática:
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)
11
Gramática: taxonomia
de nomes ou identificadores
Há 3 classes de identificadores:
Identificadores definidos pelo
utilizador
Podem ser redefinidos, Identificadores estandardizados
mas não é conveniente
Não podem ser redefinidos Palavras reservadas
12
Gramática:
nomes/identificadores em C
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
13
Gramática:
nomes/identificadores em C
Diagrama de sintaxe:
14
Gramática:
operadores em C
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 --
15
Gramática:
literais em C
Definição:
Uma entidade sem nome que representa um valor constante.
Exemplos em C:
“XYZ123” é um literal string
‘g’ é um literal carácter
1234 é um literal inteiro
3.78 é um literal real
6/10/57 é um literal data
16
[Link]
Gramática:
literais inteiros em C
Diagrama de sintaxe:
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
17
[Link]
Gramática:
expressões em C
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.
18
[Link]
Gramática:
expressões em C
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-parentisada
19
Expressões:
exemplos em C
Exemplos de expressões em C:
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 dum 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)
20
[Link]
Gramática:
Instruções em C
Diagrama de sintaxe:
Exemplos em C:
printf("hello\n"); // chamada a função
y = m * x + b; // armazena valor
++count; // altera valor armazenado
21
[Link]
Gramática:
Tipos de instruções em C
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 A estudar em capítulos posteriores!
– uma instrução-break
– uma instrução-continue
– uma instrução-return
22
[Link]
Gramática:
Instrução-bloco em C
Instrução-bloco
- É uma sequência de (declarações e) instruções entre { e }
Diagrama de sintaxe:
#include <stdio.h>
int main()
{
float y;
y=5.4;
printf(“O valor de y=%f\n”,y); instrução-bloco
}
23
Gramática:
Instrução-de-atribuição em C
Instrução-de-atribuição tem a seguinte forma sintáctica:
identificador-de-variável = expressão
Diagrama de sintaxe:
name = expression ;
#include <stdio.h>
int main()
{
int x;
instrução-atribuição
float y;
printf(“Escreva um valor inteiro: ”);
scanf(“%d”,&x);
y=x+5.4;
printf(“O valor de y=%f\n”,y);
}
24
Variável
É um local de memória onde se guarda um dado específico.
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.
memória
#include <stdio.h>
int main() valor de x
{
int x;
x=12; x 00000000
...
}
00001100
25
Gramática:
Declaração de variáveis em C
declaração-de-variável tem a seguinte forma sintáctica (simplificada):
identificador-de-tipo identificador-de-variável
Diagrama de sintaxe:
type name ;
declaração-de-variável
#include <stdio.h>
int main()
{
int x;
x=12;
...
}
26
Tipos de dados básicos em C
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 00000000 00000000 00001100
4 bytes (octectos) = 4 × 8 bits 27
Constante
Também é um local de memória onde se guarda um dado específico.
Também tem um nome e um valor.
À semelhança das constantes em matemática, uma constante tem valor
fixo ou imutável.
memória
#include <stdio.h>
int main() valor de i
{
const int i=10;
... i 00000000
}
00001010
28
Gramática:
Instruções em C
declaração-de-constante tem a seguinte forma sintáctica:
const identificador-de-tipo identificador-de-variável = literal
Diagrama de sintaxe:
const type name = literal ;
declaração-de-constante
#include <stdio.h>
int main()
{
const int i=10;
...
}
29
Modelos de programação
30
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.
31
Programação imperativa: Computador
modelo centralizado de dados
ex1.c
Dados #include <stdio.h>
• simples (int, float,…) int main()
{
• compostos (array, struct,…) int x;
Funções (Operadores) float y;
printf(“Escreva um valor inteiro: ”);
scanf(“%d”,&x);
y=x+5.4;
printf(“O valor de y=%f\n”,y);
}
printf
x y
5.4
scanf
printf
+ =
32
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.
33 FIM