terça-feira, 29 de julho de 2008

Fortran - Linguagem de Programação


A família de linguagens de programação conhecida globalmente como Fortran foi desenvolvida a partir da década de 1950 e continua a ser usada hoje em dia. O nome tem como origens a expressão "FORmula TRANslation" (ou "Translator").As versões iniciais da linguagem eram conhecidas como FORTRAN, mas a capitalização foi ignorada em versões recentes da linguagem começando a partir do Fortran 90. Os padrões oficiais da linguagem referem-se a ela actualmente como "Fortran".
A linguagem Fortran é principalmente usada em Ciência da Computação e Análise Numérica. Apesar de ter sido inicialmente uma linguagem de programação procedural, versões recentes de Fortran possuem características que permitem suportar programação orientada por objectos.Foi a primeira linguagem de programação imperativa. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57 por uma equipe da IBM chefiada por John W. Backus. O compilador era optimizado, pois os autores acreditavam que ninguém iria usar essa linguagem se a sua prestação não fosse comparável com a da linguagem assembly.O Fortran permite a criação de programas que primam pela velocidade de execução. Daí reside seu uso em aplicações científicas computacionalmente intensivas como meteorologia, física, astronomia, geofísica, engenharia etc. O Fortran veio passando por mudanças durante os anos. O Fortran IV é um exemplo de como começou a evolução da linguagem: a linguagem Fortran foi largamente adoptada por cientistas para a escrita de programas numericamente intensivos, o que encorajou os produtores de compiladores a escrever compiladores que gerassem código mais rápido. Em 1966, quando a primeira versão padronizada da linguagem, conhecida como FORTRAN IV' ou FORTRAN 66, estava disponível, Fortran já era a linguagem mais usada pela comunidade científica. A ampla disponibilidade de compiladores para diferentes computadores; a simplicidade da linguagem; facilidade para ensiná-la; sua eficiência e as vantagens introduzidas pelo uso de sub-rotinas e compilação independente das mesmas; a capacidade de lidar com número complexo; além de muitas outras características ajudaram em sua ampla difusão dentro da comunidade científica.
Até hoje esta linguagem sofre alterações e simplificações.

domingo, 27 de julho de 2008

C ou C++???


Olá pessoal!Como ninguém participou da enquete...
No título já coloquei uma pergunta e vou fazer mais outra: Você é como eu que já ouviu muito falar em linguagem C e C++ , mas não sabe ainda qual a diferença entre eles? Bem, se você faz parte dessa comunidade:NÃO SEI A DIFERENÇA ENTRE C E C++!!! Vai ter que sair dela e entrar em outra comunidade... leia esse post!
C++ é uma linguagem derivada da linguagem C.O conjunto de instruções que fazem parte da linguagem C é parte de C++. Os elementos principais que foram adicionados a linguagem C para da origem a C++, consistem nas classes, nos objetos e na idéia de programação orientada ao objeto.
Se você já sabe programar em C, conhece maior parte da sintaxe de C++ e tem pouco a aprender. C++ é rica em recursos que atendem as limitações impostas pelas linguagens procedurais(O PostgreSQL que permite que as funções definidas pelo usuário sejam escritas em outras linguagens além de SQL e C. Estas linguagens são chamadas genericamente de linguagens procedurais).

Algumas Diferenças entre o C++ e o C
A diferença conceptual entre o C++ e o C está na ênfase com que são tratados os tipos de dados e
a organização dos programas. O Stroustrup diz ter pensado o C++ para:


  1. Proporcionar um melhor C;

  2. Suportar abstracção de dados;

  3. Suportar Programação orientada por Objectos. Isto é feito sem perda nem de generalidade nem de eficiência comparativamente ao C. Ao contrário de certas linguagens como o Smalltalk ou o Lisp, o C++ não impõe nenhum tipo de programação.
Para além disso, o C++:


  • Suporta programação orientada por objectos (Classes e Objectos, Herança,Binding dinâmico,polimorfismo);

  • Suporta tipos de dados abstratos (classes, encapsulamento);

  • Suporta funções e classes parametrizadas ou genéricas (templates).

  • Disponibiliza operadores para alocação e libertação de dinâmica de memória de alto-nível (new, delete);

  • Permite a passagem de argumentos por referência;

  • Sobrecarga de funções e operadores;

  • Expansão in-line de funções.
fonte:MIZRAHI, Victorine Viviane. Treinamento em linguagem C++ : modulo 1. Sao Paulo: Makron Books, c1995. 300p
vá a fonte e saiba +!

terça-feira, 22 de julho de 2008

UM POUCO SOBRE A HISTÓRIA DA CRIAÇÃO DA LINGUAGEM COMPUTACIONAL


Bem, já falamos um pouco da história de um compilador muito conhecido o Pascal. Nesse post vocês irão saber um pouco sobre como tudo começou...
Com o advento do computador armazenado de
John von Neumann (foto ao lado)no final da década de 1940, tornou-se necessário escrever sequências de código ou programas, para que esses computadores efetuassem as computações desejadas. Inicialmente esses programas foram escritos em linguagem de máquina-código numérico representado as operações da máquina a serem efetivamente executados. Por exemplo; C7 06 000 0002 representa a instrução para mover o número 2 do endereço 0000(hexadecimal) em processadores, o que consome muito tempo e é entediante. Assim essa forma de coodificação foi rapidamente substituída pela linguagem de montagem, em que instruções e endereços de memória adotam uma forma símbolica. Por exemplo, a instrução em linguagem de montagem mov x, 2 é equivalente a instrução de máquina, vista antes(assumindo que o modelo de memória x seja 0000). Um montador traduz os códigos símbolos e endereços de memória da linguagem da máquina.
As linguagem de montagem aumentaram muito a velociade e a precisão com que os programas podem ser escritos e são usados ainda hoje, especialmente quando muita velocidade ou precisão de código são necessários.
No final dos anos 1970 e 1980 diversos projetos visavam automatizar a geração de outras partes de um compilador, como a geração de código. esses empreendimento foram menos bem sucedidos, possivelmente em razão da natureza complexa das operações e ao nosso entendimento limitado dessas operações.
Avanços mas recentes em projeto de compiladores têm gerado resultados interessantes. Primeiro os compiladores tem incorporados mais algoritmos mais sofisticados para interferência e/ou simplificação da informação contida em um programa, o que tem ocorrido em paralelo ao desenvolvimento de linguagens de programação mais sofisticada para as quais essa análise é relevante.

FONTE:LOUDEN, Kenneth C. Compiladores : princípios e práticas. São Paulo: Pioneira Thomson Learning, 2004. 569 p. ISBN 852210422-0 (broch.)

quarta-feira, 16 de julho de 2008

Análise Léxica e Itens Léxicos

Para desenpenhar suas tarefas um compilador deve executar dois tipo de atividades:
A primeira atividade é a análise do código fonte, a segunda atividade é a síntese do programa equivalente em linguagem simbólica.

A análise é subdividida: Análise Léxica e Análise Sintáxica.

A análise léxica pode ser encarada como a primeira etapa do processo de compilação. Nesta etapa, o programa fonte é encarado como uma seqüência de caracteres que deverão ser agrupados e identificados como palavras reservadas da linguagem (Pascal, por exemplo).Inicialmente serão apresentados alguns aspectos genéricos no reconhecimento de símbolos.
As regras de formação de elementos e frases válidas de uma linguagem são expressos na gramática da linguagem. O processo de reconhecer os comandos de uma gramática é conhecido como reconhecimento de sentenças. A aplicação do conceito de reconhecimento de sentenças para agrupar as seqüências de caracteres em "palavras" é a análise léxica. Os elementos reconhecidos nessa primeira etapa da compilação são denominados itens léxicos ou tokens.Para desempenhar a análise léxica, o compilador deve ter conhecimento de quais são os tokens válidos da linguagem, assim como suas palavras chaves e regras para formação de identificadores.

Em Pascal, os itens léxicos são: and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, not, of, or, procedure, program, record, repeat, set, then, to, type, until, var, while, with, xor.
Cada um desses itens desepenham papel diferente num algorítico. Alguns são importantes para estruturas de repetição, outros para estruturas condicionais, outros para vetores. Vocês podem encontrar maiores explicações sobre essas estruturas nos blogs em minha lista de links, façam bom proveito.

As informações deste post foram retiradas de: http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html

quarta-feira, 9 de julho de 2008

Aqui estamos mais uma vez. Agora, já que sabemos o que é um compilador, vamos citar alguns dos mais importantes compiladores que podemos adquirir gratuitamente.
Um dos mais utilizados compiladores é o Pascal:
É uma linguagem de programação estruturada que recebeu este nome em homenagem ao matemático Blaise Pascal. Foi criada em 1970 pelo suíço Nirklaus Wirth, tendo em mente encorajar o uso de código estruturado.
O próprio Niklaus Wirth diz que Pascal foi criada simultaneamente para ensinar programação estruturada e para ser utilizada em sua fábrica de software. Simultaneamente, a linguagem reflete a liberação pessoal de Wirth das restrições impostas pelo após seu envolvimento com a especificação de ALGOL 68, e sua sugestão para essa especificação, o ALGOL W.
A linguagem é extremamente bem estruturada e muito adequada para ensino de linguagens de programação. É provavelmente uma das linguagens mais bem resolvidas entre as linguagens estruturadas, e certamente um dos exemplos de como uma linguagem especificada por uma pessoa pode ser bem melhor do que uma linguagem especificada por um comitê.

Pascal é normalmente uma das linguagens de escolha para ensinar programação, junto com Scheme, C e Fortran. Comercialmente, a linguagem foi sucedida pela criação da linguagem Object Pascal, atualmente utilizada nas IDEs Borland Delphi, Kylix e Lazarus. Academicamente, seus sucessores são as linguagens subsequentes de Niklaus Wirth: Modula-2 e Oberon. A partir da versão 2005, o Delphi passou a se referir a sua linguagem de programação como Delphi Language.
Outros exemplos de compiladores Chrome, Free Pascal, GNU Pascal Compiler (GPC), Kylix,P4 compiler, Pascalzim, Turbo Pascal, Virtual Pascal.

A partir de agora procuraremos focar nossos estudos de compiladores em PascalZim justamente por ser façil de encontrar já que é de distribuição gratuita.

Até a próxima, tchau!

domingo, 6 de julho de 2008

Primeira postagem... Nesse friozinho de final de tarde de inverno, nada melhor que estar... Em frente ao PC! Bem eu vim aqui pra dizer á vocês a diferença de um compilador e um interpretador! Então vamos lá!
Todo programa escrito numa linguagem de programação de alto nível (C, Pascal, C++, etc) precisa ser traduzido para a linguagem de máquina para que o computador possa executá-lo.Interpretadores e compiladores são os programas responsáveis por essa tradução, processando dados de entrada e gerando ações ou dados de saída.

APLICAÇÕES: Desenhos técnicos; Contabilidade; Simulações matemáticas; Jogos; Criação de programas diversos; Internet: sites de busca, compras, etc.

FUNCIONAMENTO DO INTERPRETADOR:
O interpretador é aquele que não gera código-objeto. A partir de um programa fonte, escrito em linguagem de alto nível, o interpretador, no momento de execução do programa, traduz cada instrução e a executa em seguida.

saiba +...
FUNCIONAMENTO DO COMPILARORES
Um compilador tem a finalidade de converter uma linguagem – Linguagem Fonte – de fácil escrita e leitura para os programadores, numa linguagem –Linguagem alvo ou objeto – que possa ser executada
pelas máquinas..

saiba +...
VANTAGENS DO COMPILADOR

->Execução mais rápida.
->Permite estruturas de programação mais completas .

->Permite a otimização do código fonte.
DESVANTAGENS
->Várias etapas de tradução
->Programação final é maior necessitando mais memória para a sua execução.

->Processo de correção de erros e depuração é mais demorado
VANTAGENS DO INTERPRETADOR
->Depuração do programa é mais simples, consome menos memória
->Resultado imediato do programa ou rotina desenvolvida

DESVANTAGENS
-> Execução do programa é mais lenta
->Estruturas de dados demasiado simples necessário fornecer o programa fonte ao utilizador
FONTE