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