1
我需要编写一个多进程前缀表达式解析器和评估器。计算前缀表达式unix
给定一个前缀表达式,如标准输入 上的以下内容,例如:(+ (* (+ 2 4) 5) (- (- 6 7) 8))
。
程序应读取分叉进程中的每个子表达式。
父进程必须等到子进程读完子表达式后才继续。
使用scanf或printf函数并不违法。
我需要编写一个多进程前缀表达式解析器和评估器。计算前缀表达式unix
给定一个前缀表达式,如标准输入 上的以下内容,例如:(+ (* (+ 2 4) 5) (- (- 6 7) 8))
。
程序应读取分叉进程中的每个子表达式。
父进程必须等到子进程读完子表达式后才继续。
使用scanf或printf函数并不违法。
完全没用,但也许很有趣。
作为一个提示,我告诉你如何在C++中做到这一点。你必须自己把它翻译成C:
int read_sequence()
{
int y;
if ((cin>>ws).peek() == '('){
cin.ignore(1);
char op = cin.get();
y = read_sequence();
while ((cin>>ws).peek() != ')'){
int b = read_sequence();
y = op == '+' ? y + b
: op == '-' ? y - b
: op == '*' ? y*b
: y/b;
}
cin.ignore(1);
} else {
cin >> y;
}
return y;
}
你到目前为止尝试过什么?什么工作?什么都没有奏效?哦,你可能想阅读[Stack Overflow问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。您可能还想了解[SSCCE](http://sscce.org/)是什么。 –
告诉你的教授,或者任何给你这个任务的人,这是非常不合理的。没有人会分叉进程来读取一个“子表达式”,在你的例子中,它可能只有一个十进制数字。真的很奇怪,即使是作业。 – unwind
发送你的教授这张照片http://www.dumpaday.com/wp-content/uploads/2013/01/dog-chews-up-computer-funny-pictures1.jpg – nonsensickle