2016-12-17 8 views
0

私は、ユーザー入力(2 + 2、3 * 1、4-2,2 + 3 * 1など)から数式を取るプログラムで作業しようとしています。 、1つの操作ですが、まだ複数の場合は機能しません。私は文字列をトークン化して評価することを提案されました。私はそれをトークン化することができましたが、私が読んでいるマニュアルは評価する方法を説明していません(私は自分自身で学習しようとしています。超助けになった。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); 
    } 

} 

これはこれまでのコードの内容です。助けが大いに評価される、ありがとう。

+0

再帰的降下パーサーを調べる。 –

答えて

0

式のパーサーを実装し、入力を分析して等式の次数を評価する必要があります。 2 + 2 * 2は6であり、8ではない。

2 + 2 * 2の例を見てみよう。たとえば、a*b*(a,b)であり、c+d+(c,d)であるという2つの方法で数学演算を表現できるとします。したがって、表現がa+b*cの場合は、+(a,*(b,c))と評価されます。これが起こる1つの方法です。

LR parser wiki page(ボトムアップパーサーの一種)についての良い説明もあります。

wikiページが十分でない場合は、top-downbottom-upパーサーを探してください。

関連する問題