Upload
vodieu
View
223
Download
1
Embed Size (px)
Citation preview
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
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
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
T02 Fundamentos de Linguagens
Tabela ASCII de símbolosASCII - American Standard Code for Information Interchange
T02 Fundamentos de Linguagens
Tabela ASCII de símbolos: códigos adicionaisASCII - American Standard Code for Information Interchange
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);
}
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
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
T02 Fundamentos de Linguagens
Léxico
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.
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.
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);}
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
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)
T02 Fundamentos de Linguagens
Gramática
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:
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)
--
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
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
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
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
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
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
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
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
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
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
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
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
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
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
T02 Fundamentos de Linguagens
Modelos de Programação
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.
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);
}
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.
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