我有一个简单的C程序
int main()
{
int n, maxn = 21;
float SN, x;
printf("input x:");
scanf("%f", &x);
printf("input maxn:");
scanf("%d", &maxn);
for(n=0;n<=maxn;n++){
SN = SN + pow(x,n);
n = n + 1;
}
printf("%f", SN);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要使它具有多种功能,因此用户可以输入任何表达式来替换pow(x,n),无论用户从键盘输入什么.如何将表达式放入程序中?
650*_*502 10
C和C++没有为您提供已实现的此功能,因为在编译时(语法分析表达式时)和运行时(评估时)之间有明确的区别.
为表达式实现解析器和编译器/求值器是一个很好的练习,但它并不是微不足道的,可能需要比此时更多的经验(考虑到你提出的问题).
对于这个问题最容易理解的方法是在我看来是一个递归下降解析器,但对于四个操作,数字和变量,我猜它需要大约一百行代码.
yacc和bison是用于根据语法定义自动生成解析/评估代码的工具.我个人更喜欢手写解析器,因为你得到更好的控制(特别是在错误处理或句法和语义层面相互作用时,但那是我和我也是NIH综合症的坏情况).
像Python或Javascript这样的高级语言为您提供已实现的此功能eval.