Pequena explanação sobre a arquitetura de Hall.
Um problema é resolvido através de um algoritmo, isto é, o espaço do problema é mapeado para o espaço do algoritmo fazendo-se abstrações em estruturas de dados e processos que manipulam essas estruturas de dados. As estruturas de dados são mapeadas em variáveis e os processos em funções.
Hall é estruturado, ou seja, ele permite a criação de rotinas isoladas contendo variáveis locais. Desse modo, os nossos algoritmos consistem em uma coleção de uma ou mais rotinas (funções) com variáveis locais. Uma função é composta de um nome, uma lista de parâmetros entre parênteses () e o bloco de código associado. O bloco começa com um abre chaves { e, é seguido de uma ou mais instruções finalizadas com ponto e vírgula, e termina em um fecha chaves }. Uma instrução começa com uma palavra reservada, tais como: se, caso, repita, enquanto, para ou então é uma expressão, tais como: x := 10, z := z + 2, leia(k), escreva (w).
Todos os nossos programas começam com uma chamada à função principal denominada algoritmo() e terminam com o último fecha chaves } dessa função. Quaisquer outras funções contidas no programa precisam ser chamadas direta ou indiretamente a partir da função principal. O fato de existir uma função principal é para informar ao interpretador Hall onde ele deve iniciar a execução do algoritmo.