
Pascal ZIM! verso 4.04 
========================
Bem vindo ao fascinante mundo da linguagem Pascal!
=====================================================

1. Apresentao
2. Consideraes de uso
3. Histrico do compilador
4. Subconjunto da linguagem Pascal implementado
5. Download
6. Procedimento de instalao
7. Agradecimentos
8. Comentrios, crticas e sugestes


=====================================================
1.Apresentao

  A linguagem PASCAL foi desenvolvida pelo professor 
  Niklaus Wirth no ano de 1972, em Genebra, Sua. O 
  nome da linguagem, Pascal, foi uma homenagem ao 
  filsofo e matemtico Blaise Pascal ( 1623-1662 ), 
  inventor da primeira calculadora mecnica. O desejo 
  de Wirth ao criar a linguagem Pascal era dispor, 
  para o ensino de programao, de nova linguagem que 
  fosse simples, coerente e capaz de incentivar a 
  confeco de programas claros e facilmente legveis, 
  favorecendo a utilizao de boas tcnicas de 
  programao. 

  A linguagem Pascal se tornou amplamente conhecida e
  utilizada com o lanamento da mundialmente famosa 
  srie de compiladores Turbo Pascal pela Borland, em 
  1985, devido a uma combinao de simplicidade e 
  poder. 

  O compilador PASCAL ZIM!, desenvolvido no 
  Departamento de Cincias da Computao da 
  Universidade de Braslia,  fruto de mais de 4 anos 
  de pesquisa e trabalho na rea de algoritmos, 
  tradutores e linguagens de programao. Adotado como 
  ferramenta de apoio ao ensino e aprendizagem da 
  linguagem Pascal pelos alunos matriculados no curso 
  de Introduo  Cincia da Computao nesta 
  Instituio, o compilador comeou a ser utilizado no 
  primeiro semestre do ano 2000.

  No segundo semestre de 2001 a ferramenta passou a 
  ser utilizada pelos alunos do Instituto de Educao
  Superior de Braslia - IESB para o aprendizado da 
  disciplina Algoritmos e Programao Estruturada.

  A ferramenta foi exaustivamente testada, mas ainda 
  assim no se encontra livre de erros de implementao. 
  A correo destes ser efetuada to breve quanto sua 
  descoberta, levando  disponibilidade de verses mais 
  atualizadas do compilador.

  O compilador implementa um subconjunto da linguagem 
  Pascal e contm as estruturas de dados, funes e 
  comandos mais utilizados por iniciantes no estudo 
  dessa linguagem. O arquivo de ajuda que acompanha o 
  produto especifica as instrues suportadas. 

  Crticas e sugestes so bem vindas!

  O PASCAL ZIM! foi concebido com finalidade meramente 
  educacional e sua distribuio  livre. 


=====================================================
2.Consideraes de uso

  O compilador PASCAL ZIM! foi concebido para fins 
  educacionais e sua distribuio  gratuita. Ele no 
  pode, sob nenhuma circunstncia, ser comercializado.

  O compilador foi exaustivamente testado, mas no se 
  encontra livre de erros de implementao. Quando da 
  descoberta destes sero efetuadas as devidas 
  correes, o que acarretar na disponibilizao de 
  verses mais atualizadas.

  O compilador implementa um subconjunto da linguagem 
  Pascal e contm as estruturas de dados, funes e 
  comandos mais utilizados por iniciantes no estudo 
  dessa linguagem. O arquivo de ajuda que acompanha 
  o produto especifica as instrues suportadas. 
  Crticas e sugestes so bem vindas!


=====================================================
3.Histrico do compilador

  O desenvolvimento do Pascal ZIM! vem sendo feito de 
  forma gradativa, e cada nova verso disponibilizada 
  traz consigo um novo conjunto de recursos e/ou
  estruturas da linguagem da linguagem Pascal. 
  
  Abaixo  exibido um breve resumo do esforo de 
  desenvolvimento do compilador:

--VERSO 4.04 (24/01/2003) ----------------------------

 - A pedido de inmeras pessoas... Nessa verso o Pzim 
    capaz de gerar arquivos executveis! 
   O arquivo executvel contm, alm do cdigo do 
   interpretador, o cdigo compilado do programa fonte. 
   Dessa forma, os executveis gerados pelo compilador 
   no chegam a ser so to pequenos quanto os gerados 
   por outros compiladores mais avanados, como o Turbo 
   Pascal da Borland, que geram cdigo assembler... 
   Mas o importante  que agora o Pzim pode agora ser 
   utilizado para construir programas reais! :~ 

 - Nessa verso o Pzim suporta comentrios delimitados
   pelos marcadores (* e *)

 - Benjamin y sus alunos :) reportaram que as funes
   round, trunc e abs no estavam funcionando da forma 
   correta para round(1.2), trunc(-0.05) e abs(0.453). 
   Essas funes foram ento reescritas.

 - Daniel Emilio apontou um exemplo de vetores onde o 
   Pzim no se comportava como em outros compiladores,
   a exemplo o Turbo Pascal:

   type nota = array [1..3, 1..4] of real;

   vnota[1,1]:=4.5;  // Vlido na verso 4.03
   vnota[1][1]:=4.5; // No aceita na verso 4.03 :( 

   O tratamento de vetores foi completamente revisado,
   e o comportamento desejado foi implementado nesta
   nova verso. 

 - Meus alunos do IESB reportaram que os itens do menu 
   do Pzim no estavam sendo corretamente acionados 
   pelas teclas CTRL+<algo>. Isso foi consertado nesta 
   nova verso. Obrigado pela ajuda, meus pupilos! :~

 - Nessa verso  possvel acessar a ajuda rapidamente,
   colocando o cursor do editor sobre uma palavra e 
   pressionando F1. Por exemplo, podemos posicionar o 
   cursor sobre a palavra "while" e pressionar F1 para
   abrir a ajuda no tpico referente a este comando.

 - Muito do cdigo do compilador foi reescrito, com 
   a inteno de portar o cdigo (originalmente 
   escrito em C puro) para C++. O analisador lxico, 
   o analisador sinttico e o interpretador foram 
   revisados e reescritos. Algumas revises foram 
   tambm efetuadas no analisador semntico.
 

--VERSO 4.03 (04/08/2002) ----------------------------

  - Implementados os comandos break e continue.
  - Editor clssico (ao estilo do Turbo Pascal)
  - O interpretador de cdigo e boa parte do analisador
    semntico foram reescritos.
  - Muitos bugs foram descobertos e consertados.  


--VERSO 4.02 (11/04/2002) ----------------------------

  - Agora ficou mais fcil trabalhar com seus programas
    escritos em Pascal. Foi adicionado ao compilador o 
    Pascal ZIM! Explorer, um utililitrio que permite a 
    navegao pelo sistema de arquivos do Windows para 
    localizao de arquivos com extenso pas.

  - Agora expresses contendo os operadores AND e OR so
    avaliadas em curto-circuito, a exemplo do compilador
    Turbo Pascal. Dessa forma, se o primeiro operando do 
    AND for avaliado em false, o segundo no  analisado. 
    Tambm, se o primeiro operando do OR for avaliado em
    true, o segundo o operando no  analisado.

  - Agora o comando case admite intervalos como 1..5 nas
    opes de seleo. 

  - Weber - Rio de Janeiro - enviou um email reportando 
    que o comando de atribuio soma:= exp(ln(5)*2) no 
    estava sendo executado adequadamente. Graas a este
    email consegui detectar e corrigir um erro que vinha
    sendo gerado na avaliacao de certas expresses, 
    particularmente as expresses que faziam uso de 
    funes matemticas como exp, ln, sin, etc. Obrigado 
   pela ajuda na deteco destes erros, Weber!


--VERSO 4.01 (11/04/2002) ----------------------------

  - O comando case agora  reconhecido pelo compilador. 

  - Foi implementado o comando readln ; ( equivalente a 
    um readkey ) 

  - Foram implementados os comando delay e val. 
    Obrigado, Luiz Marcelo, pelas sugestes, e por 
    ajudar na validao da verso 4.01 beta!

  - Ricardo Costa enviou um email reportando dois erros
    de implementao envolvendo o analisador semntico. 
    Primeiro erro: estava sendo gerando uma instruo 
    errada para comparao < entre reais. Segundo erro: 
    uma constante real, declarada em const, estava 
    perdendo sua preciso decimal. Obrigado pela ajuda 
    na deteco destes erros, Ricardo, e por ajudar a 
    validar a verso 4.01 beta!

  - At a verso 4.0 o primeiro caractere de uma string 
    estava sendo referenciado pela posio zero (como 
    em Java e C++). Nessa nova verso, esse caractere  
    referenciado pela posio um (de acordo com a 
    linguagem Pascal padro).

  - Pequenos problemas foram detectados e corrigidos.

  - Foram adicionados templates para os comandos case, 
    readln e writeln.

  - Foi adicionado um atalho para a calculadora do 
    Windows.

  - Foi adicionada opo Ir para a linha... 

  - O compilador agora pede uma confirmao do usurio 
   antes de sobrescrer um arquivo j existente, na opo 
   Salvar Como.


--VERSO 4.0 (25/01/2002) ----------------------------

  O editor do compilador foi consideravelmente 
  aprimorado, levando  verso 4.0! Agora: 
  
  - Os elementos lxicos do programa fonte apresentam 
    uma formatao prpria, no estilo de compiladores 
    como o Turbo Pascal da Borland.  

  - O editor apresenta uma barra vertical mostrando 
    as linhas do programa fonte.  

  - O editor disponibiliza agora templates para os 
    comandos mais utilizados.  

  -  possvel trabalhar em vrios arquivos fonte 
    ao mesmo tempo.  

  - Foi removida a opo de alterar a fonte e a cor 
    de fundo do editor.  


  Essas alteraes no seriam possveis sem a 
  considervel ajuda de Andrei Prygounkov, autor da 
  biblioteca de componentes R&A Library. 
  Thanks a lot, Andrei! 

  Alm disso, nessa nova verso, foram adicionados: 
  
  - O comando randomize.

  - As funes upcase, random e readkey (antes 
    s existia o comando readkey). 


--VERSO 3.16 (13/11/2001) ---------------------------

  - Foram identificados e corrigidos alguns pequenos 
    bugs envolvendo alocao dinmica de memria pelo 
    compilador. Essa verso est muito menos sujeita a 
    problemas e exibio de mensagens de erro dessa 
    natureza (principalmente quando o programa  
    fechado :) ).

  - Foram corrigidas algumas falhas associadas ao 
    tratamento de arquivos. Esta nova verso  
    imprescindvel se voc est construindo programas 
    que fazem uso de arquivos.

  - Foram corrigidas algumas pequenas falhas na 
    passagem de parmetros para funes. At a verso 
    anterior era possvel declarar uma funo que 
    espera n parmetros e cham-la sem passar nenhum 
    dos parmetros. Tambm, era possvel chamar uma 
    funo sem parmetros passando a ela parmetros. 
    Esse tratamento de parmetros foi incorporado  
    nova verso do compilador. Agradeo ao aluno 
    Eolisses Ferreira Leopoldino, IESB, pela 
    importante ajuda ao detectar a falta de tratamento
    destes casos de passagem de parmetro!


--VERSO 3.15 (08/10/2001) -----------------------------

  - Foram implementadas no editor as opes de localizar 
    e substituir. Tambm um problema envolvendo a troca 
    da fonte usada pelo editor foi corrigido. 


--VERSO 3.14 (02/10/2001) -----------------------------

  - Essa nova verso corrige alguns pequenos bugs. Alm 
    disso, se a fonte ou a cor de fundo utilizada pelo 
    editor for modificada a nova configurao 
    automaticamente aparecer quando o programa for 
    executado.

  
--VERSO 3.13 (27/08/2001) -----------------------------

  Depois de mais de um ano sem uma nova atualizao, o 
  Pascal ZIM! foi recompilado. Foi includa a 
  possibilidade de comentar uma linha de cdigo com //, 
  de forma semelhante s linguagens C e Java.


--VERSO 3.12 (07/11/2000) -----------------------------

  - O analisador lxico foi totalmente reescrito. Agora 
     possvel executar um programa Pascal sem que seja 
    necessrio salvar o arquivo fonte. Com essa mudana 
    o tempo de compilao diminuiu consideravelmente. 

  - Foi corrigido um erro na implementao da funo abs 
    para reais - a funo estava truncando reais. 

  - Erros envolvendo a leitura de dados de arquivos 
    foram encontrados e consertados. 

  - Foi implementado um menu popup para o editor, 
    contendo funes como copiar, colar e executar! 

  - Outros pequenos erros foram consertados. 

  Agradeo ao professor Homero ( Departamento de 
  Cincia da Computao da Universidade de
  Braslia ) pela importante ajuda em sugestes, 
  teste e deteco de erros no compilador! 


--VERSO 3.11 (15/08/2000) -----------------------------

  - Novos erros envolvendo a passagem de parmetros 
    foram encontrados e corrigidos. 

  - Nessa nova verso  possvel declarar os intervalos 
    de um vetor atravs de constantes inteiras 
    declaradas na seo const, como em: Const max = 5 ;

    Var vetor : array [ 1 ... max , 1.. max ] of integer; 

  - Foi implementado um menu Popup para o Editor. 
    Atravs desse menu  possvel acessar facilmente 
    os comandos Editar, Recortar e Colar, alm das 
    funes de formatao da cor de fundo e da fonte 
    do editor. Atravs desse menu  possvel tambm 
    acessar a funo Executar! 

  - O compilador guarda agora a informao sobre os 
    cinco ltimos arquivos abertos. 


--VERSO 3.10b (07/06/2000) -----------------------------

  - Todo o cdigo envolvendo passagem de parmetros 
    por valor e referncia para funes e procedimentos 
    foi reescrito, e inmeros erros de implementao 
    foram corrigidos. Muitas novas possibilidades de 
    passagem, antes no previstas, foram implementadas. 

  - O uso do comando read para leitura de cadeias em 
    arquivos texto foi modificado, de forma a funcionar 
    como no compilador Turbo Pascal da Borland. Agora 
    uma sequncia de comandos como: 

      Var cadeia : string [ 20 ] ; 
      ....
      Read ( arquivo , cadeia )


    L, do arquivo associado a arquivo, uma cadeia 
    contendo 20 caracteres, ou todos os caracteres 
    contidos em uma linha do arquivo se a linha conter 
    menos de 20 caracteres. 

  - Novos bugs foram identificados e corrigidos. 


--VERSO 3.09 (07/06/2000) ------------------------------

  - Foram detectados e corrigidos um conjunto de bugs 
    que o compilador vinha trazendo at esta verso. 
    Anteriormente a execuo de determinados programas 
    causava estouro de memria, fazendo com que o 
    compilador finalizasse prematuramente. Com a correo 
    de alguns destes bugs, o compilador se tornou mais 
    estvel ! Agradeo ao aluno Rafael Faria Braga, UnB, 
    pela importante ajuda na deteco destes erros!

  - Revisado o comando Assign. 


--VERSO 3.08 (06/06/2000) ------------------------------

  - Os comandos para abertura de arquivos ( Reset, 
    Rewrite, Append ) foram revisados.

  - A funo EOF foi revisada. 

  - Foi implementada a escrita de caracteres acentuados. 
    Agora  possvel imprimir um literal como: 

    writeln ( 'Essa escrita correta s  possvel a 
               partir dessa nova verso !' ) ;


--VERSO 3.07 (30/05/2000) -------------------------------

  - Foram revisadas as operaes de leitura de dados 
    (read) em arquivos.

  - O esquema usado para reportar mensagens de erro foi 
    reestruturado. Agora as mensagens de erro aparecem 
    na janela do editor.


--VERSO 3.06 (24/05/2000) -------------------------------

  - Foram revisadas as definies de tipos atravs da 
    palavra reservada Type. Alguns pequenos bugs foram 
    encontrados e consertados.

  - Foi corrigido um bug envolvendo a leitura de mltiplas 
    variveis no comando read e readln.

  - Foram reescritas as rotinas de adio e impresso de 
    cadeias.

  - Foi implementada a verificao de diviso por zero.


--VERSO 3.05 (11/05/2000) -------------------------------

  - Foi habilitado o uso dos comandos for...to e 
    for...downto para variveis do tipo char .

  - O operador / foi revisado. A diviso de dois inteiros, 
    at a verso anterior do compilador, estava gerando 
    uma instruo div no processo de diviso dos inteiros.

  - A definio das cadeias de caracteres (strings) foi 
    revisada. Agora  possvel acessar elementos 
    individuais das cadeias. 

  - Todas as operaes envolvendo cadeias de 
    caracteres foram revisadas.

  - O comando de atribuio foi revisado.

  - As operaes envolvendo vetores foram revisadas. 
    Alguns bugs foram encontrados e consertados.


--VERSO 3.04 (02/05/2000) --------------------------------

  - Foi desabilitada a opo de criao obrigatria do 
    arquivo xxx.ZIM. 

  - Foram revisadas as expresses lgicas. Pequenos 
    bugs foram consertados.
 
  - Foram revisados os comandos de leitura e escrita 
    em arquivo.

  - Foi implementada a especificao de parmetros 
    formatadores para os comandos write e writeln. 
    O compilador, nessa nova verso, reconhece um 
    comando Pascal como:

    writeln ( 3.141516 : 3 : 2 ) ;

  - O compilador, nessa verso, aceita comandos 
    writeln com a seguinte sintaxe :

    writeln ;

  - O tpico referente aos comandos write e writeln 
    no arquivo de help foi atualizado.


--VERSO 3.03 (18/04/2000) -------------------------------

  - Foram atualizadas as mensagens geradas para os 
    erros sintticos do compilador. Agora os erros 
    sintticos so reportados mais acuradamente.


--VERSO 3.02 (17/04/2000) --------------------------------

  - O arquivo de help foi reescrito e atualizado com 
    as novas funes implementadas na verso 3.01.

  - Foi corrigido um pequeno bug que fazia com que o 
    compilador travasse ao executar determinados 
    programas. 


--VERSO 3.01 (13/04/2000) --------------------------------

  - Foram implementadas as funes ln, exp, sqr, sqrt, 
    abs, trunc, round, sin, cos, arctan, odd, succ, 
    pred, predefinidas na linguagem Pascal. 

  - Foram implementados os comandos de incremento e 
    decremento de variveis inc e dec. 

  - Foi implementado o suporte a mltiplas entradas 
    nos comandos read e readln. 


--VERSO 3.0 (fevereiro de 2000) --------------------------

  - O compilador foi portado para C++ Builder, e embutido 
    em um ambiente de editorao visual; 

  - Inmeros bugs foram identificados e consertados; 

  - Foi abolida a chamada ao compilador via linha de 
    comando. 


--VERSO 2.0 (dezembro de 1999) ---------------------------

  - O programa responsvel por interpretar as instrues 
    geradas pelo compilador foi embutido no mesmo 
    ambiente do compilador; 

  - O subconjunto da linguagem Pascal implementada no 
    compilador foi largamente expandida;. 
 
  - Foi desenvolvido um ambiente de editorao visual 
    ( em ambiente Delphi ) capaz de se comunicar com 
    o compilador via linha de comando; 

  - Foi criado um arquivo de ajuda contendo a definio 
    sinttica dos tipos, expresses, comandos e 
    estruturas da linguagem Pascal implementada pelo
    compilador. 


--VERSO 1.0 (dezembro de 1998) ---------------------------

  - Foi implementada a primeira verso do compilador, 
    em linguagem C, consistindo de um programa capaz 
    de traduzir um programa fonte em um programa 
    objeto (compilador) e um programa capaz de 
    interpretar e executar programas objetos gerados 
    pelo compilador; 


===========================================================
4.Subconjunto da linguagem Pascal implementado 


  O compilador Pascal ZIM! : 

  - Suporta os tipos predefinidos integer, char, boolean, 
    real, string.

  - Permite a utilizao dos seguintes tipos 
    estruturados: vetor (array) e registro (record) 

  - Trabalha com constantes inteiras, reais, lgicas 
    e literais; 

  - Reconhece os seguintes operadores: 

          - Aritmticos: +, - , *, /, DIV, MOD 

          - Lgicos: NOT, AND, OR 

          - Condicionais: =, <>, >, >=, <, <= 


  - Reconhece os seguintes comandos: 

          - Comandos de atribuio 

          - Comandos de repetio: 
            repeat, while, for .. to, for .. downto 
     
          - Comandos condicionais: 
            if .. then, if .. then .. else 

          - Comandos envolvendo arquivos: 
            open, reset, rewrite, append, close 

          - Comandos de entrada e sada: 
            read, readln, write, writeln 

          - Outros: 
            textcolor, textbackground, clrscr, readkey, 
            inc, dec, randomize, delay, val 


  - Reconhece as seguintes funes: 

          - abs 
          - arctan 
          - chr 
          - cos 
          - eof 
          - exp 
          - length 
          - ln 
          - odd 
          - ord 
          - pred 
          - random
          - readkey
          - round 
          - sin 
          - sqr 
          - sqrt 
          - succ 
          - trunc 
          - upcase


  - Permite a definio de funes e procedimentos, 
    suportando : 

         - Recursividade 

         - Aninhamento 

         - Passagem de parmetros por valor e/ou 
           referncia 


===========================================================
5.Download

  Os arquivos necessrios para a instalao do PASCAL 
  ZIM! podem ser obtidos a partir do endereo: 
   
  http://www.iesb.br/ae/adm/luizcurado/PascalZIM


===========================================================
6.Procedimento de instalao

  Aps copiar o arquivo Pzim.zip para o seu disco local 
  (download do arquivo) siga as seguintes instrues: 

  - Utilize o Winzip (ou outro utilitrio capaz de 
    descompactar arquivos zip) para descompactar o 
    arquivo que voc pegou no site. 
 
  - Procure pelo arquivo Setup.exe e execute-o.

  Durante o processo de instalao ser criada a 
  pasta c:\PZIM. 

  Obs. O processo de instalao no adiciona 
       arquivos .dll nas pastas do windows.


===========================================================
7.Agradecimentos


  O desenvolvimento do Pascal ZIM! contou com a 
  colaborao, ajuda e apoio de inmeras pessoas:

  - Professor Pedro Rezende, do Departamento de 
    Cincia da Computao da Universidade de 
    Braslia, que foi meu orientador na disciplina 
    Tradutores durante minha graduao, e com 
    quem aprendi conceitos fundamentais para 
    o desenvolvimento deste trabalho. 

  - Professora Maria Emlia, do Departamento de 
    Cincia da Computao da Universidade de 
    Braslia, que foi minha orientadora no 
    projeto final de graduao, e que acompanhou 
    todo o processo de implementao e definio 
    da documentao terica necessria para 
    o desenvolvimento da verso 2.0 do compilador. 

  - Meus ex-alunos do curso de Introduo a Cincia 
    da Computao (turma L) na Universidade de 
    Braslia no primeiro semestre de 2000, que 
    utilizaram o compilador nesse perodo e 
    contriburam de forma significativa para 
    deteco de erros e para o desenvolvimento do 
    compilador. Obrigado, meus grandes beta-testers!

  - Professor Homero Picollo, do Departamento de 
    Cincia da Computao da Universidade de 
    Braslia, que contribuiu de forma considervel 
    para a descoberta de erros de implementao, 
    sugerindo tambm inmeras sugestes. 

  - Minha mulher, Valquria, que acompanhou todo 
    o desenvolvimento deste trabalho, 
    incentivando-me em cada pequena conquista e 
    descoberta, que trouxe alegria, amor e 
    ternura para meus dias, tornando possvel a 
    concluso de cada nova verso. 

  - Todos os meus alunos do curso de Algoritmos 
    e Programao Estruturada, no Instituto de 
    Educao Superior de Braslia (IESB), que 
    utilizaram o compilador no aprendizado da 
    linguagem Pascal.

  - Andrei Prygounkov, autor da biblioteca de 
    componentes R&A Library, que contribuiu para 
    o aprimoramento significativo do editor do 
    compilador.

  - A todos os alunos e professores da Universidade 
    de Braslia, do IESB, e tambm a todas as  
    pessoas que utilizaram (e esto utilizando :) ) 
    o compilador para fins educacionais e que, de 
    alguma forma, contribuiram para o desenvolvimento 
    desse trabalho. 

  A todas essas pessoas gostaria de expressar aqui 
  minha eterna gratido. Esse trabalho no seria 
  possvel sem a significativa contribuio de 
  vocs. 

  Muito obrigado!


===========================================================
8.Comentrios, crticas e sugestes

  Sua opinio  importante! Dvidas, comentrios, 
  sugestes e crticas so bem vindos!

  Envie um email para: pascalzim@yahoo.com.br

  



