# Coral 66

Coral 66 é uma linguagem de programação para fins gerais baseada em ALGOL 60, com alguns recursos das linguagens de programação Coral 64, Jovial e Fortran. Originalmente projetada em 1966 na Royal Radar Establishment (RRE), na cidade de Malvern, Reino Unido, em resposta a necessidade de um compilador em um computador de ponto fixo e em um ambiente de controle.

## História

A linguagem foi um padrão interserviços de um programa militar, e também largamente utilizada para propósitos civis do controle Britânico e na automação industrial. Ela foi utilizada para escrever software para computadores Ferranti e GEC de 1971 em diante.
Uma variante da linguagem foi desenvolvida durante o final dos anos 70 e inicio dos anos 80, para o uso sobre o System X de computadores de controle de cambio de telefones digitais, conhecido como PO CORAL. Mais tarde foi renomeado para BT-CORAL quando a British Telecom foi desmembrada dos correios. As únicas caracteristicas desta linguagem eram o foco sobre a execução em tempo real, o processamento de mensagens, limites de execução de instrução entre a espera para entrada, e a proibição de recursão para eliminar a necessidade de uma pilha.

## Visão Geral

A linguagem inclui tipos de registro estruturado (assim como em Pascal) e suporta o empacotamento de dados para armazenamento limitado, e oferece boa verificação e diagnóstico em tempo de execução. Ela é destinada especificamente para aplicações de tempo real e para o uso em computadores com limitado poder de processamento, incluindo aqueles que são limitados a aritmética de ponto fixo e os que não tem suporte de alocação de armazenamento dinâmico.

## Expressões

Como não há variáveis boleanas, as expressões depois de IF são conhecidas como condições. A sintaxe é:

### Expressões Simples

| Operador | Função |
| + | Adição |
| - | Subtração |
| * | Multiplicação |
| / | Divisão |
Não há operador de exponenciação. A sintaxe para a expressão simples começa como se segue:

## Tipos de Dados
### Tipos numéricos

No Coral 66 há três tipos de dados numéricos. São eles: inteiros, ponto-flutuante e ponto-fixo. A sintaxe de declarações para estes tipos seguem a seguinte forma:
Onde para a declaração de uma variável do tipo FIXED, devemos informar a quantidade de algarismos da parte fracionária.
(Neste exemplo é declarada uma variável de no máximo 13 algarismos, sendo 5 algarismos a parte fracionária.)

## Vetores

A declaração de vetores no Coral 66 é muito semelhante a outras linguagens imperativas. Abaixo segue um exemplo de declaração de arrays.
Note que nesta linguagem, para vetores que seja necessário conter mais de um array para a mesma variável, por via de regra, a linha inferior nunca poderá conter um vetor maior do que a linha superior. Além disso, para separ as linhas de arrays multidimensionais, é necessário colocar uma vírgula (,), para informar o fim da linha e assim, colocando o tamanho de outra. Também é possivel declarar arryas e tipos simples na mesma linha, contanto que sejam do mesmo tipo. Vide exemplo:

## Tabelas

Para a declaração de tabelas, é utilizada a seguinte sintaxe:
Na declaração acima é declarada uma tabela de 30 posições, com tamanho de 3 palavras. Ou seja, esta tabela totaliza uma alocação de 90 palavras.
Tabelas de elementos

## Exemplo de Código

Abaixo, um exemplo simples de uma implementação em Coral 66.
Para compilar este arquivo, primeiramente devemos salvar com a extensão .cor ou .c66.
No prompt de comando, você deve executar a seguinte instrução:
O comando m68k-coff-gcc é utilizado para a chamada do compilador do Coral 66, o qual também compila códigos em C e Assembly. Para executar o arquivo já compilado, o comando $ m68k-coff-run é quem realiza a execução. No caso do exemplo acima, você terá uma a frase “Hello world” impressa na tela.

## Ferramentas de Programação

O compilador XGC da linguagem Coral 66 está de acordo com a definição oficial da linguagem, BSI Standard 5905, e suporta vários conjuntos de extensões de padrões industriais. Ele é portanto, bem posicionado como uma implementação moderna da linguagem.
O XGC está disponível como compilador nativo no Sun SPARC Solaris e no IBM PC Linux, e como um compilador hibrido, cria plataformas padrões para qualquer alvo suportado. Alvos imediatamente disponíveis são: Familia Motorola M68000, Familia Intel 386, SPARC, MIL-STD-1750 e Power PC.
O XGC tem a tecnologia plenamente desenvolvida, incorporando um novo front end do compilador para suportar a linguagem Coral 66. Este front end está além do front end das linguagens C, C++ e Ada95, e nos permite construir compiladores personalizados para qualquer mistura destas linguagens.
O diagrama a seguir, nos mostra um compilador que suporta as 3 linguagens:
Segmentos do programa escrito em Coral 66 têm pleno acesso às bibliotecas padrão. Em especial, um programa escrito em Coral 66, pode utilizar a biblioteca ANSI C para executar comandos I/O, operações com string, alocação de memória e assim por diante.
Segmentos de um programa em Coral 66 podem ser ligados à um programa em Ada, e chamadas podem ser feitas a partir de código-fonte Ada para código-fonte Coral, ou vice-versa.