Você está na página 1de 3

Linguagem TINY

Jonilson dos Santos Nascimento

ICEC – Instituto Cuiabá de Ensino e Cultura


Cuiabá MT

joniy6@hotmail.com

1. INTRODUÇÃO

Um problema adicional é a escolha da linguagem de Máquina utilizada como alvo


para o compilador TINY. A complexidade do uso de um código de máquina real para
um processador existente tem também o efeito de limitar a execução do código-alvo
resultante, para a linguagem de montagem de um processador simples hipotético,
denominado máquina TM (de tiny machine – maquina simples)

2. A Linguagem Tiny

Tiny é uma linguagem de programação imperativa de pequeno porte contendo


somente comandos e expressões. Todo comando de Tiny, quando executado,
modifica um estado. Este estado contém três elementos; primeiro a memória -
correspondência entre identificadores e valores. Na memória, cada identificador esta
associado a algum valor ou esta não-associado (unbound); segundo a entrada -
fornecida pelo usuário antes do inicio da execução do programa; consiste em uma
seqüência (possivelmente vazia) de valores que podem ser lidos utilizando uma
expressão; terceira a saída - e inicialmente uma seqüência vazia de valores que
armazena os resultados de um comando de saída, a saber, output E.

2.1 Especificações da Semântica de Tiny

Basicamente, o vocabulário de Tiny contém os seguintes nomes de função;


Program : função de aridade 0 que contém um programa em tiny;
Memory : função de aridade 1 que associa nomes de identificadores a valores;
Infile : função de aridade 0 que contém a seqüência de valores de entrada;
Output: função de aridade 0 que contém a seqüência de valores de saída do
programa;
Opstack: função de aridade 0 que simula pilha auxiliar de execução.
Em [BTI+07], Tiny é definida em cinco módulos, a saber:
1. Módulo principal (MainProgram) – contém a regra principal da especificação e
as rotinas de inicialização;
2. Módulo de Expressões (Expressions) – contém as regras de avaliação de
expressões;
3. Módulo de Comandos (Commands) – contém as regras de execução de
comandos;
4. Módulo de Operações (Operations) – contém as regras de operação na pilha.
5. Módulo de Globais (Globals) – contém as declarações dos principais tipos e
funções da especificação de Tiny.

A verificação de tipos é um interesse transversal. Assim, como a versão atual da


linguagem machina não possui meios apropriados para realizar a separação, esses
interesses tendem a ficar espalhados e entrelaçados com outros interesses. Uma
das conseqüências naturais é uma menor compreensibilidade do código.

3. Tiny C Compiler

O TCC, ou Tiny C Compiler, é um interessantíssimo e minúsculo compilador e


otimizador C para o Linux. Além de ter tudo o que um compilador normal tem, ele
pode gerar código com verificação de limites e memória. Os seus criadores dizem
que ele é mais rápido que o GCC, o que provavelmente é verdade já que o objetivo
do GCC é ser um compilador genérico. Mas o que torna o TCC útil é que ele pode
compilar e executar código diretamente permitindo que ele seja usado para scripts
dentro do Linux. Na minha opinião, porém, a sua maior vantagem é que, como ele
gera código real, ele pode ser usado também como a retaguarda de uma outra
linguagem qualquer. Isso torna a implementação da linguagem muito mais simples.
Para os interessados, como eu, vale a pena dar uma olhada. O melhor é que ele é
licenciado sob a LGPL, o que permite sua utilização em qualquer tipo de projeto
além de ter o código aberto.

3.1 O Compilador TINY

O compilador TINY é composto pelos arquivos C a seguir. Apresentamos arquivos


de cabeçalho(para inclusão) à esquerda e arquivos de código à baixo:

3.2 A Máquina TM

Utilizamos a linguagem de montagem dessa máquina como linguagem-alvo para


o compilador TINY. A máquina TM tem apenas instruções suficientes para ser um
alvo adequando para uma linguagem pequena como a TINY. Na verdade, TM tem
algumas propriedades dos computadores com conjuntos reduzidos de instruções(ou
RISCs, do inglês Reduced Instruction Set Computers), em que toda a ritmética e
testes precisam ocorrer em registradores, e os modos de endereçamento são
extremamente limitados. Para dar uma idéia da simplicidade dessa máquina,
traduzimos o código para a expressão C a [index] = 6, em linguagem de montagem
TM (compare isso com a linguagem de montagem hipotética para a mesma
declaração).

4. CONCLUSÃO

Neste ponto, temos TINY completamente definida. Não é muita coisa, na verdade
um compilador "de brinquedo". TINY só possui um tipo de dados e nenhuma
subrotina, mas é uma linguagem completa e usável. Embora você não seja capaz de
escrever um compilador usando TINY, ou fazer qualquer outra coisa seriamente, é
possível escrever programas para ler algumas entradas, processar cálculos, e emitir
algum resultado. Nada mal para um brinquedo.

5. REFERÊNCIAS BIBLIOGRÁFICAS

Louden, Kenneth C. Compiladores:princípios e práticas. Tradução:


Flávio
Soares Correia. São Paulo: Pioneira Thompson Learning, 2004.

http://compiladores.osdevbrasil.net/tutor10.html