【问题标题】:Calculate prefix expression unix计算前缀表达式 unix
【发布时间】:2013-11-21 10:57:49
【问题描述】:

我需要编写一个多进程前缀表达式解析器和求值器。

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

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

父进程必须等到子进程读完它的子表达式,然后从那里继续。

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

【问题讨论】:

  • 到目前为止,您尝试过什么?有什么效果?什么没有奏效?哦,您可能想阅读the Stack Overflow question checklist。您可能还想了解SSCCE 是什么。
  • 告诉你的教授,或者给你这个任务的人,这是非常不合理的。没有人会分叉一个进程来读取“子表达式”,在您的示例中,它可能只有一个十进制数字。真的很奇怪,即使是家庭作业。
  • 把这张照片发给你的教授dumpaday.com/wp-content/uploads/2013/01/…
  • 这是我的第一个任务,我真的不知道该做什么以及如何开始这个
  • 忽略您必须创建进程一分钟的事实。你能编写一个程序,通过使用递归调用自身的函数来解析前缀表达式吗?从那里开始。

标签: c unix prefix


【解决方案1】:

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

  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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多