Comment comstackr picoProlog à partir du code source?

Je suis un étudiant en informatique et j’apprends la programmation logique avec Prolog.

J’ai trouvé un interpréteur Prolog intéressant, picoProlog ( http://spivey.oriel.ox.ac.uk/corner/Logic_Programming ).

Pour en savoir plus sur Prolog, j’essaye de comstackr leur code source, mais j’ai échoué.

Dans cette page Web, ils ont dit:

La source de l’interprète est écrite dans un dialecte minimal de Pascal, évitant de nombreuses fonctionnalités, notamment les pointeurs, mais utilisant des macros pour surmonter certaines des limitations de Pascal, dans un style inspiré du livre Software tools in Pascal de Kernighan et Plauger. Il est livré avec un traducteur du dialecte Pascal en C qui peut être utilisé pour construire l’interpréteur et également pour le processeur de macros nécessaire.

Pour construire l’interpréteur sur une machine Linux , extrayez simplement le fichier tar et tapez make. La construction se déroule en plusieurs étapes:

  1. Premièrement, le traducteur Pascal-to-C ptc est construit à partir de la source C, y compris un lexer et un parsingur syntaxique écrit avec lex et yacc. Le fichier LISEZMOI donne quelques détails sur le sous-ensemble très restreint de Pascal accepté par ce traducteur.
  2. Ensuite, ptc est utilisé pour construire le processeur de macros ppp.
  3. Enfin, l’interpréteur picoProlog est construit à partir du code source du fichier pprolog.x en développant d’abord les macros en utilisant ppp pour obtenir un fichier pprolog.p, puis en traduisant en C avec ptc et en compilant enfin le code C.

Droits d’auteur des textes et des logiciels © JM Spivey, 1996, 2002, 2010.

Ils ont dit à propos de la compilation sur Linux uniquement , donc je ne sais pas comment comstackr ce code source sur une machine Windows. Puis-je le comstackr avec Turbo Pascal 7.0 (sans aucune exigence) sous Windows XP ? Pouvez-vous supprimer une partie du script pour la compilation de Pascal uniquement?

J’ai trouvé cette question en cherchant sur Google, et même si elle est ancienne, j’ai pensé qu’il serait utile d’append une réponse définitive de l’auteur du programme.

Il n’est en effet pas difficile de faire comstackr picoProlog avec le compilateur Free Pascal. J’ai incorporé les suggestions de Marco dans le code source, corrigé un petit bogue révélé et ajouté une solution de contournement pour une fonctionnalité étrange de Free Pascal. Les résultats peuvent être trouvés sur la page BitBucket:

http://bitbucket.org/Spivey/pprolog

avec des instructions pour la construction du fichier README.

Remarque: J’ai construit cela avec Free Pascal sous Linux sur x86_64, mais je ne l’ai pas testé sous Windows. Je ne vois pas pourquoi cela ne fonctionnerait pas.

Pour éviter de passer plus de temps à exécuter le démarrage de P2C / PTC alors que vous êtes probablement uniquement intéressé par l’interpréteur et non par son démarrage * nix, je pense qu’il est plus facile d’oublier le travail de PTC et de se concentrer pour la compilation / le travail des composants Pascal. avec FPC 2.6.x. (la procédure ci-dessous a pris 10 minutes), générant un fichier EXE Windows autonome avec 10 à 20 ajouts de lignes de code.

Commencez avec ppp, hmm, qui comstack (fonctionne nand!) Hors de la boîte:

D:\dls\prlg\pprolog>fpc ppp.p Free Pascal Comstackr version 2.6.2 [2013/02/12] for i386 Copyright (c) 1993-2012 by Florian Klaempfl and others Target OS: Win32 for i386 Compiling ppp.p Linking ppp.exe 394 lines comstackd, 0.1 sec , 30352 bytes code, 1692 bytes data 

Le code semble être destiné à recevoir son entrée. Nous transportons pprolog.x à travers lui (ppp) et celui-ci (pprolog.pp) le comstack presque. Il y a quatre problèmes, mais ils sont tous réparables en ajoutant du code en haut et en ne modifiant pas le code d’origine (marqué avec MVDV: dans le source)

  1. Certaines erreurs de vérification de plage parce que le type entier est trop petit pour l’espace de stack de 1 Mo configuré. Cela interdit l’utilisation de Turbo Pascal, mais nous pouvons contourner ce problème en définissant un entier comme étant un entier long.
  2. Il semble supposer que les fonctions de transfert n’ont pas besoin de répéter leurs arguments, alors qu’elles sont généralement corrigées dans FPC.
  3. Dans la fonction finale de (“initialize”), certaines fonctions non standard de la bibliothèque ptc sont empruntées à C (argv, argc) au lieu de leurs équivalents pascal typiques. Fixé.
  4. (rapporté par l’auteur original après le test) ParseFactor a une récursion à droite qui est remplacée par la lecture du résultat. Activer le mode TP ({$ mode tp} au-dessus de la ligne uses), ou add () pour lever l’ambiguïté

Après cela, pprolog.pp comstack avec FPC:

 Free Pascal Comstackr version 2.6.2 [2013/02/12] for i386 Copyright (c) 1993-2012 by Florian Klaempfl and others Target OS: Win32 for i386 Compiling pprolog.pp pprolog.pp(487,19) Warning: unreachable code pprolog.pp(532,19) Note: Local variable "dummy" is assigned but never used Linking pprolog.exe 2150 lines comstackd, 0.1 sec , 84400 bytes code, 13932 bytes data 1 warning(s) issued 1 note(s) issued 

Quelques notes:

  1. UNTESTED
  2. Je ne sais pas si la gamme argv / argc est exacte. (0..argc-1 lorsque paramcount est basé sur 1, etc.) Cochez si nécessaire.
  3. Le système de chaîne est antérieur au type TP et est convoluté (probablement à cause de PTC, voir README), je ne sais pas si cela fonctionnera.

J’ai mis le résultat, en compilant le code source, à http://www.stack.nl/~marcov/files/pprolog.pp

Bonne chance!

Étant donné le nombre de variantes de Pascal qui existent, mon sentiment est qu’il est plus facile de se procurer un environnement Linux que d’ajuster le code source de Pascal en fonction du compilateur que vous avez. Et ce n’est que la première étape.

Obtenir un environnement Linux? Essayez une virtualbox – https://www.virtualbox.org