2013-11-21 52 views
1

我需要编写一个多进程前缀表达式解析器和评估器。计算前缀表达式unix

给定一个前缀表达式,如标准输入 上的以下内容,例如:(+ (* (+ 2 4) 5) (- (- 6 7) 8))

程序应读取分叉进程中的每个子表达式。

父进程必须等到子进程读完子表达式后才继续。

使用scanf或printf函数并不违法。

+2

你到目前为止尝试过什么?什么工作?什么都没有奏效?哦,你可能想阅读[Stack Overflow问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。您可能还想了解[SSCCE](http://sscce.org/)是什么。 –

+4

告诉你的教授,或者任何给你这个任务的人,这是非常不合理的。没有人会分叉进程来读取一个“子表达式”,在你的例子中,它可能只有一个十进制数字。真的很奇怪,即使是作业。 – unwind

+0

发送你的教授这张照片http://www.dumpaday.com/wp-content/uploads/2013/01/dog-chews-up-computer-funny-pictures1.jpg – nonsensickle

回答

0

完全没用,但也许很有趣。

  1. 您首先在一个过程中完成此操作。
  2. 添加多处理的东西。

作为一个提示,我告诉你如何在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; 
}