terça-feira, 26 de agosto de 2008

Outros aspéctos da estrutura de um compilador

Opções e interfaces de um compilador


Um aspecto importante da construção de compiladores é a inclusão de mecanismos para a interface com o sistema operacional e para oferecer opções ao usuário. Exemplos de mecanismos de interace são recursos de entrada e saída e acesso ao sistema de arquivos da máquina-alvo.
exemplos de opções para o usuário são a especificação de características de listagens(comprimento, mensagens de erro, tabelas de referências cruzadas) e opções de otimização de código(desempenho de certas otimizações. Interface e opções são denominadas coletivamente como a pragmática do compilador. Por vezes, uma definição de linguagem especifica a necessidade de fornecer certa pragmática. Por exemplo, Pascal e C especificam certos procedimentos de entrada/saída(em Pascal, eles fazem parte da linguagem, e em C eles fazem parte de uma especificação de uma biblioteca padrão).Em Ada, diversas diretivas do compilador, são denominadas pragmas, fazem parte da definição da linguagem. Por exemplo, as declarações Ada

pragma list(ON);
...
pragma list(OFF);


geram uma listagem do compilador para a parte do programacontida entre os pragmas. Neste texto, não veremos as diretivas de compilador apenas no contexto de gerar informação para fins de depuração no compilador. Não trataremos dos aspectos de entrada/saída e de interface com o sistema operacional, pois isso envolve detalhes consideráveis e varia muito de um sistema operaconal para outro.


Tratamento de erros


Uma das funções mais importantes de um compilador é sua resposta a erros no programa-fonte.Erros podem ser detectados durante quase todas as fases de compilação. Esses erros estáticos(ou em tempo de compilação) devem ser reportados por um compilador, e é importante que ele possa gerar mensagens de erros inteligíveis e concluir a compilação após cada erro. Cada fase de um compilador requer um tratamentode erros ligeiramente dferente, e assim um sistema para tratamento de erros necessita de diferentes operações, cada uma apropriada para uma fase e situação específicas. Técnicas de tratamento de erros para cada fase serão, portanto, estudadas separadamente no capítulo apropriado.
uma definição de linguagem requer usualmente não apenas que erros estáticos sejam capiturados por um compilador, mas também que certos erros de execução sejam capturados. Isso exige que um compilador gere código adicional para efetuar testes apropriados de execução, a fim de garantir que todos esses erros causem um evento apropriado durante a execuçaõ. Um evento dos mais simples interromperá a execução do programa. Frequentemente, entretanto, isso é inadequado, e uma definição de linguagem pode requerer a presença de mecanismos para tratamento de erros. Isso pode complicar substancialmente o gerenciamento de um sistema de execução do ponto no qual ocorreu o erro. Não consideraremos a implementação desses mecanismos, mas mostraremos como um compilador pode gerar código de teste para garantir que erros específicos de execução interrompam a execução.


Para saber mais vá direto ao livro:

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

Boa leitura!

quarta-feira, 20 de agosto de 2008

Interpretador de comandos

Interpretadores de comandos são programas de computador responsáveis por tomar as ações efetivas conforme a orientação do usuário através de comunicação textual.

Interpretadores de comandos como interfaces de usuário

Os interpretadores de comandos permitem aos usuários emitirem vários comandos, o que requer ao usuário conhecer tais comandos e seus parâmetros, além da sintaxe da linguagem interpretada. A partir da década de 1960, a interação do usuário com o computador era primariamente realizada através de linha de comando. Na década seguinte os pesquisadores começaram a desenvolver interfaces gráficas para fornecer maneiras mais simples e lógicas para a interação com a máquina, o que modelou o avanço da informática, com o surgimento de novos dispositivos periféricos com o mouse. Isso possibilitou que leigos pudessem aprender rapidamente a utilizar o computador. Apesar disso, mesmo atualmente as interfaces textuais de interpretação de comandos ainda são bastante utilizadas em conjunto com interfaces gráficas, pois para algumas tarefas elas se tornam muito mais eficientes para realizar operações.

Consola de comandos

Uma aplicação prática de um interpretador de comandos é a consola de comandos (português de Portugal, ou console de comandos em português brasileiro), também chamado shell para os sistemas do tipo Unix. Ele é uma interface textual que interpreta os comandos existentes em um sistema operativo e os envia ao kernel, imprimindo posteriormente o resultado do processamento na tela.


Fonte

O PODER DAS COMUNIDADES DE SOFTWARE

Uma das grandes questões sobre o poder das comunidades de Software Livre é determinar quais são as comunidades mais influentes e poderosas e o que faz dessas comunidades especialmente poderosas.
Por outro lado, em virtude do crescimento exponencial de softwares livres é impossível verificar caso a caso a importância de cada comunidade.
Acho que o melhor palpite é nos guiar pelas novas leis do espaço cibernético e olhar cada uma das principais forças e encontrar expoentes de manifestação dessas forças.
Lembrando a importância do gcc, vamos analisar a força da arquitetura, sobre o mesmo prisma que seguem pessoas como Linus Tovalds e Arthur Griffith .
Intuitivamente, sabemos que um sistema operacional auto suficiente é a soma de um kernel um compilador e um editor de textos. A ideia é que a soma desses três elementos torna possível adicionar novas funcionalidades ao sistema sem a necessidade de criar programas numa outra plataforma (sistema operacional). Basta criar um arquivo com o código-fonte no editor de texto, compilar o arquivo com o compilador e tem-se a nova funcionalidade. No entanto, nem sempre essas chamadas são feitas diretamente e para isso é utilizado um interpretador de comandos (como o bash) ou um servidor de janelas e gerenciador de programas com o X.
Vamos supor, por ora, que programa seja tão simplesmente editar um código-fonte num editor de texto, e que esse programa seja simples o bastante para não incluirmos nessas considerações. Onde chegamos em três classes importantes de programas: compiladores, os núcleos dos sistemas operacionais e o programas de iteração com usuário.
Mas, em cada uma dessas classes a uma miríade de opções que torna necessário a adoção de um novo critério para definir quais são os programas mais importantes e influentes. Podemos tomar algumas das forças como critério de desempate mas preferimos por hora nos focar na questão de arquitetura.
Compiladores
Um compilador está associado a uma linguagem, a uma comunidade de desenvolvedores para essa linguagem (seus usuários diretos) e sua comunidade de desenvolvedores. Usuários de programas compilados por esse programa constituem, via de regra um grupo maior que são usuários indiretos do compilador.
Notadamente, os desenvolvedores para a linguagem terão mais facilidade com o código-fonte desse compilador quanto estiver na mesma linguagem (que programam), e além disso se o compilador é capaz de se autocompilar.
Sobre sai aqui o gcc e a linguagem C.
C é uma linguagem de programação estruturada e padronizada criada na década de 1970 por Dennis Ritchie e Ken Thompson para ser usada no sistema operacional UNIX. Desde então espalhou-se por muitos outros sistemas operacionais, e tornou-se uma das linguagens de programação mais usadas. C tem como ponto-forte a sua eficiência (devido a ausência de suporte a linguagem em tempo de execução) e é a linguagem de programação de preferência para o desenvolvimento de software de sistemas (devido em parte a sua simplicidade e eficiência).
"Unix em si, é uma história de grande sucesso em termos de portabilidade. O núcleo do Unix, como muitos núcleos, conta com a existência de C para dar a maioria da portabilidade necessária. Assim, como para o Linux. A ampla disponibilidade de compiladores C em muitas arquiteturas possibilitou portar o Unix, em todas essas arquiteturas.

VÁ A FONTE E SAIBA +++

quarta-feira, 13 de agosto de 2008

Compilador Just-in-time


Em Ciência da Computação, JIT é o acrônimo para compilador just-in-time, que é um tradutor que converte, em tempo de execução, instruções de um formato para outro, por exemplo, de bytecode para código de máquina. Esta técnica é normalmente utilizada para incrementar o desempenho de programas "executados" - na verdade, interpretados - em máquinas virtuais.


Visão geral

Em sistemas computacionais baseados em máquina virtualmáquinas virtuais, como Java e .NET, o processo de compilação traduz o código fonte para uma representação intermediária conhecida pelo termo bytecode. Esta representação intermediária não está associada a nenhum código de máquina específico e pode ser transportada para várias arquiteturas de computador distintas. Em cada arquitetura específica, essa representação intermediária é interpretada - ou executada em uma máquina virtual.
Nos ambientes que oferecem o recurso de JIT, a máquina virtual responsável pela execução dos bytecodes resultantes da compilação do programa fonte realiza a tradução desse bytecode para código de máquina nativo enquanto o executa. No caso mais comum, cada trecho de código é traduzido no instante em que está para ser executado pela primeira vez, daí derivando o nome "just-in-time".
A idéia de um sistema que suporta o conceito de JIT é combinar as vantagens da compilação tradicional - que converte o código fonte diretamente para código de máquina - e do conceito de máquinas virtuais, baseadas em bytecode. A custosa tarefa de analisar e verificar o código fonte do programa original é realizada pelo processo de compilação para bytecode, em tempo de desenvolvimento. Também nesta fase, são realizadas todas as possíveis otimizações baseadas na análise do código fonte, obtendo-se um conjunto de bytecodes optimizados e semanticamente equivalente ao programa fonte original. O programa objeto resultante deste processo de compilação é transportável para as várias arquiteturas distintas que suportam a máquina virtual alvo da compilação, isto é, que possuem um interpretador de bytecode. Durante a execução do programa, o compilador JIT realiza apenas a tradução de bytecode para código de máquina, que é uma tarefa muito mais simples e mais rápida.
Esse mecanismo de execução apresenta um desempenho significativamente superior ao processo clássico de interpretação. Isto porque o código de máquina resultante da compilação JIT é armazenado na memória, garantindo que o trecho de código em questão não será mais recompilado ou reinterpretado sempre que, durante a execução do programa, for novamente acionado. Além disso, muitos compiladores JIT possuem mecanismos para realizar optimizações adicionais nos trechos de código do programa que são executados com maior frequência.
Entretanto, o mecanismo de execução baseado em compiladores JIT pode causar um pequeno atraso no início da execução de uma aplicação, em função de ter que compilar o bytecode para código de máquina. Naturalmente, quanto mais otimizações o compilador JIT realizar, mais rápida tenderá a ser a execução do programa alvo, porém maior será o atraso no início da execução. Por conta disso, os compiladores JIT mais bem elaborados normalmente realizam um balanceamento criterioso entre o tempo a ser gasto com a compilação e a qualidade de código que ele pretende gerar.
Dois exemplos de plataformas que se utilizam de compiladores JIT são os ambientes .NET e Java. No caso do ambiente Java, o compilador de Java traduz o programa fonte para uma representação intermediária (programa objeto) conhecida pelo termo bytecode. Posteriormente, o programa objeto será interpretado pela máquina virtual Java. No caso do ambiente .NET, a representação intermediária é conhecida pelo termo Microsoft Intermediate Language (MSIL), que será interpretada pela máquina virtual do ambiente .NET, chamada Common Language Runtime.



saiba mais...

terça-feira, 12 de agosto de 2008

Esse post é só uma dica! Bem legal,confira!



Compiladores e Interpretadores PASCAL
Nesta página você vai encontrar links para download dos principais compiladores e interpretadores de PASCAL de uso livre ou gratuito para fins ediucacionais que existem. Cada variante de PASCAL está associada a links e documentos sobre aquela implementação específica e comentários nossos para ajudar você a decidir qual PASCAL você vai querer usar para a disciplina. Esta parte está aberta a contribuições suas.

COMPILADOR PURO E INTERPRETADOR PURO.

Na prática, não existem compiladores ou interpretadores puros: cada compilador ou
interpretador recebe o seu nome em função da forma de implementação que melhor o
descreve.
Por exemplo, seria excessivo que um compilador traduzisse cada acesso a um
arquivo em disco feito em um programa inserindo no programa objeto várias vezes o
(longo) código necessário para obrigar o hardware do disco a executar a sequência de
ações correspondentes. O que se faz na prática é interpretar essas instruções através de
chamadas a rotinas (conhecidas como serviços) de um sistema operacional, que se
tornam responsáveis por essas ações.
Por outro lado, muitos interpretadores efetuam uma tradução (compilação) do
código fonte para uma representação interna ou código intermediário, cuja
interpretação pode então ser feita com maior facilidade .

FONTE:

http://72.14.205.104/search?q=cache:m1zjgbDwDkwJ:www-di.inf.puc-rio.br/~rangel/lp/LP2.PDF+compiladores+e+interpretadores&hl=pt-BR&ct=clnk&cd=6&gl=br

quarta-feira, 6 de agosto de 2008

Você quer umas dicas de compiladores gratúitos?Leia a postagem!

 
No ambiente Windows você tem duas boas opções de compiladores gratuitos.
A primeira opção é o compilador DevC++ , que é um compilador C/C++ (ANSI) e com uma boa interface com o usuário. Você pode baixa-lo diretamente e na página oficial(está em inglês). Depois de baixar, basta descompactá-lo e rodar o programa Setup.exe . Instruções simplificadas para compilar e executar programas neste ambiente estão disponíveis abaixo. Se voce tiver problemas com o compilador por favor verifique o seu FAQ.
Uma opção alternativa é o LCC-Win32, que é um compilador C . O compilador é padrão ANSI C (ele não compila programas em C++, apenas em C).Dentre estas duas opções, recomendamos o DevC++, que, além de compilar programas em C, também compila em C++ e poderá ser utilizado em seus estudos futuros dessa linguagem.
 Para DOS, também existem vários compiladores gratuitos:
Existe uma versão grátis do compilador gcc para DOS, sob o nome de DJGPP. Este compilador é disponível na Internet. Para saber quais arquivos são necessários, como baixá-los e instalá-los,
leia as instruções abaixo. Somente recomendamos este compilador para quem tem um certo conhecimento de configuração utilizando o DOS. Se você quer algo mais simples, pegue um dos compiladores abaixo.
Outra opção de compilador grátis para DOS é o TClite, da Borland. Este compilador é mais simples de instalar do que o DJGPP e pode ser obtido em http://www.cprogramming.com/tclite.html. Para facilitar sua vida, também estamos disponibilizando o arquivo aqui. Uma desvantagem do TClite é que os programas que você gera somente podem ser executados dentro do ambiente do TClite.
A Borland recentemente disponibilizou versões gratuitas (antigas) do Compilador Turbo C. Você pode baixar a versão 2.01 do Turbo C em http://community.borland.com/museum/borland/ . A vantagem desta versão em relação ao TClite é que ela gera programas que podem ser executados fora do ambiente de compilação. A desvantagem é que o ambiente de compilação não trabalha com o mouse, com sua interface sendo toda baseada no teclado. A instalação é simples: você deve descompactar o arquivo tc201.zip (por exemplo, usando o winzip) e serão gerados 3 diretórios: disk1, disk2 e disk3 . A seguir, você deve copiar o conteúdo de cada um destes diretórios para um disquete e rodar o programa install, a partir do primeiro disquete. Depois é só seguir as instruções que aparecerão na tela, fornecendo, quando pedido, o segundo e depois o terceiro disquete. Finalmente você deve ir no diretório raiz ( C:\ )e editar o autoexec.bat. Nele escreva lá no final mesmo as seguintes linhas, exatamente como abaixo (não coloque nenhum espaço em branco a mais!) :



SET PATH=C:\TC;%PATH%

Onde consta C:\TC acima ponha o nome do diretório em que você instalou o Turbo C. Reinicie o computador, abra uma janela DOS, vá ao diretório em que você vai trabalhar e digite tc. O ambiente de edição e compilação é um pouco pior do que o do RHIDE, porém você pode adaptar as instruções para uso do Rhide para usar o tc.
GOSTOU? ENTÃO ATÉ A PRÓXIMA!

FONTE:http://dn.codegear.com/museum/borland/software/TC201.zip









terça-feira, 5 de agosto de 2008

Já sabemos que os compiladores são importantes programas computacionais que a partir de um código escrito em uma linguagem criam semanticamente equivalente porém em outra linguagem. Visto isso, definiremos agora o que é um descompilador.

Descompilador é um programa de computador que realiza a operação inversa de um compilador, transformando código objeto em código fonte.O termo entretanto é mais utilizado para designar programas de computador que traduzem código de máquina (programas executáveis) em código fonte em uma linguagem de programação de alto nível. Em comparação, em desmontador transforma código de máquina em linguagem de montagem. Esse programa pode ser útil caso perca-se o código fonte de um programa de computador. O sucesso da descompilação depende da quantidade de informação presente no código e da sofisticação da rotina de análise. A primeira consideração a ser feita quando se fala de engenharia reversa é a legalidade dessa ação. Muitos programas de computador são protegidos pelas leis de Direitos Autorais. Então, por que se fazer uma decompilação? Com que objetivo transformaríamos salsichas em porcos novamente?Encontrar vulnerabilidades, certificar-se da não existência de software mal intencionados, aprender algum algoritmo, otimizar o software para uma determinada plataforma, resolver 'bugs' ou mesmo para adicionar novas funcionalidades, são alguns dos motivos.De qualquer forma, poder contar com ferramentas como essa pode aumentar muito o aprendizado de programadores de qualquer nível.Existem muito descompiladores no mercados, alguns deles gratuitos, por exemplo: JCavaj Java Decompiler 1.10 . Em http://www.program-transformation.org pode ser encontrada uma lista dos principais descompiladores dividos nas seguintes categorias:

  • Java bytecodes
  • .NET bytecodes
  • Python bytecodes
  • Visual Basic
  • Delphi
  • Foxbase/FoxPro
  • Assembly language
  • Machine code
  • Specific compiler generated programs


Encontre mais informações nas fontes:

http://pt.wikipedia.org/wiki/Compilador
http://pt.wikipedia.org/wiki/Desmontador
http://pt.wikipedia.org/wiki/Descompilador
http://www.dicas-l.com.br/dicas-l/20050520.php

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