Ich würde gerne ein Lambda-Kalkül analysieren. Ich weiß nicht, wie man den Begriff analysiert und Klammernpriorität respektiert. Bsp .:Wie lambda Ausdruck zu behandeln
(lx ly (x(xy)))(lx ly xxxy)
Ich schaffe es nicht, den guten Weg zu finden, dies zu tun. Ich kann den angepassten Algorithmus einfach nicht sehen. Ein Ausdruck wird durch eine Struktur dargestellt, die einen Typ (ANWENDUNG, ABSTRAKTION, VARIABLE) und eine rechte und linke Komponente vom Typ "Strukturbegriff" haben.
Irgendeine Idee, wie man das macht?
EDIT
Sorry, Sie wieder zu stören, aber ich möchte wirklich verstehen. Können Sie die Funktion "expression()" überprüfen, um mich wissen zu lassen, ob ich recht habe?
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);
}
}
Dank
+1: Rekursion ist der Trick hier. – Puppy
Ok, aber ich kann den Trick nicht wirklich sehen. Kannst du mir ein Beispiel geben. Bitte. –
Ein ausführlicheres Beispiel würde ziemlich viel zum Schreiben des Codes geben. Gibt es einen bestimmten Teil, der dir Probleme bereitet? –