Linguagens de Programação

Documentos relacionados
Introdução à Programação

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

Revisão: linguagens de programação

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

Paradigmas de Programação

Linguagens de Programação Aula 3

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Capítulo 1. Aspectos Preliminares

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Programação I Apresentação

5. Expressões aritméticas

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

CONCEITOS DE ALGORITMOS

Como construir um compilador utilizando ferramentas Java

Paradigmas de Programação

TÉCNICO EM MANUTENÇÃO E SUPORTE EM INFORMÁTICA FORMA SUBSEQUENTE. Professora: Isabela C. Damke

Lógica de Programação I. Gilson de Souza Carvalho

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Introdução a Programação. Curso: Sistemas de Informação Programação I José R. Merlin

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Autômatos e Linguagens

Algoritmo e Programação Matemática

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

Fundamentos de Algoritmos (5175/31)

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

3. Linguagem de Programação C

Conceitos de Linguagens de Programação

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Métodos para a construção de algoritmo

Conceitos Básicos de Algoritmos

Conceitos Básicos de Programação

Português Estruturado

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

Linguagem de programação: Pascal

Pseudolinguagem. BC0501 Linguagens de Programação t2 Aula 11. Prof. Alysson Ferrari ufabc.edu.br

Introdução à Programação de Computadores Fabricação Mecânica

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Paradigmas de Linguagens

Variáveis primitivas e Controle de fluxo

Projeto de Algoritmos

MODELAGEM DE SISTEMAS. Introdução a Computação e Engenharia de Software. Profa. Cynthia Pinheiro

Introdução a Computação

Conceitos básicos de algoritmos

PROGRAMAÇÃO I. Introdução

Python - Variáveis e expressões

Ambiente de desenvolvimento

Processamento de Dados aplicado à Geociências. AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Linguagens de Programação Funcional

Prof. Adriano Maranhão COMPILADORES

INFORMÁTICA APLICADA AULA 03 ALGORITMOS

Programação de Computadores:

Algoritmos Computacionais

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

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

Construção de Compiladores

Fundamentos de Programação

Tratamento dos Erros de Sintaxe. Adriano Maranhão

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Compiladores. Conceitos Básicos

UNIDADE 2 ALGORITMOS E PSEUDOCÓDIGO

Noções de algoritmos - Aula 1

Conceitos Básicos Linguagem C

Linguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Linguagem de Descrição de algoritmos

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Programação: Vetores

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

ao paradigma imperativo

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Algoritmos e Programação

Variável. Expressões. Atribuição. Tipos básicos Declaração. Aritméticas Lógicas. Professor Leandro Augusto Frata Fernandes

Compiladores. Introdução à Compiladores

Apostila de Fortran. É uma pseudo-linguagem a qual oferece recursos para que o programador possa codificar e testar os seus algoritmos.

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

IV.2 Aspectos Léxicos Convencionais

Conceitos de Linguagens de Programação

ESTRUTURA CONDICIONAL E SELEÇÃO

Linguagens de Programação

Transcrição:

45 Linguagens de Programação O paradigma de programação imperativo está diretamente atrelado à arquitetura básica dos computadores sobre os quais os programas eram executados. Boa parte dos computadores mais populares nos últimos anos foi projetada com base na arquitetura proposta por von Neumann. Onde dados e programas são armazenados na mesma memória. A unidade central de processamento (UCP), que executa realmente as instruções, é separada da memória.

Esta característica faz com que os dados e instruções devam ser transferidos (canalizados-piped) entre a memória e a UCP. 46 Devido à arquitetura de von Neumann os recursos centrais das linguagem imperativas são: - as variáveis, as quais modelam as células de memória;

47 - as instruções de atribuição, baseadas na operações de canalização; - e a forma iterativa de repetição, o método mais eficiente desta arquitetura. A iteração é rápida nos computadores de von Neumann porque as instruções são armazenadas em células adjacentes na memória.

48 Linguagens de Programação Por fim, podemos associar o nome dado ao paradigma, ou seja, imperativo, como o tempo verbal imperativo. Pois, o programador instruirá o computador da seguinte forma: - faça isso; - depois isso; - depois aquilo... Este paradigma destaca-se pela simplicidade, já que o ser humano, também baseia-se na ideia de ações e estados ao planejar as ações que irá executar.

Outro paradigma de programação que comentaremos é o funcional, onde o principal meio de fazer computações é aplicando funções a determinados parâmetros. Ou seja, neste paradigma, basicamente trata-se a computação como uma avaliação de funções matemáticas. Considerando que uma função pode ou não ter parâmetros (valores de entrada) e gerará uma saída. 49

50 Linguagens de Programação Com a evolução da programação, o foco, anteriormente voltado para a arquitetura agora volta-se para os dados. Fomentando o surgimento do paradigma de programação orientado a objetos. Onde não coloca-se em voga as funcionalidades do programa em desenvolvimento e sim as categorias de dados a serem manipulados (as classes que dão origem a objetos). A metodologia orientada a objeto inicia-se com a abstração de dados.

51 Linguagens de Programação A abstração de dados trata-se de encapsular os dados por meio de procedimentos (métodos) que controlaram a acesso a estes. Adiciona-se também o conceito de herança e outras características. Herança é um conceito poderoso que potencializa a reutilização de código. O desenvolvimento da programação orientada a objeto se deu em paralelo com a linguagem que suportou seus conceitos a Smaltalk. (Hoje suportados em C++, Java, etc.)

52 Linguagens de Programação O paradigma de programação lógico é um paradigma baseado em regras. Em uma linguagem imperativa, um algoritmo é especificado com grandes detalhes, e a ordem de execução específica das instruções ou dos comandos deve ser incluída. Em uma linguagem baseada em regras, estas são especificadas sem nenhuma ordem particular, e o sistema de implementação deve escolher uma ordem de execução que produza o resultado desejado.

Essa abordagem ao desenvolvimento de software é radicalmente diferente daquelas utilizadas nos outros paradigmas vistos, e, evidentemente, exige um tipo de linguagem completamente diferente. O Prolog é a mais popular linguagem de programação lógica utilizada. 53

MÉTODOS FORMAIS X INFORMAIS O formalismo está associado à especificação de uma estrutura rígida e de um conjunto de regras coeso, que visam dotar o método formal da capacidade de nortear a construção de algoritmos. Métodos informais por sua vez denotam a inexistência das características associadas ao formalismo. Um exemplo é linguagem natural. 54

Associados aos métodos formais temos a sintaxe e a semântica. Veremos agora alguns elemento relacionados com a sintaxe de uma linguagem de programação. conjunto de caracteres são os constituintes mais simples de uma linguagem de programação. a partir dele todas as sentenças programas são construídas, seguindo-se regras da gramática da linguagem. Normalmente (caracteres alfabéticos, dígitos decimais e um conjunto variável de caracteres especiais). 55 * Os conceitos apresentados relacionados a especificação de linguagens de programação baseiam-se na apostila sobre Linguagens de Programação elaborada pelo prof. Celso Rodrigues da Fundação Universidade Federal do Rio Grande.

identificadores - sequências de caracteres usadas para se dar nomes aos objetos do usuário (ou mesmo pré-definidos) como variáveis, constantes, arquivos, tipos de dados, etc. operadores - símbolos especiais para certas operações (do tipo função). Em geral recaem numa das classes: Aritméticos Ex.: + - * / relacionais Ex.: > < = <= >=!= lógicos Não-numéricos Ex.:? Ex.: &&! (AND OR NOT) 56

palavras-chaves ou palavras-reservadas - são as partes fixas de uma construção sintática qualquer, na forma de sequência de caracteres. Estas não podem ser usadas como identificadores. Exemplos: IF ELSE FOR delimitadores - elementos usados para marcar o início ou o fim de uma construção sintática. Podem ser palavras-chaves, mas em geral são caracteres especiais. Exemplos: ; { 57

chaves sintáticas - pares de delimitadores conjugados, ou seja: um sempre aparece acompanhado do outro. Servem basicamente para facilitar o processo de análise sintática por parte do processador da linguagem, uma vez que marcam explicitamente o alcance de uma construção, diminuindo as oportunidades de ambiguidade no significado dos programas. Pelo mesmo motivo, cada vez mais se reconhece sua influência positiva na legibilidade. 58

Exemplos de chaves sintáticas: na linguagem C: {... } em Pascal: begin... end repeat... until expressões - combinações de identificadores e operadores especificando uma operação mais complexa. Admitem formas diversas de construção, conforme sejam os operadores. Dois aspectos importantes dos operadores influem no formato das expressões: aridade e o modo. 59

60 a aridade - é o número de operandos (argumentos) de um operador. Exemplo: + (soma) A1 + A2 - (troca de sinal) -X modo ou posição relativa: os operadores podem estar num ou noutro modo, conforme sua posição em relação a seus operandos. Tais modos são: infixado = operador entre os operandos pré-fixado = operador antes dos operandos pós-fixado = operador depois dos operandos Nos exemplos abaixo, as expressões estão escritas nos três modos: MODO EXPRESSÃO 1 EXPRESSÃO 2 infixado Al + A2 (A + E) * C pré-fixado + Al A2 * + A B C pós-fixado Al A2 + A E + C *

Uma hipótese adicional é ter um operador intermixado. Nesse caso, o operador é composto de mais de um símbolo, devendo se misturar aos operandos. Um exemplo disto é o operador?: da linguagem C. comandos - combinações de expressões e palavras-chaves. Estas palavras-chaves representam operadores especiais que agem sobre o estado interno da máquina. (principalmente modificando valores de variáveis). 61

Os comandos são as construções mais centrais das linguagens de programação tradicionais (imperativas). Sua sintaxe influi na redigibilidade e na legibilidade da linguagem. 62

declarações - combinações de palavras-chaves e identificadores. As declarações visam estabelecer conjuntos de informações necessárias para a execução do programa. Elas produzem o que se denomina amarração (ou associação) entre as diversas entidades do programa (variáveis, constantes, funções, tipos, etc.) e seus atributos, entre estes o seu nome (representado por um identificador). Exemplo na linguagem C: int x=0; 63

comentários - trechos explicitamente marcados pelo programador para serem desconsiderados pelo processador. Os comentários são importantes para a documentação dos programas. Exemplo de um comentário em C: /* Observação */ Em geral comentários são delimitados por chaves sintáticas. 64

ESPECIFICAÇÃO SINTÁTICA: GRAMÁTICAS Uma gramática é um conjunto de regras que especificam o formato das sentenças de uma linguagem, isto é, sua sintaxe. Uma linguagem usada para se descrever outra linguagem é chamada metalinguagem. Por exemplo: ao se descrever a língua chinesa usando-se para isso o português, nossa língua funcionaria como uma metalinguagem. 65

Para se descrever linguagens de programação várias metalinguagens podem ser usadas, desde a linguagem natural até formalismos matemáticos rigorosos, passando por métodos gráficos. No nível de abordagem aqui adotado consideraremos a descrição formal da sintaxe e a descrição semântica será informal. 66

Por exemplo, a regra <atribuição> : := <receptor> := <expressão> descreve o formato de um comando de atribuição em Pascal: à esquerda do símbolo ':=' deve estar uma construção caracterizada como 'receptor', e à direita uma 'expressão'. O significado (semântica) disso pode ser dado informalmente, em linguagem natural: "substituir o valor do receptor pelo valor resultante da avaliação da expressão". 67

Frisando, a especificação formal é necessária para se evitar ambiguidades na descrição, o que é imprescindível para o trabalho de implementação de uma linguagem. BNF (Backus-Naur Form) foi criada para a descrição sintática da linguagem ALGOL e tornou-se uma metalinguagem padrão. Com BNF pode-se especificar gramáticas de linguagens formais ou naturais, ainda que com restrições. 68

Uma gramática é um objeto formal G = (N, T, P, S), onde: N é o conjunto de símbolos não-terminais (ou metavariáveis). Estes representam classes ou categorias de construções sintáticas intermediárias na definição das sentenças da linguagem. Em BNF são escritos entre parêntese angulares, como por exemplo: <S>, <termo>, <comando>, etc.; 69

Uma gramática é um objeto formal G = (N, T, P, S), onde T é o conjunto de símbolos terminais da linguagem, i.e., básicos, considerados atômicos, os quais podem se combinar para formar todas as construções válidas. Podem ser caracteres, ou sequências de caracteres, como, por exemplo: A, 1, for, +, [, procedure, etc.; P é o conjunto de produções. Uma produção é uma regra que define uma possível estrutura de um não-terminal. 70

Uma gramática é um objeto formal G = (N, T, P, S), onde Em BNF, uma produção tem a forma seguinte: <a> ::= <b> onde <a> é um símbolo não-terminal e <b> é uma sequencia de símbolos terminais ou nãoterminais, que vale por uma descrição da estrutura sintática da estrutura <a>; S é o chamado símbolo nāo-terminal inicial, que representa uma sentença. 71

Uma gramática pode ser usada para derivação ou redução de sentenças. Derivação é o processo pelo qual se obtém uma sentença. Isto se faz através da substituição sucessiva de cada não-terminal pela sua definição (lado direito da produção correspondente), a partir da produção inicial (aquela que tem o símbolo S à esquerda), até se obter uma sequência que contenha apenas terminais, ou seja, uma sentença. 72

Redução e o processo pelo qual se verifica a validade de uma sentença, i.e., se ela pertence à linguagem. Consegue-se isso pela aplicação inversa das produções, escolhendo-se criteriosamente trechos da sentença a serem substituídos pelos correspondentes não- terminais, até se atingir o símbolo inicial (nesse caso dito símbolo objetivo). Se isto não for alcançado, a sequência dada não é uma sentença da linguagem. 73

74 Linguagens de Programação Exemplo: uma gramática simples em BNF (especifica o formato dos identificadores em uma certa linguagem): G1 = ( N = { <id>, <letra>, <digito>, <resto> }, T = { A, B, C, 0, 1 }, P = { <id> ::= <letra> "1" S = <id> ) <id> ::= <letra><resto> "2" <letra> ::= A "3 " <letra> ::= B "4" <letra> ::= C "5" <resto> ::= <letra> "6" <resto> ::= <digito> "7" <resto> ::= <letra><resto> "8" <resto> ::= <digito><resto> "9" <digito> ::= 0 l 1 "10" },

75 Linguagens de Programação Obtendo (derivando) sentenças dessa linguagem: sabendo que S é <id> (o não-terminal, inicial), começamos por ele. Pela regra 2, por exemplo (poderia ser a regra 1 também), vemos que ele pode ser substituído pela sequência <letra><resto>, e escolhendo 'A' como <letra> (regra 3) ficamos com 'A'<resto>. Continuando, <resto> pode ser <digito><resto> (regra 9), por exemplo '1'<resto>, e temos 'A1'<resto>. Como <resto> pode ser apenas <letra> (regra 6), escolhemos ' B' para encerrar 'A1B' é uma sentença da linguagem definida pela gramática G1.

A sentença: O estudante estuda muito. Pertence à linguagem acima? Demonstre.