Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Test de PCQ 1.1c
(Article écrit par Cédric Beust et extrait d'A-News (Amiga News) - juillet 1990)
|
|
Pourquoi PCQ ? Eh bien... "P" comme "Pascal", "C" comme "compilateur" et... "Q" comme l'initiale de son auteur qui
n'a pas voulu se casser la tête. Il avait en effet mieux à faire !
Un compilateur Pascal petit petit, mais... qui marche
D'accord, PCQ n'est pas encore un compilateur complet. Lui manquent les ensembles (set), les articles avec variante,
des messages d'erreurs plus explicites et un code un peu plus optimisé. J'ajouterai qu'il n'accepte pas les paramètres
de type procédure mais vous conviendrez avec moi que ces aspects ne sont pas vitaux.
Si vous avez suivi jusque-là, vous aurez probablement fait la déduction que PCQ accepte les includes, les articles,
les types énumérés, les pointeurs, les tableaux et les chaînes, tout cela en plus du minimum vital de tout compilateur
qui se respecte. Voilà pour la partie standard de Pascal.
Plus spécifiquement, PCQ vous autorisera à faire des références externes, des conversions de type à la Modula-2
(du genre 'char(20)') et également de déclarer vos "const", "type" et "var" dans n'importe quel ordre. Autre détail
qui a son importance : les sources sont fournis dans leur intégralité, en Pascal. PCQ est d'ailleurs capable de se
compiler lui-même (pour ceux que les questions métaphysiques empêchent de dormir et qui se demandent comment un
compilateur Pascal écrit en Pascal a pu naître, je les renvoie à la question fondamentale "qui est venu en premier :
l'oeuf ou la poule ?").
En utilisation
Voyons maintenant plus précisément comment procéder avec PCQ. Le compilateur s'appelle Pascal et fait environ 95 ko.
Il se lance simplement en spécifiant le fichier d'entrée (un ".p") et le fichier de sortie (un ".s").
Comme vous le voyez, il ne produit pas directement un module mais un source en assembleur (en texte, quoi).
Autre question : comment assemble-t-on le fichier produit afin d'obtenir un exécutable, et ce à moindres frais ?
Réponse : on fait appel au domaine public. En l'occurrence, l'assembleur utilisé est le bien connu A68K qui est
d'ailleurs fourni avec PCQ. Cet assembleur va donc produire un ".o" qu'il suffira de relier pour obtenir l'exécutable
promis quelques lignes plus haut. Et comment le relie-t-on ce ".o", hein ? Cette fois, je ne souffle plus. Vous
aurez sans aucun doute deviné qu'il s'agit du encore plus connu Blink, plébiscité par toutes les bonnes marques de compilateur.
Les exécutables produits ont une taille très raisonnable (du même ordre de grandeur que le MetaComCo pour être précis,
sauf que ce dernier produit du meilleur code). En revanche, si vous avez la curiosité de jeter un coup d'oeil sur le ".s"
généré par PCQ, vous vous apercevrez que celui-ci prête à sourire (parfois il va même jusqu'à donner). Il n'utilise
en tout et pour tout que deux registres dans les expressions, ce qui fait plutôt pauvre sur notre beau processeur qui
en possède huit. On n'est pas sur un 8086, que diable ! Enfin bref, c'est gratuit alors on ne peut pas dire qu'on
n'en a pas pour son argent...
PCQ possède cependant quelques caractéristiques qu'on regrette parfois de ne pas trouver sur les compilateurs Pascal
existants. Les types prédéfinis sont Integer, Short, Byte, Real, Char, Boolean, String, Address, Text et Enumerated.
L'adresse de n'importe quelle variable peut être récupérée à l'aide du "@", le résultat étant alors de type Address,
soit un pointeur. Sont également implémentées les constantes typées (exemple : CONST Pi: Real = 3.1415). Ne m'en
demandez pas plus, je ne vois pas l'intérêt d'une telle chose. Je suppose qu'il s'agit avant tout d'un souci de
compatibilité avec Turbo Pascal et Quick Pascal.
Un exemple (par Pascal Amiable)
Voici un petit exemple : nous allons ouvrir une fenêtre Intuition et tracer une série de cercles concentriques dans cette fenêtre.
Maintenant que vous avez tapé (ou copié) ce programme et que vous l'avez sauvegardé, par
exemple dans le répertoire source de la disquette PCQ: sous le nom de "test.p",
vous allez pouvoir le compiler, l'assembler et le relier pour en faire un exécutable.
Commençons par le compilateur. Pascal, le compilateur simple passe, convertit un source
Pascal en source assembleur. La directive de compilation est des plus simples, puisqu'il
suffit de taper "Pascal <source> <destination> [<-q>]", l'option -q limitant le
nombre de messages envoyé par le compilateur, aux seuls messages d'erreur. Pour compiler
notre exemple, nous taperons :
Pascal PCQ:source/test.p ram:test.asm
|
Une fois le programme compilé sans erreur, Pascal a généré en RAM: un source assembleur
tout à fait éditable et modifiable. En examinant ce code assembleur, on pourra certes dire
qu'il n'est pas réellement optimisé, mais ceci me semble normal dans la mesure où le compilateur
étant simple passe, l'optimisation du code généré est difficile. De plus, l'écriture d'un
compilateur n'étant pas chose aisée, ne jetons pas la pierre à l'auteur. Et puis à ce prix,
trouvez-moi quelque chose de mieux...
Il faut maintenant assembler le source assembleur généré pour créer un fichier objet,
l'assembleur proposé est le très célèbre a68k, qui est l'un des meilleurs dans la catégorie
dans le domaine public.
Sans rentrer dans le détail des options proposées, nous allons nous contenter d'assembler
l'exemple en tapant :
a68k ram:test.asm vnutest.o
|
Le fichier objet doit maintenant être relié, et c'est là qu'intervient le troisième
programme que nous avons copié, Blink. Il ne s'agit pas du célèbre éditeur de liens
du Lattice/SAS C, mais d'un éditeur de liens du domaine public. Nous allons utiliser pour
cela la syntaxe suivante :
blink ram:test.o to pcq:source/test library PCQ:pcq.lib
|
...et vous avez maintenant un exécutable dénommé "test", que vous allez vous empresser de
lancer. Pour automatiser le tout, il vous faudra créer un petit script AmigaDOS. L'auteur
nous en fournit un d'exemple qui remplit totalement son rôle. Le voici un peu remanié afin
de l'adapter à la disquette que nous avons créée.
Il se trouve dans le répertoire Test_PCQ, sous le nom de PL. Rappel : si vous créez votre
propre script, n'oubliez pas de positionner le bit "s" (pour script) par la commande "protect +s
<nom_du_fichier>". Ceci vous évitera de le lancer par la commande execute.
Un dernier mot
PCQ est livré avec les documentations complètes de Blink et A68K, des includes permettant de faire de la
programmation système sur Amiga, l'intégralité des sources permettant de le recompiler et un répertoire contenant
une vingtaine d'exemples de programmes.
Nom : PCQ 1.1c.
Développeur : Patrick Quaid.
Genre : compilateur Pascal.
Date : 1990.
Configuration minimale : Amiga OCS, 68000, 512 ko de mémoire.
Licence : gratuiciel.
Téléchargement : Aminet.
|
|