2016-12-17 1 views
0

사용자 입력 (2 + 2, 3 * 1, 4-2, 2 + 3 * 1 등)에서 수학 표현식을 사용하는 프로그램에서 작업하려고합니다. 하나의 작업이지만 아직 여러 번 작동하지 않습니다. 나는 토큰 화하고 문자열을 평가할 것을 제안 받았고, 토큰 화하는 동안 나는 읽고있는 설명서가 평가하는 방법을 설명하지 못했다. (나는 내 ​​자신을 배우려고 노력하고있다. 내게 학교 공부가 없다) google은 ' 슈퍼 도움이되었습니다.C에서 토큰을 평가하는 방법은 무엇입니까?

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() { 
    char conta[255]; 
    int n1; 
    int n2; 
    int result; 
    char op; 

    printf("Introduza uma expressao numerica: "); 
    gets(conta); 
    sscanf(conta, "%d %c %d", &n1, &op, &n2); 
    char* token = strtok(conta, "+-*/"); 
    while (token) { 
    printf("token: %s\n", token); 
    token = strtok(NULL, "+-*/"); 
    } 
    if(op == '+'){ 
    printf("%d", result=n1+n2); 
    }else if(op == '-'){ 
    printf("%d", result=n1-n2); 
    }else if(op == '*'){ 
    printf("%d", result=n1*n2); 
    }else if(op == '/'){ 
    printf("%d", result=n1/n2); 
    } 

} 

이것은 지금까지 제가 가지고있는 코드입니다. 어떤 도움이 크게 apreciated 것입니다, 감사합니다.

+0

재귀 적 파생어를 조사하십시오. –

답변

0

표현식에 대한 파서를 구현하고 입력을 분석하고 등식 순서를 평가해야합니다. 2 + 2 * 2는 6이 아니라 8이됩니다.

그럼 2 + 2 * 2 예제를 살펴 보겠습니다. 수학적 연산은 a*b*(a,b)이고 c+d+(c,d) 인 두 가지 방법으로 표현할 수 있다고 상상해보십시오. 따라서 표현식이 a+b*c 인 경우 +(a,*(b,c))으로 평가됩니다. 이것은 이것이 일어나는 한 가지 방법입니다.

LR parser wiki page (상향식 파서 유형)에 대한 좋은 설명을 찾을 수도 있습니다.

위키 페이지가 충분하지 않으면 top-downbottom-up 파서를 찾아보십시오.

관련 문제