2009-12-22 22 views
7

que je voulais expérimenter avec le Shakespeare programming language, donc je l'ai téléchargé et exécuté à partir here le Makefile en utilisant cd spl-1.2.1Make.et l'exécution du Compiler traducteur langage de programmation Shakespeare spl2c sous Mac OS X 10.6 Résultats des avertissements/erreurs

La compilation de spl2c exécute avec des avertissements de couple:

scanner.l:600: warning, rule cannot be matched 
<stdout>:5808: warning: ‘yyunput’ defined but not used 

Et puis, quand il tente de compiler tous les tout exemples se détraque:

../spl/bin/spl2c <fibonacci.spl> fibonacci.c 
Warning at line 19: equality expected 
Warning at line 28: equality expected 
Warning at line 30: comment expected 
Warning at line 30: comment expected 
Warning at line 30: comment expected 
Warning at line 30: comment expected 
Warning at line 32: comment expected 
Warning at line 32: comment expected 
Warning at line 32: comment expected 
Warning at line 32: comment expected 
Warning at line 34: comment expected 
Warning at line 34: comment expected 
Warning at line 34: comment expected 
Warning at line 34: comment expected 
Warning at line 36: comment expected 
Warning at line 36: comment expected 
Warning at line 37: comment expected 
Warning at line 37: comment expected 
Warning at line 37: comment expected 
Warning at line 37: colon expected 
Warning at line 40: equality expected 
Warning at line 51: comment expected 
Warning at line 51: comment expected 
Warning at line 51: comment expected 
Warning at line 51: comment expected 
Warning at line 51: comment expected 
Warning at line 51: colon expected 
Error at line 59: 'act [roman number]' or 'scene [roman number]' expected 
1 errors and 27 warnings found. No code output. 

Quelqu'un peut-il me diriger dans la bonne direction pour régler cela? Mon projet original allait être l'apprentissage de spl, ne pas pencher pour déboguer les compilateurs (je voudrais en fait écrire mon propre compilateur, mais je préférerais m'en tenir à mon projet initial pour l'instant). Je cours OS X 10.6.2, gcc version 4.2.1 (Apple Inc. build 5646) (dot 1), flex 2.5.35, et bison (GNU Bison) 2.3.

EDIT: Pour les programmes simples ne nécessitant pas GOTO (par exemple hello.spl), vous pouvez contourner le problème en supprimant tous les ACT/lignes SCENE sauf la première ACT I/SCENE I.

Répondre

22

Ceci est un défaut dans une expression régulière dans l'analyseur lexical.

I forked the language.

I fixed the issue.

I notified the original authors.

Here's a release of the language that includes the fix for your enjoyment.

There are still a few warnings, mais ils ne semblent pas affecter quoi que ce soit. Let me know si vous trouvez d'autres problèmes fonctionnels et je verrai ce que je peux faire avec eux.

(Roffel - ce serait la nécromancie, sinon le fait que personne ne se soucie de ce problème.)

+0

Ditto-eth. Merci Kyle. Marlowe a été intégré à OpenCOBOL, COBILL. –

+0

En parlant de nécromancie: en réalité, le diagnostic présenté ici est incorrect. L'expression régulière originale fonctionnerait aussi bien que le remplacement suggéré. Cependant, il y a eu un bug dans flex depuis une dizaine d'années impliquant l'utilisation de répétitions contreventées avec des arguments insensibles à la casse. Je l'ai signalé à https://github.com/westes/flex/issues/193 – rici

1

Le premier problème avec scanner.l:600: warning, rule cannot be matched est parce que le mot rotten a été ajouté deux fois au fichier include/negative_adjective.wordlist il suffit de le supprimer de là et le premier avertissement sera supprimé. Cela ne règle pas le reste. Regarde ici si je peux réparer quelque chose de plus.

+0

J'ai regardé un peu maintenant. Le scanner semble mélanger les chiffres romains pour "scènes" et "actes". Considéré dans la réécriture de la grammaire pour avoir des parties séparées, mais alors il mélangé avec le jeton "I" de la première personne. Eh bien, je dirais que quelque chose dépend du scanner et du grammeur utilisés lors de la création de cette chose ... ça aurait été amusant de voir fonctionner :) – epatel

+0

"scanner et grammer" - je veux dire la version bison et flex – epatel

+0

Eh bien, c'est un bon début. Quand j'aurai le temps, j'essaierai d'y jeter un coup d'œil. Ou peut-être qu'une autre âme serviable viendra et le prendra. Je suis d'accord qu'il serait amusant de voir travailler. –

3

Ce problème résulte d'un bogue dans Flex introduit quelque part entre les versions 2.5.4 et 2.5.33; c'est-à-dire, entre le moment où le processeur Shakespeare a été écrit et cette question a été posée. Le bogue implique l'utilisation de l'opérateur de répétition contreventée avec des arguments à caractère unique dans une expression régulière insensible à la casse (par exemple i{1,3}, qui fait partie de la spécification Shakespeare flex pour les chiffres romains); la conséquence du bogue est que l'insensibilité à la casse est perdue, de sorte que i{1,3} est étendu comme s'il s'agissait de [iI]i?i? au lieu de [iI][iI]?[iI]?. Cela signifie que les chiffres romains en majuscule avec des caractères répétés (ce qui est normal dans le code source de Shakespeare) ne seront pas correctement identifiés.

Le changement de Kyle Cartmell dans Marlowe utilise des majuscules dans l'expression rationnelle au lieu de minuscules, ce qui inverse le problème de sorte que seuls les chiffres romains en majuscules fonctionnent de manière fiable.

J'ai signalé le bug Flex comme https://github.com/westes/flex/issues/193. C'est un correctif d'une ligne à Flex si quelqu'un en a besoin avant la sortie officielle.