Je voudrais analyser un lambda-calcul. Je ne sais pas comment analyser le terme et respecter la priorité des parenthèses. Ex:Comment analyser le terme lambda
(lx ly (x(xy)))(lx ly xxxy)
Je n'arrive pas à trouver le bon moyen de le faire. Je ne peux pas voir l'algorithme adapté. Un terme est représenté par une structure qui a un type (APPLICATION, ABSTRACTION, VARIABLE) et un composant droit et gauche de type "terme struc".
Une idée de comment faire cela?
EDIT
Désolé de vous déranger à nouveau, mais je veux vraiment comprendre. Pouvez-vous vérifier la fonction "expression()" pour me faire savoir si j'ai raison.
Term* expression(){
if(current==LINKER){
Term* t = create_node(ABSTRACTION);
get_next_symbol();
t->right = create_node_variable();
get_next_symbol();
t->left = expression();
}
else if(current==OPEN_PARENTHESIS){
application();
get_next_symbol();
if(current != CLOSE_PARENTHESIS){
printf("Error\n");
exit(1);
}
}
else if(current==VARIABLE){
return create_node_variable();
}
else if(current==END_OF_TERM)
{
printf("Error");
exit(1);
}
}
Merci
+1: La récursion est l'astuce ici. – Puppy
Ok, mais je ne peux pas vraiment voir l'astuce. Peux-tu me donner un exemple. S'il vous plaît. –
Donner un exemple plus détaillé équivaudrait à écrire le code. Y a-t-il une partie spécifique qui vous cause des problèmes? –