我想解析一个 lambda 演算。我不知道如何解析术语并尊重括号优先级。前任:
(lx ly (x(xy)))(lx ly xxxy)
我无法找到做到这一点的好方法。我只是看不到适应的算法。术语由具有类型(应用程序、抽象、变量)和“结构术语”类型的左右组件的结构表示。
知道怎么做吗?
编辑
很抱歉再次打扰您,但我真的很想了解。你能检查一下函数“表达式()”,让我知道我是否正确。
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);
}
}
谢谢