Coral 66
Foram assinalados vários problemas nesta página ou se(c)ção: |
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]- Coral 66 Language Reference Manual - XGC
- XGC Software
- Coral 66 Pocket Handbook
- Coral 66
- Getting Started with M68K Coral 66