Coral 66

Origem: Wikipédia, a enciclopédia livre.
Coral 66
Paradigma estruturada, imperativa, procedural
Surgido em 1964
Criado por Royal Radar Establishment
Influenciada por ALGOL, JOVIAL, Coral 64, Fortran

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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

Expressão ::=
     Expressão incondicional
     Expressão condicional

Expressão incondicional ::=
     Expressão simples
     String

Expressões Simples[editar | editar código-fonte]

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:

Expressão simples ::=
     Termo
     Operação de adição Termo
     Simples Expressão Operação de adição Termo

Termo ::=
     Fator
     Termo Operação de multiplicação Fator

Operador de adição ::=
     +
     -

Operador de multiplicação ::=
     *
     /

Tipos de Dados[editar | editar código-fonte]

Tipos numéricos[editar | editar código-fonte]

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:

Numbertype ::= 
     FLOATING
     FIXED Scale
     INTEGER

Scale ::= (Totalbits , Fractionbits) 
Totalbits ::= Integer 
Fractionbits ::= Signedinteger

Onde para a declaração de uma variável do tipo FIXED, devemos informar a quantidade de algarismos da parte fracionária.

		
FIXED(13,5)

(Neste exemplo é declarada uma variável de no máximo 13 algarismos, sendo 5 algarismos a parte fracionária.)

Vetores[editar | editar código-fonte]

A declaração de vetores no Coral 66 é muito semelhante a outras linguagens imperativas. Abaixo segue um exemplo de declaração de arrays.

FIXED(13,5) ARRAY b[0:19];
FLOATING ARRAY c[1:3,1:3];

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:

INTEGER ARRAY p, q, r[1:3], s[1:4], t, u[1:2, 1:3];

Tabelas[editar | editar código-fonte]

Para a declaração de tabelas, é utilizada a seguinte sintaxe:

TABLE April[3,30]

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.

Tabledec ::=
        TABLE Id [ Width , Length ]

[Elementdeclist Elementpresetlist ] Presetlist

Elementdeclist ::=
        Elementdec Elementdec ; Elementdeclist

Width ::= Integer

Length ::= Integer

Tabelas de elementos

Exemplo de Código[editar | editar código-fonte]

Abaixo, um exemplo simples de uma implementação em Coral 66.

'external' (
   'procedure' write (
      'value''integer', 'byte''array', 'value''integer');
)

'begin'
   'byte''array' Buf [1:12] := "Hello world", 10;

   write (1, Buf, 12);
'end'

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:

$ m68k-coff-gcc hello.cor -o hello

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.

$ m68k-coff-gcc hello

Ferramentas de Programação[editar | editar código-fonte]

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.

Bibliografia[editar | editar código-fonte]

Ligações externas[editar | editar código-fonte]