2013-11-21 2 views
1

다중 처리 접두어 표현식 파서 및 평가자를 작성해야합니다.접두어 표현식 계산 유닉스

예 : (+ (* (+ 2 4) 5) (- (- 6 7) 8))과 같은 표준 입력 에서 다음과 같은 접두사 표현식이 주어집니다.

프로그램은 각 하위 표현식을 분기 된 프로세스로 읽어야합니다.

하위 프로세스가 하위 식 읽기를 완료 할 때까지 부모 프로세스가 대기해야하며 하위 프로세스를 계속 진행해야합니다.

scanf 또는 printf 기능을 사용하는 것은 위법입니다.

+2

그리고 지금까지 어떤 시도를 했습니까? 무엇이 효과가 있었습니까? 무엇이 효과가 없습니까? 오, 그리고 [Stack Overflow question checklist] (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; 
}