Linguagem FORTH

Grupo responsável:
  • Taisson Silveira de Oliveira

FORTH

É uma linguagem de programação procedural baseada em pilhas de dados, com sintaxe em notação polonesa reversa ou RPN (sigla em inglês para Reverse Polish Notation) e com os comandos organizados em uma lista extensível chamada de dicionário. Os comandos são chamados de “palavras”, a partir do dicionário básico, são criados outros comandos, serviu de inspiração para linguagens como Transcript, Postscript, Open Firmware, a linguagem de inicialização de placas PCI em sistema Macintosh, e Factor, desenvolvida recentemente por Slava Pestov. Também é usada no bootloader do sistema operacional FreeBSD. A linguagem é apropriada para sistemas embutidos, e se caracteriza por ser extremamente compacta. Pode ser considerada como linguagem interpretada e compilada ao mesmo tempo. A interpretação/compilação pode ser feita através de bytecode ou código de máquina. As palavras podem ser livremente redefinidas. Freqüentemente, é definida como uma mistura de linguagem de baixo nível e de alto nível, ou um assembly de alto nível. Contem as estruturas de controle comuns em linguagens procedurais, como IF-THEN, IF-ELSE-THEN, BEGIN-UNTIL, BEGIN-REPEAT, DO-LOOP, CASE.

A história

A linguagem Forth foi criada no final dos anos 60 inicio dos anos 70 por Charles Moore, quando trabalhava como programador de computadores na empresa Stanford Linear Accelerator Center. O objetivo no desenvolvimento de FORTH era para a necessidade de um engenheiro em aprender um grande número de métodos para compiladores de controle (linker, montadoras, e diretrizes de linguagens de alto nível). A primeira implementação completa foi utilizada em 1971 em um DEC PDP-11, um rádio telescópio de 11 metros, na National Radio Astronomy Observatory, no Arizona. Este sistema foi responsável por apontar e rastrear o telescópio, a coleta de dados e a gravação em fita magnética, como o apoio de um terminal gráfico interativo em que um astrônomo pode analisar os dados gravados anteriormente. A natureza multitarefa do sistema permitiu que todas as funções fossem executadas simultaneamente, sem conflitos de tempo ou outras interferências. O uso do sistema era tão útil que sua fama logos se espalhou pelo mundo da astronomia que, em 1976 Forth foi adotado como linguagem padrão pela União Astronômica Internacional. Com o sucesso em 1973, Charles Moore e Elizabeth Rather, formaram a “FORTH, Inc.”, para explorar os usos comerciais da linguagem. A “FORTH, Inc.”, desenvolveu versões multiusuários do Forth em microcomputadores para diversos projetos que vão desde bases de dados para aplicações científicas, tais como processamento de imagem. Tal como a primeira aplicação, estas muitas vezes necessitam de uma mistura de diversos mecanismos.A versão foi desenvolvida, em 1977, para os recém introduzidos microprocessadores de 8 bits chamados de “microFORTH”. Este trabalho foi complementado por seu “miniFORTH” produto para minicomputadores. Mais tarde (em 1979) esses sistemas foram substituídos pelo “Poly Forth” do produto, onde se tornou um dos produtos mais vendidos no mercado. A “MicroFORTH” foi utilizado com sucesso na aplicação microprocessador embutido nos Estados Unidos, Europa e Japão. O sucesso da “MicroFORTH” levou à formação do Europen Forth User Group (EFUG), mais tarde, em 1978, um grupo de hobbyists de computador no norte da Califórnia formando o Grupo Forth Interesse (FIG). Os membros da FIG conseguiram um sistema Forth de um observatório. De tudo isso, desenvolveu um modelo simples que implementado em vários sistemas e (com a permissão de FORTH, Inc.) listagens publicadas e discos a um custo muito baixo. Esse modelo mais tarde se tornou conhecido como o modelo FIG-Forth. Esta ação ajuda a rápida propagação do interesse em Forth. FIG tem agora 60 “capítulos” em 15 países.

Características

Forth é um ambiente de programação interativo projetado originalmente para os programadores a desenvolver aplicações utilizando mini e microcomputadores. Forth não foi derivada de uma outra língua. As suas características de aparência e interna, podem parecer desconhecido para novos utilizadores, mas a simplicidade do Forth, extrema modularidade e natureza interativa, compensam a estranheza inicial, tornando-o fácil de aprender e usar. As implementações originais de Forth eram sistemas autônomos que incluíam funções normalmente desempenhadas por diferentes sistemas operacionais, editores, compiladores, montadores, depuradores e outras utilidades.Uma característica incomum do Forth é a sua extensibilidade. O processo de programação em Forth consiste em definir novas palavras, comandos novos na língua. Alternativamente, as novas palavras podem ser definidas em código de montagem, pois as maiorias das implementações incluem um montador para o processador hospedeiro. Com um resultado desta extensibilidade, tem o resultado e uma garantia especial “linguagem de aplicação orientada”.Também pode se adicionar novas classes de palavras, isto é, pode-se criar uma palavra que vai definir outras palavras. Ao criar uma palavra que define outras, o programador pode especificar um comportamento especializado para as palavras que irá criar, o que será eficaz em tempo de compilação, em tempo de execução, ou ambos. Como o comportamento em tempo de execução de tais palavras pode ser definida tanto em alto nível ou em assembler, as palavras criadas são equivalentes a todos os outros tipos de Forth. O sistema também permite que se adicione novos “diretivas de compilador” para implementar tipos especiais de loops ou outras estruturas de controle, como um CASE estrutura.

Elementos

  • Um dicionário de palavras.
  • Duas pilhas.
  • Intérprete Teclado.
  • Um montador.
  • Armazenamento virtual.

Dicionário: um programa Forth e armazenado em um dicionário, no qual ocupa maior parte da memória usada pelo sistema. E constituído por uma lista roscada “threaded” de comprimento variado de itens, onde cada um define uma palavra. O conteúdo de cada definição depende do tipo de palavra (item de dados, constante, sequência de operações, etc.), o dicionário é extensível.

Pilhas: tem duas pilhas que proporcionam comunicação entre as palavras, além de um mecanismo eficiente para controlar o fluxo lógico. Mesmo as estruturas das pilhas serem a mesma elas tem utilizações diferentes. O usuário/programador interage mais diretamente com a pilha de dados, que contém os argumentos sendo passados entre as palavras, substituindo lista de parâmetros usada por linguagens convencionais. Já a segunda pilha é conhecida como a pilha de retorno e é utilizado para segurar endereços de retorno para as definições aninhadas, embora outros tipos de dados são ocasionalmente realizada lá temporariamente.

Intérprete Teclado: ao ligar, Forth começa a executar um loop infinito conhecido como QUIT. Este é o interpretador Forth ou intérprete teclado.

: QUIT ( – ) BEGIN RESET QUERY INTERPRET AGAIN ;

: RESET - limpa as pilhas

: QUERY - espera pela entrada do usuário a partir do teclado (ou lê uma linha a partir de um dispositivo de armazenamento em massa)

:INTERPRET - para procurar no dicionário para um jogo, seguido de execução. BEGIN e AGAIN é o programa-palavra de controle que o tornam um loop infinito

Montador: programa que transforma o código escrito em linguagem de maquina, substituindo instruções. Ao utilizar o termo que define CÓDIGO o programador pode criar uma definição cujo comportamento irá consistir de executar instruções máquina real.

Armazenamento virtual: O elemento final único de Forth é a sua maneira de usar o disco (ou armazenamento em massa) como uma forma de “memória virtual” para dados e fonte do programa.

Área de Aplicação e Jogos

Seus principais usos estão em aplicação científica e industrial, como instrumentação, robótica, controle de processos, gráficos e processamento de imagens, inteligência artificial e aplicações de negócios, tradutores de idiomas, animação (filmes, DisneyLand), controladores de disco rígido.Divisão da Atari coin-op usando Forth para muitos jogos de arcade. Eles acreditavam que o caminho mais rápido para alta performance, era para escrevê-lo em Forth e recodificar os laços mais íntimos em assembler. De acordo com uma entrevista com os desenvolvedores dos famosos jogos de aventura Infocom (Hitch Hikers Guide to the Galaxy, e outros). Unison World produziu mais de uma dúzia de jogos para PC, todos escritos em fig-Forth. De acordo com Marc de Groot, diretor técnico, portar jogos baseados em Z80 (processador de 8 bits) para 6502 e 6809 (processador 8 bits), geralmente leva menos de três meses.

Sintaxe

A sintaxe pode ser expressa da seguinte maneira, “código de Forth é um monte de palavras com espaços entre eles. Cada palavra é equivalente a uma função ou sub-rotina em uma linguagem como “C”. Eles são executados na ordem em que aparecem no código. A instrução seguinte, por exemplo, pode aparecer em um programa Forth:

WAKE.UP TRABALHO EAT.BREAKFAST EAT.DINNER JOGAR SLEEP

Observe que WAKE.UP tem um ponto entre o WAKE e UP. O ponto não tem nenhum significado especial para o compilador Forth. Simplesmente usando um ponto para ligar as duas palavras juntas para fazer uma só palavra. Os nomes das palavras por diante pode ter qualquer combinação de letras, números ou pontuação. Exemplo:

. “TROCAR # S! @ * ACEITO.

Aritmética

Os operadores aritméticos Forth trabalhar sobre os números atualmente no topo da pilha, usando notação polonesa reversa, você deve ordenar as operações na ordem de avaliação.

20 + (3 * 4) = 3 4 * 20 +

(100 + 50) / 2 = 100 50 + 2 /

(2 * 7) + (13 * 5) = 2 7 * 13 5 * +

Comentários

São feitos com \ ou entre parênteses ()

Usado mais para explicar o que acontece na atual linha

\ Comentário em Forth

Mais usado para explicar como procede uma função. (Comentário em Forth)

Operadores Lógicos:

0 para verdadeiro e -1 para falso

< menor

> maior

= igual

OR retorna verdadeiro se uma das duas são verdadeiras

AND retorna verdadeiro se as duas variáveis são verdadeiras

NOT retorna verdadeiro se o valor for invertido e falso se o valor não for invertido.

Condicionais

IF-ELSE-THEN

 : L (valor)
     0 < (testa se o valor e menor que zero)
     IF. (retorna verdadeiro)
     ELSE. (retorna falso)
     THEN.
 ;
 
 

CASE

 : Caso_de_teste
       CASE
          0 OF. ENDOF
          1 OF. ENDOF
          2 DE ENDOF
          DUP. . "Entrada inválida!"
       ENDCASE CR
 ;
 
 

Loop

BEGIN…UNTIL

  : contagem regressiva 
   BEGIN
	DUP. 	CR (valor da duração do LOOP)
	1 – DUP < 0 (até for menor que zero)
   UNTIL
  ;

DO…LOOP – vai imprimir “Ba” seguido de 4 “Na”

  : SPELL
    . “Ba”
    4 0 DO
              . “Na”
          LOOP
  ;

BEGIN WHILE REPEAT

  :função  (soma de N inteiros)
    Value 0
    BEGIN
	    OVER 0>
    WHILE
	    OVER +
	    SWAP 1 -
    REPEAT
    SWAP
  ;

Ultimas palavras

O trabalho foi feito a principio para que as pessoas tenham um leve conhecimento de como e a história da linguagem FORTH, desde sua área de atuação até mesmo a alguns comandos básicos.

Referências

http://www.forth.org

http://www.softsynth.com/pforth/pf_tut.php#Defining a New Word

http://www.forth.org/bournemouth/forth.html#2

 
forth-1-trabalho.txt · Last modified: 2012/03/19 23:49 by clp · [Old revisions]