Я хотел бы проанализировать лямбда-исчисление. Я не знаю, как разбирать этот термин и соблюдать приоритет в круглых скобках. Пример:Как разбирать лямбда-счет
(lx ly (x(xy)))(lx ly xxxy)
Мне не удалось найти хороший способ сделать это. Я просто не вижу адаптированного алгоритма. Термин представлен структурой, которая имеет тип (APPLICATION, ABSTRACTION, VARIABLE) и правый и левый компонент типа «строгий срок».
Любая идея, как это сделать?
EDIT
Извините, что беспокою вас снова, но я действительно хочу понять. Можете ли вы проверить функцию «expression()», чтобы сообщить мне, прав ли я.
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);
}
}
Благодаря
+1: Рекурсия - это трюк. – Puppy
Хорошо, но я не могу понять трюк. не могли бы вы привести мне пример. Пожалуйста. –
Предоставление более подробного примера в значительной степени может привести к написанию кода. Есть ли определенная часть, которая вызывает у вас проблемы? –