Arquivo de etiquetas: pascal

Let’s Brainfuck in Pascal!

Com os devidos créditos à originalidade do criador desta linguagem, e ainda mais pela originalidade e não menor acertividade pelo nome dado, Brainfuck é um clássico do mundo exotérico da programação. É inegável que, numa não muito usual conversa de café acerca de linguagens exotéricas, Brainfuck é comummente a primeira referida. Com o seu princípio extremamente simples e sintaxe altamente minimalista, esta linguagem consegue fazer jus ao seu nome num piscar de olhos.

Não obstante a sua alta aplicabilidade no mundo… exotérico, talvez?, Brainfuck representa um exercício bastante apetecível para a implementação de um parser. Estando disponível na Internet o código-fonte Assembly do interpretador de Brainfuck, a sua implementação noutras linguagens recorrendo a diferentes paradigmas representa um carácter didáctico inegável.

Neste artigo – ao qual referências ao calão não irão faltar por força da circunstância – será feita a implementação de um interpretador de Brainfuck em Pascal, recorrendo unicamente ao paradigma procedural. Iniciemos então esta curiosa jornada!

Continuar a ler

Mini Calc for Linux

Mini Calc for Linux é um projecto com um objectivo simples: oferecer poder de cálculo em ambiente GNU/Linux de forma minimalista. As ferramentas disponibilizadas, para além do cálculo numérico e avaliação de expressões, passam também pela análise trigonométrica, manipulação de listas, cálculo estatístico, randomização, entre outras. Podem ser adicionadas novas funcionalidades através de plugins e que se encontram neste momento em fase experimental.

O programa inclui dois modos:

  • O modo interactivo, herdado da versão para Windows, e
  • O modo não interactivo, ideal para utilizar em scripts bash.

Continuar a ler

Pascal – array de argumentos

A definição da linguagem Pascal, desde os seus primórdios, estabelece regras bastante rígidas acerca da passagem de argumentos a uma função ou procedimento. No seu conjunto, uma das consequências destas regras é a impossibilidade de se implementarem funções variádicas, isto é, funções sem um número definido de argumentos. Na prática, isto traduz-se na possibilidade de se poder fornecer virtualmente uma infinidade de argumentos à função, não havendo a restrição de ser necessário passar apenas N argumentos em determinada ordem e com determinados tipos.

Várias linguagens permitem a implementação de funções variádicas, como por exemplo C e até Haskell (com recurso a alguns truques na definição de tipos de dados e suas heranças).

 O facto de Pascal não permitir a implementação de funções variádicas pode suscitar algumas dúvidas. Métodos standard que formam a base do Pascal são aparentemente variádicos, como o writeln e o readln. No entanto, estes métodos não são exactamente funções ou procedimentos. A sua construção está a cargo do próprio compilador em compile time, não sendo uma característica da linguagem.

Continuar a ler

Pascal – operator overloading

Várias são as linguagens nas quais podemos fazer overload de funções; esta funcionalidade permite que uma função possua várias versões que admitam diferentes conjuntos de argumentos, ficando o compilador encarregue de seleccionar qual dos overloads é o correcto aquando da invocação dessa função. Uma das linguagens com essa capacidade é o Object Pascal moderno.

Em Pascal, este tipo de polimorfismo também se aplica aos operadores, os quais podem de igual forma ser overloaded.

Na definição da linguagem Pascal segundo a documentação do Free Pascal, os tokens (palavras que constituem o código do nosso programa) podem pertencer a várias categorias, cada uma delas com funções ou características particulares. Uma dessas categorias é a dos operadores, os quais são um símbolo ou conjunto de dois símbolos, com uma função específica, admitindo um ou dois operandos e devolvendo um resultado. Os operadores são habitualmente funções com nomes e sintaxe especiais (nomes compostos por símbolos e invocação infixa, por oposição à tradicional invocação prefixa).

Continuar a ler

Pascal – tipo de dados Variant e tipos genéricos

São várias as linguagens cujas variáveis são dinâmicas pelo facto de não terem um tipo de dados bem definido na hora da compilação, sendo antes verificados em runtime. Em várias ocasiões, é útil ter uma variável cujo tipo de dados varie, e nas linguagens estaticamente tipadas isso pode tornar-se um pouco trabalhoso ou mesmo impossível.

Neste campo, Pascal tem vindo a evoluir, chegando a um pequeno conjunto de soluções relativamente simples e muito versáteis: o tipo de dados Variant, que é uma forma de tipagem dinâmica, e os tipos de dados genéricos, que permitem abstrair certos conceitos que poderão mais tarde ser especializados – falaremos deste aspecto mais a fundo na continuação do artigo. Note-se que os tipos genéricos são, mais especificamente, classes genéricas.

Todo o artigo centra-se no Free Pascal (FPC), versão 2.6.0, podendo haver diferenças para o Delphi e/ou outros compiladores.

Programação Orientada aos Objectos em Pascal

Introdução

Há quem pense no Pascal como uma linguagem fraca e antiquada que não acompanhou os novos tempos. Mas, na realidade, o Pascal evoluiu em vários dialectos, sendo o mais proeminente o Delphi.

Hoje em dia é possível programar nesta linguagem segundo o paradigma POO (Programação Orientada aos Objectos), programar DLLs (Dynamic Link Libraries), fazer programas não só em consola mas também com recurso a GUI. Permite igualmente a ligação a bases de dados, como o MySQL, bem como a criação de IDEs. O grande exemplo é o, infelizmente descontinuado, IDE Dev-Pascal, da Bloodshed, um IDE open-source, escrito totalmente em Delphi e recorrendo a uma velha versão do FPC (Free Pascal Compiler) e do GPC (GNU Pascal Compiler) como compiladores opcionais integrados.

Continuar a ler