2010-11-19 5 views
0

Dans les sections suivantes du code, je reçois des erreurs que je ne suis pas sûr pourquoi je les reçois malgré l'utilisation de toutes mes ressources pour les rechercher. C'est le codage SMLNJ.Erreur de syntaxe SML aide

compComm (DeallocComm(var, exp), env, ip, codes, contIP)= 
let val loc = lookupEnv var env; 
    val codes1 = emitByte(LDC, ip, codes); 
    val codes2 = emitByte(Arg loc, ip + 1, codes1); 
    val (ip', codes3) = compExp(exp, env, ip+2, codes2); 
    val codes4 = emitByte(ADEALLOC, ip', codes3); 
    in(ip'+1, codes4, nil, contIP) 
    end; 

donne

hw4.sml: 339,5 à 433,6 Erreur: non constructeur appliquée à l'argument de motif: DeallocComm hw4.sml: 427,26 à 427,29 erreur: Variable non lié ou constructeur: var

hw4.sml: 430,31 à 430,34 erreur: Variable non lié ou constructeur: exp

et

ADEALLOC => let val (n, stack') = popStack stack 
val (loc, stack'') = popStack stack'; 
fun loop'(n, loc, store) = 
    val store' = updateTable (loc, defaultIntValue, store); 
    in loop'(n-1, loc+1, store) = 
    val store'' = loop'(n, loc, store) end; 
in loop(ip+1, store'', stack'') end; 

donne

hw4.sml: 612,14 Erreur: erreur de syntaxe: l'insertion EQUALOP

hw4.sml: Erreur 615,8 à 615,11: erreur de syntaxe: remplacement VAL avec END

toute aide sur ces points seraient appréciés .

Répondre

0

donc pour le premier, je pense qu'il ne peut pas trouver le constructeur DeallocComm. (où est-ce déclaré?)

dans le second, cela n'a aucun sens. Je n'ai aucune idée de ce que tu fais. sont store' et store'' à l'intérieur de la fonction loop' ou à l'extérieur? si le premier, alors pourquoi n'est-il pas à l'intérieur d'un let? si ce dernier, où est le corps de loop'; et comment pouvez-vous utiliser store'' dans l'expression à la fin, qui est en dehors de la fonction? aussi, il n'y a pas de valeur appelée loop. il semble que vous manquiez beaucoup de fun, let, et d'autres choses.

1

Vous pouvez appeler une fonction en tant qu'argument à transmettre à une autre fonction, mais vous ne le faites pas correctement. La syntaxe correcte consiste à appeler le nom de la fonction sans argument ni perenthes, puis à utiliser la fonction passée en argument dans le corps de la fonction à laquelle elle est transmise.

Donc, vous voulez que votre déclaration de fonction soit:

compComm (DeallocComm, env, ip, codes, contIP)= 

puis utilisez DeallocComm dans le corps. En l'état, vous créez une variable d'environnement qui a une valeur mais pas de nom - DeallocComm (var, exp) évalue avant que soit passé dans la fonction.

+0

@Crowbreak, essayez de donner des conseils plus directifs à l'utilisateur, –

+0

Droit, désolé. Je vous remercie! – Crowbeak