【问题标题】:How to evaluate tokens in C?如何评估 C 中的令牌?
【发布时间】:2016-12-17 13:41:35
【问题描述】:

我正在尝试开发一个从用户输入(2+2、3*1、4-2、2+3*1 等)中获取数学表达式的程序,我已经可以使用它了简单,一个操作,但它还不能与多个一起工作。有人建议我对字符串进行标记和评估,虽然我设法对其进行标记,但我正在阅读的手册并没有解释如何评估(我正在尝试自己学习,我没有功课)并且谷歌没有不是很有帮助。

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

}

这就是我目前所拥有的代码。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 研究递归下降解析器。

标签: c token c-strings evaluate


【解决方案1】:

您必须为表达式实现解析器,分析输入并评估方程的顺序,以便例如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(一种自下而上的解析器)上找到很好的解释。

如果 wiki 页面不够,只需查找 top-downbottom-up 解析器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2019-03-31
    • 2013-07-08
    相关资源
    最近更新 更多